在我的 Linux 终端中,我正在使用此命令
sshpass -p "pass" scp -r me8@host.ca:/cmshome/me/file /home/me/Desktop
Run Code Online (Sandbox Code Playgroud)
下载带有密码的文件。没有 sshpass,我可以看到下载进度,但有了它,它在完成之前只是空白,我看不到它。
有没有办法用 sshpass 看到它?
我认为您提出的问题不容易实现,甚至可能无法使用基本的 bash 脚本编写。
因此,以下内容并不能真正回答您的问题,而是为您的问题提供了另一种方法。
除了使用sshpass
,您还可以使用scp
带有公钥身份验证的普通命令而无需密码。如果您不知道它是什么,请参阅 [1]。
如果您打算在本地使用的脚本中使用 scp ,这是 IMO 的方法:
ssh-copy-id
将您的公钥添加到服务器这已经足以在没有任何提示的情况下运行您的命令:
scp -r me8@host.ca:/cmshome/me/file /home/me/Desktop
Run Code Online (Sandbox Code Playgroud)
对于要分发的脚本,使用明确密码的 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" me8@host.ca
fi
scp -r me8@host.ca:/cmshome/me/file /home/me/Desktop
Run Code Online (Sandbox Code Playgroud)
最后还有可能rsync
用于制作进度条:
$ rsync -P --rsh="sshpass -p $PASSWORD ssh -l me8" host.ca:/cmshome/me/file /home/me/Desktop
Run Code Online (Sandbox Code Playgroud)
[1] https://help.ubuntu.com/community/SSH/OpenSSH/Keys