循环打破ssh运行脚本

aka*_*nuk 2 ssh bash

我有几台机器来更新一些脚本.我可以用一个小的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
Run Code Online (Sandbox Code Playgroud)

它是如何工作的?如果是这样,如何在不中断循环的情况下通过ssh远程运行脚本?

Bar*_*mar 7

用这个:

ssh -n root@${i} /usr/sbin/the_script  # works for a first IP, then breaks
Run Code Online (Sandbox Code Playgroud)

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