我正在使用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
可能是什么问题以及如何解决?
答案 0 :(得分:7)
新的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 。
答案 1 :(得分:2)
我找到了解决方案:
问题是新版本的ssh客户端仍然有sshpass
的旧版本(从2008年未更改)。
您可以找到补丁here
您需要的只是修补源代码(只需1行添加和1个小更改),编译和安装(不要忘记在之前删除包)。
答案 2 :(得分:0)
也许您需要像这样的-o stricthostkeychecking=no
sshpass -p $PASSWORD ssh -o stricthostkeychecking=no user@domain "command1;command2;"
答案 3 :(得分:0)
最后,由于相同的问题,我最终使用rsync
而不是scp
。我被迫使用此有用的命令,因为Im备份了路由器的配置和连接到这些路由器的计算机的数据。路由器使用的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-files
所述顺便说一句,如果要执行还原,只需按目标反转源即可。不需要太多更改,您可以在同一命令外壳中反转目标目录和源目录的顺序,确保目标计算机上的用户使用相同的密码来接受rsync
答案 4 :(得分:-1)
您可以使用rsync
,如下所述:
rsync --rsh="sshpass -p 123 ssh -l sayuj" 192.168.1.51:/home/sayuj/examples.desktop ~/Desktop/