7

我正在使用 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

可能是什么问题,我该如何解决?

4

5 回答 5

8

也许你需要-o stricthostkeychecking=no这样

sshpass -p $PASSWORD ssh -o stricthostkeychecking=no user@domain "command1;command2;"
于 2018-07-11T00:34:54.627 回答
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

于 2012-06-06T00:17:28.247 回答
2

我找到了一个解决方案:

问题是新版本的 ssh 客户端仍然有旧版本sshpass(从 2008 年开始没有改变)。

你可以在这里找到补丁

sshpass来源

您只需要修补源代码(只需添加 1 行代码和 1 处小改动)、编译和安装(不要忘记之前删除包)。

于 2011-07-06T13:22:28.183 回答
0

最后,我最终使用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

于 2018-12-16T17:48:46.483 回答
-1

您可以使用rsync如下所述:

rsync --rsh="sshpass -p 123 ssh -l sayuj" 192.168.1.51:/home/sayuj/examples.desktop ~/Desktop/

于 2013-07-25T15:20:47.580 回答