2016年1月14日 星期四

Using while loop to ssh to multiple servers

我有一個檔案,檔名叫 ip_list.txt ,內容如下
192.168.0.1
192.168.0.2
192.168.0.3

當我透過 while 使用 read 指令將檔案內容一行一行讀入的時後,它的表現會像是這樣
while read line; do echo $line ; done < ip_list.txt
192.168.0.1
192.168.0.2
192.168.0.3

但是當我使用上面的方法,將echo 改成 ssh ,我的 loop 只會執行第一個loop就停了。
while read line ; do ssh $line "hostname" ; done < ip_list.txt
server1.mydomain.com


原因是因為 ssh 會重設標準輸入輸出資訊
解決方法:1
可以用 -n 選項來處理
while read line ; do ssh -n $line "hostname" ; done < ip_list.txt
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com

解決方法:2
改用for
for line in $(cat ip_list.txt ) ; do ssh $list "hostneme" ; done

解決方法:3
給予第二個轉向符
while read line ; do ssh $line "hostname" < /dev/null; done < ip_list.txt