如何在Linux中使用sshpass和scp查看进度?

如何在Linux中使用sshpass和scp查看进度?

在我的 Linux 终端中,我使用这个命令

sshpass -p "pass" scp -r [email protected]:/cmshome/me/file /home/me/Desktop

下载其中包含密码的文件。如果没有 sshpass,我可以看到下载进度,但有了它,它只是空白,直到完成为止,我看不到它。

有什么办法可以用 sshpass 看到它吗?

答案1

我认为您所问的问题并不容易实现,甚至使用基本的 Bash 脚本是不可能的。

因此,以下内容并不能真正回答您的问题,而是提供了解决您的问题的另一种方法。

您可以使用带有公钥身份验证(无需密码)的sshpass纯命令,而不是使用。scp如果您不知道它是什么,请参阅[1]。

如果您打算使用 scp供本地使用的脚本,这就是我认为要走的路:

  • 生成没有密码的公钥
  • 用于ssh-copy-id将您的公钥添加到服务器

这已经足以能够在没有任何提示的情况下运行命令:

scp -r [email protected]:/cmshome/me/file /home/me/Desktop

为了您要分发的脚本,带有明确密码的 sshpass 当然不是一个好主意,您至少应该使用 sshpass 的“-e”标志并让用户提供密码作为环境变量以获得更好的安全性。

在这种情况下,公钥方法不太方便,但仍然是可能的。如果您无法要求脚本的用户创建公钥,您可以动态创建一个公钥,将其复制到服务器上并scp在没有任何提示的情况下执行:

 #!/bin/bash
 KEY="$HOME/.ssh/id_rsa_example"
 if [ ! -e "$KEY" ]; then
     ssh-keygen -t rsa -N "" -f "$KEY"
     sshpass -e ssh-copy-id -i "${KEY}.pub" [email protected]
 fi
 scp -r [email protected]:/cmshome/me/file /home/me/Desktop

最后还有可能用来rsync制作进度条:

$ rsync -P --rsh="sshpass -p $PASSWORD ssh -l me8" host.ca:/cmshome/me/file /home/me/Desktop

[1]https://help.ubuntu.com/community/SSH/OpenSSH/Keys

相关内容