У меня есть файл servers.txt
со списком серверов:
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
когда я читаю файл построчно while
и повторяю каждую строку, все работает как положено. Все строки напечатаны.
$ while read HOST ; do echo $HOST ; done < servers.txt
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
Однако, когда я хочу подключиться по ssh ко всем серверам и выполнить команду, мой while
цикл неожиданно перестает работать:
$ while read HOST ; do ssh $HOST "uname -a" ; done < servers.txt
Linux server1 2.6.30.4-1 #1 SMP Wed Aug 12 19:55:12 EDT 2009 i686 GNU/Linux
Это подключается только к первому серверу в списке, а не ко всем из них. Я не понимаю, что здесь происходит. Может кто-нибудь объяснить, пожалуйста?
Это даже странно, поскольку использование for
цикла работает нормально:
$ for HOST in $(cat servers.txt ) ; do ssh $HOST "uname -a" ; done
Linux server1 2.6.30.4-1 #1 SMP Wed Aug 12 19:55:12 EDT 2009 i686 GNU/Linux
Linux server2 2.6.30.4-1 #1 SMP Wed Aug 12 19:55:12 EDT 2009 i686 GNU/Linux
Linux server3 2.6.30.4-1 #1 SMP Wed Aug 12 19:55:12 EDT 2009 i686 GNU/Linux
Это должно быть что-то конкретное ssh
, потому что другие команды работают нормально, такие как ping
:
$ while read HOST ; do ping -c 1 $HOST ; done < servers.txt
ansible