Answers:
我认为您提出的要求不容易实现,使用基本的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