ssh,sudo,然后下载?

Web*_*ter 4 linux ssh ubuntu

我有一个服务器 A,它上面有三个用户。我需要将文件夹的 70 演出内容下载到服务器 B。服务器只有 90 演出空间,因此不能进行压缩,然后进行传输。根据我的经验,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

请各位电脑高手帮帮我。

X T*_*ian 8

您收到错误消息sudo: no tty present是因为ssh当您处于非交互模式时不会自动分配 tty 设备。即,您已指定要在远程系统上运行的命令。

您可以使用该-t选项强制 ssh 分配 tty 设备。

ssh -t user@ip "sudo tar zc -C /home/minecraft/multicraft/servers/server2 ." | tar zx
Run Code Online (Sandbox Code Playgroud)


shi*_*ams 4

您可以使用sudossh 命令内部。对于 sudo 密码提示,您可以使用开关以纯文本形式传递密码-S

ssh user@ip "echo mypassword | sudo -S tar zc -C /home/minecraft/multicraft/servers/server2 ." | tar zx
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用expect. 你也可以研究一下。

  • 此方法的缺点是它将您的密码添加到 shell 的历史记录中。恭喜,每个有权访问您服务器的人都可以轻松读取您的密码。另一个答案(建议“ssh -t”的答案)要安全得多。 (2认同)