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


9

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

sshpass -p "pass" scp -r me8@host.ca:/cmshome/me/file /home/me/Desktop

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

有没有办法我可以用sshpass看到它?

Answers:


4

我认为您提出的要求不容易实现,使用基本的bash脚本甚至可能无法实现。

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

除了使用之外sshpass,您还可以在scp无密码的情况下使用带有公共密钥身份验证的plain 命令。如果您不知道它是什么,请参阅[1]。

如果您打算在脚本中使用scp 供本地使用,则这是IMO的方法:

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

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

scp -r me8@host.ca:/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" me8@host.ca
 fi
 scp -r me8@host.ca:/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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.