循环打破ssh运行脚本

时间:2013-05-16 10:26:10

标签: bash ssh

我有几台机器可以更新一些脚本。我可以使用一个小的bash脚本来执行此操作,该脚本由一个while循环组成,用于从列表中读取IP并为它们调用scp。它运行正常,但是当我尝试在循环中运行更新的脚本时,它会打破循环,尽管它本身运行得很好。

#!/bin/bash

cat ip_list.txt | while read i; do
    echo ${i}
    scp the_script root@${i}:/usr/sbin/ # works ok
    ssh root@${i} /usr/sbin/the_script  # works for a first IP, then breaks
done

这是假设工作的方式吗?如果是这样,我如何在不破坏循环的情况下通过ssh远程运行脚本?

2 个答案:

答案 0 :(得分:7)

使用此:

ssh -n root@${i} /usr/sbin/the_script  # works for a first IP, then breaks

-n选项告诉ssh不要从标准输入读取。否则,它会读取stdin并将其传递给网络连接,这会占用输入管道的其余部分。

答案 1 :(得分:1)

您需要像这样更改ssh行

ssh root@${i} /usr/sbin/the_script  < /dev/null # works for a first IP, then breaks