Unix:ssh通过命令行而不是通过脚本工作

时间:2020-07-13 19:45:15

标签: sh

下面的命令通过命令行运行:

expect -c 'spawn ssh username@Host ; expect "assword:" ; send "<password>\r" ; interact;'

如果我包含在脚本中,则下面的内容不起作用

while read server_from_file
do
    expect -c 'spawn ssh username@${server_from_file}; expect "assword:" ; send "<password>\r" ; interact;'
done < serverlist.conf

也请让我知道如何使用上述脚本运行某些命令

1 个答案:

答案 0 :(得分:0)

expect从其环境继承stdin。在第一种情况下,expect使用脚本的标准输入作为其标准输入。在第二种情况下,expect从封闭的while循环继承stdin,因此它将从文件中读取。一种典型的解决方案是为循环使用不同的fd。例如:

while read server_from_file <&3  
do
    expect -c 'spawn ssh username@${server_from_file}; expect "assword:" ; send "<password>\r" ; interact;'
done <3 serverlist.conf

(请注意,某些shell提供-u,还有其他方法可以做到这一点,但这应该使您指向正确的方向。)