我有一台服务器 A,上面有三个用户。我需要将文件夹的 70 GB 内容下载到服务器 B 中。该服务器只有 90 GB 空间,因此无法压缩然后传输。根据我的经验,rsync
速度非常慢,比其他方法慢 10 倍。
我一直用
ssh user@ip "tar zc -C /home/minecraft/multicraft/servers/server2 ." | tar zx
这个命令很神奇,因为它打开一个管道并以最大速度直接下载你想要的所有内容。它不会像 rsync 那样因小文件而变慢。我用它来快速传输东西,速度太快了,100 mbps 的上传速度成了瓶颈。
无论如何,但是服务器A有一个我登录的用户,它也有sudo -i,最后还有minecraft,用户文件实际上在下面。该用户不是实际用户,它只是出于安全目的的文件占位符。我无法登录该用户。
所以我必须做的是,从服务器 B ssh 到服务器 A,使用一个命令 sudo 进入 root,提供 root 密码,然后执行我通常的操作
ssh user@ip "tar zc -C /home/minecraft/multicraft/servers/server2 ." | tar zx
请万能的电脑高手帮帮我。
答案1
您收到错误消息是sudo: no tty present
因为ssh
当您处于非交互模式时不会自动分配 tty 设备。即您已指定要在远程系统上运行的命令。
您可以使用该选项强制 ssh 分配 tty 设备-t
。
ssh -t user@ip "sudo tar zc -C /home/minecraft/multicraft/servers/server2 ." | tar zx
答案2
您可以使用sudo
ssh 命令内部。对于 sudo 密码提示,您可以使用开关以纯文本形式传递密码-S
:
ssh user@ip "echo mypassword | sudo -S tar zc -C /home/minecraft/multicraft/servers/server2 ." | tar zx
另一种方法是使用expect
.你也可以研究一下。