我需要创建一个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等)。
答案 0 :(得分:4)
你做错了两个方法:
如果您希望expect
与ssh
互动,则需要从ssh
脚本开始expect
而不是之前。
如果您将脚本(/path/to/script/test.sh
)设置为stdin
的{{1}},则无法再与ssh
进程通信。< / p>
您应该使用scp将脚本复制到远程主机,然后运行它。
期望脚本可能如下所示:
ssh
答案 1 :(得分:0)
snapshot & delete