script bash pour ssh plusieurs serveurs dans une Boucle et d'émettre des commandes
J'ai un fichier texte dans lequel j'ai une liste de serveurs. Je suis en train de lire le serveur un par un à partir du fichier, SSH
dans le serveur et d'exécuter ls
pour voir le contenu du répertoire. Ma boucle s'exécute qu'une fois, lorsque je lance le SSH
de commande, cependant, pour SCP
il fonctionne pour tous les serveurs dans le fichier texte et des sorties, je veux la boucle à courir jusqu'à la fin du fichier texte pour SSH. Voici mon script bash, comment puis-je le faire fonctionner pour tous les serveurs dans le fichier texte tout en faisant SSH
?
#!/bin/bash
while read line
do
name=$line
ssh abc_def@$line "hostname; ls;"
# scp /home/zahaib/nodes/fpl_* abc_def@$line:/home/abc_def/
done < $1
Je lance le script que $ ./script.sh hostnames.txt
- jetez un oeil à code.google.com/p/parallel-ssh
- Je suis conscient de parallèle-ssh. Je me demandais si cela peut être fait en utilisant un simple SSH!
Vous devez vous connecter pour publier un commentaire.
Le problème avec ce code, c'est que
ssh
commence la lecture des données à partir de stdin, qui vous prévu pourread line
. Vous pouvez diressh
à lire à partir de quelque chose d'autre à la place, comme/dev/null
, pour éviter de manger tous les autres noms d'hôte.ssh
lit l'entrée standard stdin et l'envoie au serveur distant pour vous permettre d'interagir à distance avec des programmes. Il ne sait pas quehostname; ls;
va simplement ignorer ces données.Un peu plus directe est d'utiliser le flag-n, qui raconte ssh de ne pas lire à partir de l'entrée standard.
Changer votre boucle une boucle for:
Ce n'est pas parallèle ssh, mais il fonctionne.
Je open-source un outil de ligne de commande appelé Couvert pour faire ce genre de chose plus facile.
D'abord vous importez vos serveurs:
Une fois que c'est fait, vous pouvez exécuter des commandes à travers eux à l'aide de caractères génériques, comme suit: