使用'expect'命令远程将密码传递给SSH运行脚本

时间:2016-04-14 17:54:38

标签: linux bash ssh expect

我需要创建一个bash脚本,它将在一批机器上远程运行另一个脚本。为此,我通过SSH传递脚本。

ssh -p$port root@$ip 'bash -s' < /path/to/script/test.sh

我认为它会使用我的RSA密钥,但我收到错误:

"Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)"

我尝试使用sshpass无济于事。所以我的下一个解决方案是使用expect。我之前从未使用过期望,而且我很肯定我的语法已经过时了。

ssh -p$port root@$ip 'bash -s' < /path/to/script/test.sh
/usr/bin/expect <<EOD
expect "password"
send "$spass\n"
send "\n"
EOD

我拥有对所有计算机的root访问权限,只要代码保留在bash中,任何解决方案都可以。请记住,这将在一个循环中完成,该循环包含从父脚本传递的全局变量($ spass,$ ip,$ port等)。

2 个答案:

答案 0 :(得分:4)

你做错了两个方法:

  1. 如果您希望expectssh互动,则需要从ssh脚本开始expect而不是之前。

  2. 如果您将脚本(/path/to/script/test.sh)设置为stdin的{​​{1}},则无法再与ssh进程通信。< / p>

  3. 您应该使用scp将脚本复制到远程主机,然后运行它。

    期望脚本可能如下所示:

    ssh

答案 1 :(得分:0)

snapshot & delete