我有几台机器可以更新一些脚本。我可以使用一个小的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远程运行脚本?
答案 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