我正在使用 sshpass 在 ubuntu 11.04 上以非交互方式传递密码。
当我将 sshpass 与 scp 一起使用时
sshpass -p '123' scp sayuj@192.168.1.51:/home/sayuj/examples.desktop ~/Desktop/
它工作正常
但它不适用于 ssh
sshpass -p '123' ssh sayuj@192.168.1.51
可能是什么问题,我该如何解决?
也许你需要-o stricthostkeychecking=no
这样
sshpass -p $PASSWORD ssh -o stricthostkeychecking=no user@domain "command1;command2;"
新的 sshpass 版本 1.05 可与最新的 ssh 客户端配合使用。它包含在 Ubuntu 12.04 Precise Pangolin 中。
对于较旧的 Ubuntu(或其他 Linux 发行版),您可以从以下位置获取源代码:
http://sourceforge.net/projects/sshpass/files/sshpass/1.05/
解压:
tar xvzf sshpass-1.05.tar.gz
建造:
cd sshpass-1.05
./configure
make
并使用创建的二进制sshpass。
最后,我最终使用rsync
而不是scp
仅仅因为同样的问题。我被迫使用这个有用的命令,因为我正在备份路由器配置和连接到这些路由器的计算机的数据。路由器使用的 linux 命令数量非常有限,而我们正在使用的型号上可以使用这个命令。我们尝试使用 SSH 密钥,但路由器没有永久内存,一旦它们重新初始化,所有 SSH 密钥都会被清除。
所以rsync
这里的命令是-e
启用选项的,我也使用 2222 端口,该-p
选项允许您更改端口。
sshpass -p 'password' rsync -vaurP -e 'ssh -p 2222' backup@???.your.ip.???:/somedir/public_data/temp/ /your/localdata/temp
正如我所做的那样,您可以进一步保护,使用多服务器环境的 bash 脚本替换单行文件的密码。另一种方法是使用 -f 选项,这样密码就不会显示在 bash 历史记录中-f "/path/to/passwordfile"
如果您只想更新修改过的文件,那么您应该使用此参数-h -v -r -P -t如此处所述https://unix.stackexchange.com/questions/67539/how-to-rsync-only-new -文件
顺便说一句,如果你想进行还原,只需通过目标反转源即可。不需要改变太多,从同一个命令 shell 你可以颠倒目标和源目录的顺序,确保目标上的用户具有相同的密码来接受rsync
您可以使用rsync
如下所述:
rsync --rsh="sshpass -p 123 ssh -l sayuj" 192.168.1.51:/home/sayuj/examples.desktop ~/Desktop/