在我的 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