J'ai un fichier servers.txt
, avec une liste de serveurs:
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
Quand je lis le fichier ligne par ligne avec while
chaque ligne et que je les répète , tout fonctionne comme prévu. Toutes les lignes sont imprimées.
$ while read HOST ; do echo $HOST ; done < servers.txt
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
Cependant, lorsque je veux ssh sur tous les serveurs et exécuter une commande, ma while
boucle cesse de fonctionner:
$ 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
Cela se connecte uniquement au premier serveur de la liste, pas à tous. Je ne comprends pas ce qui se passe ici. Quelqu'un peut-il s'il vous plaît expliquer?
C'est encore plus étrange, car utiliser la for
boucle fonctionne bien:
$ 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
Cela doit être spécifique ssh
, car les autres commandes fonctionnent bien, telles que ping
:
$ while read HOST ; do ping -c 1 $HOST ; done < servers.txt
ansible