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

ome*_*ega 13 scp cp

在我的 Linux 终端中,我正在使用此命令

sshpass -p "pass" scp -r me8@host.ca:/cmshome/me/file /home/me/Desktop
Run Code Online (Sandbox Code Playgroud)

下载带有密码的文件。没有 sshpass,我可以看到下载进度,但有了它,它在完成之前只是空白,我看不到它。

有没有办法用 sshpass 看到它?

nim*_*mai 8

我认为您提出的问题不容易实现,甚至可能无法使用基本的 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