为什么ssh不能连接到while循环中的任何主机?

时间:2014-07-28 07:11:59

标签: shell ssh

theIp=""
#1
echo $theIp | while read ip; do
    ssh -tt root@$ip
    exit
done
#2
while read ip; do
    ssh root@$ip
    exit
done < <(echo $theIp)
#3
while true; do
    ssh root@$theIp
    exit
done

以上3方式关于连接while语句中的任何主机,但只有最后一个成功,为什么前两个什么都不做?

1 个答案:

答案 0 :(得分:2)

ssh正在吃掉你的循环输入。可能在这种情况下,当ssh会话从中获取EOF时会退出。这可能是原因,但一些输入也可能导致它退出。您必须通过指定< /dev/null或使用-n来重定向其输入:

ssh -n "root@$ip"
ssh "root@$ip" < /dev/null

这可能也适用于-tt,因为它不知何故是独立的。试试吧。

如果您正在使用支持read -u的Bash或类似shell,您还可以为您的文件指定不同的fd

while read -u 4 ip; do
    ssh root@$ip
    exit
done 4< <(echo $theIp)