Outils pour utilisateurs

Outils du site


tuto:linux:envoyer_les_memes_commandes_sur_plusieurs_serveurs_ssh

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

tuto:linux:envoyer_les_memes_commandes_sur_plusieurs_serveurs_ssh [2009/03/15 12:09] – créée roottuto:linux:envoyer_les_memes_commandes_sur_plusieurs_serveurs_ssh [2009/03/15 12:09] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
 source : [[http://linux-attitude.fr/post/Le-travail-a-la-chaine-cest-has-been http://linux-attitude.fr/post/Le-travail-a-la-chaine-cest-has-been]] source : [[http://linux-attitude.fr/post/Le-travail-a-la-chaine-cest-has-been http://linux-attitude.fr/post/Le-travail-a-la-chaine-cest-has-been]]
  
-=== Konsole et dsh, les ancêtres ===+===== Konsole et dsh, les ancêtres =====
  
 Pour envoyer une même suite de commandes sur un groupe de machines, on peut soit le faire à l'aveugle avec Konsole (si on supporte KDE), soit lancer ses commandes coûte que coûte avec dsh, mais sans contrôle encore une fois sur le déroulement. Pour envoyer une même suite de commandes sur un groupe de machines, on peut soit le faire à l'aveugle avec Konsole (si on supporte KDE), soit lancer ses commandes coûte que coûte avec dsh, mais sans contrôle encore une fois sur le déroulement.
Ligne 8: Ligne 8:
  
 Avec dsh : Avec dsh :
- dsh -m machine1 -m machine2 commande+  dsh -m machine1 -m machine2 commande
  
 Attention, n'oubliez pas que votre commande est d'abord interprétée par votre shell. Ainsi, comparez : Attention, n'oubliez pas que votre commande est d'abord interprétée par votre shell. Ainsi, comparez :
- dsh -m machine1 -m machine2 -m ... "echo $HOSTNAME" +  dsh -m machine1 -m machine2 -m ... "echo $HOSTNAME" 
- dsh -m machine1 -m machine2 -m ... 'echo $HOSTNAME'+  dsh -m machine1 -m machine2 -m ... 'echo $HOSTNAME'
  
  
-=== clusterssh ===+===== clusterssh =====
  
 Mais si on désire surveiller ce qui se passe sur toutes les machines, et ainsi avoir un contrôle visuel, et au besoin effectuer une correction sur une machine en particulier, alors des outils graphiques rendent bien service, en affichant dans un terminal distinct chacune des machines que l'on contrôle. Par ici pour des captures d'écran, et un petit article de présentation de clusterssh ! Mais si on désire surveiller ce qui se passe sur toutes les machines, et ainsi avoir un contrôle visuel, et au besoin effectuer une correction sur une machine en particulier, alors des outils graphiques rendent bien service, en affichant dans un terminal distinct chacune des machines que l'on contrôle. Par ici pour des captures d'écran, et un petit article de présentation de clusterssh !
  
 Vous pouvez définir vos groupes de machines dans le fichier /etc/clusters : Vous pouvez définir vos groupes de machines dans le fichier /etc/clusters :
- groupe1 machine1 machine2 machine3 machine4 machine5 machine6 machine7 machine8 machine9 +  groupe1 machine1 machine2 machine3 machine4 machine5 machine6 machine7 machine8 machine9 
- groupe2 machine10 machine11 machine12 machine13 machine14 machine15 +  groupe2 machine10 machine11 machine12 machine13 machine14 machine15 
- all groupe1 groupe2+  all groupe1 groupe2
  
 Dès lors, un Dès lors, un
- cssh groupe1 # vous ouvre un terminal sur machine1 à machine 9 +  cssh groupe1 # vous ouvre un terminal sur machine1 à machine 9 
- cssh groupe2 # vous ouvre un terminal sur machine10 à machine15 +  cssh groupe2 # vous ouvre un terminal sur machine10 à machine15 
- cssh all # pour machine1 à machine15+  cssh all # pour machine1 à machine15
  
 Si vous avez des ports particuliers, des utilisateurs particuliers à utiliser sur certaines machines, pensez à votre ~/.ssh/config :-) Si vous avez des ports particuliers, des utilisateurs particuliers à utiliser sur certaines machines, pensez à votre ~/.ssh/config :-)
Ligne 37: Ligne 37:
 Pas de fichier de configuration de groupe pour ce programme, mais plusieurs options : Pas de fichier de configuration de groupe pour ce programme, mais plusieurs options :
  
- alias clusterm-groupe1='clusterm machine1 machine2 machine3 machine4 machine5 machine6 machine7 machine8 machine9'+  alias clusterm-groupe1='clusterm machine1 machine2 machine3 machine4 machine5 machine6 machine7 machine8 machine9'
  
 ou bien constituer votre groupe "à la main" dans l'interface, en ouvrant successivement vos shells sur chacune des machines indiquées, puis enregistrer votre session (menu fichier) sous forme d'un raccourci à placer sur votre bureau :-) ou bien constituer votre groupe "à la main" dans l'interface, en ouvrant successivement vos shells sur chacune des machines indiquées, puis enregistrer votre session (menu fichier) sous forme d'un raccourci à placer sur votre bureau :-)
  
-=== pssh ===+===== pssh =====
  
 Une autre petite suite d'outils bien sympathique est pssh, qui propose diverses commandes comme parallel-ssh (équivalent de dsh -c), parallel-nuke, parallel-scp ou parallel-slurp (son contraire). Une autre petite suite d'outils bien sympathique est pssh, qui propose diverses commandes comme parallel-ssh (équivalent de dsh -c), parallel-nuke, parallel-scp ou parallel-slurp (son contraire).
  
 Le plus simple est de lire ce qu'indique la description du paquet (apt-cache show pssh) : Le plus simple est de lire ce qu'indique la description du paquet (apt-cache show pssh) :
-* Parallel ssh (parallel-ssh, upstream calls it pssh), executes commands on multiple hosts in parallel +  * Parallel ssh (parallel-ssh, upstream calls it pssh), executes commands on multiple hosts in parallel 
-* Parallel scp (parallel-scp, upstream calls it pscp), copies files to multiple remote hosts in parallel +  * Parallel scp (parallel-scp, upstream calls it pscp), copies files to multiple remote hosts in parallel 
-* Parallel rsync (parallel-rsync, upstream calls it prsync), efficiently copies files to multiple hosts in parallel +  * Parallel rsync (parallel-rsync, upstream calls it prsync), efficiently copies files to multiple hosts in parallel 
-* Parallel nuke (parallel-nuke, upstream calls it pnuke), kills processes on multiple remote hosts in parallel +  * Parallel nuke (parallel-nuke, upstream calls it pnuke), kills processes on multiple remote hosts in parallel 
-* Parallel slurp (parallel-slurp, upstream calls it pslurp), copies files from multiple remote hosts to a central host in parallel+  * Parallel slurp (parallel-slurp, upstream calls it pslurp), copies files from multiple remote hosts to a central host in parallel
  
- # Tout d'abord, constituer un fichier groupe1.txt contenant une machine par ligne +  # Tout d'abord, constituer un fichier groupe1.txt contenant une machine par ligne 
- parallel-ssh groupe1.txt uptime +  parallel-ssh groupe1.txt uptime 
-  +   
- # Récupérer dans des répertoires relatifs au nom des serveurs un fichier donné sur chacun des serveurs +  # Récupérer dans des répertoires relatifs au nom des serveurs un fichier donné sur chacun des serveurs 
- mkdir -p /tmp/slurp +  mkdir -p /tmp/slurp 
- parallel-slurp -h groupe1.txt -L /tmp/slurp /etc/hostname hostname +  parallel-slurp -h groupe1.txt -L /tmp/slurp /etc/hostname hostname 
- ls -lR /tmp/slurp  +  ls -lR /tmp/slurp 
-  +   
- # Tuer apache* sur tout un groupe de machines +  # Tuer apache* sur tout un groupe de machines 
- parallel-nuke -h groupe1.txt apache  +  parallel-nuke -h groupe1.txt apache 
-  +   
- # Pousser un fichier localement sur toutes les machines +  # Pousser un fichier localement sur toutes les machines 
- parallel-scp -h groupe1.txt toto.pl ~/toto.pl+  parallel-scp -h groupe1.txt toto.pl ~/toto.pl
  
  
 Sinon, pour lancer juste une petite commande sur plusieurs machines et avoir tous les résultats à la suite, voila un tout petit script : Sinon, pour lancer juste une petite commande sur plusieurs machines et avoir tous les résultats à la suite, voila un tout petit script :
- #!/bin/bash +  #!/bin/bash 
- # Script to run a command across multiple machines +  # Script to run a command across multiple machines 
- TIMEOUT=10 +  TIMEOUT=10 
- MACHINES=$1;shift +  MACHINES=$1;shift 
- COMMAND=$1;shift +  COMMAND=$1;shift 
-  +   
-   for machine in $MACHINES +  for machine in $MACHINES 
-   do +  do 
-       echo  $machine  +  echo $machine 
-       ssh -oConnectTimeout=$TIMEOUT $machine $COMMAND +  ssh -oConnectTimeout=$TIMEOUT $machine $COMMAND 
-    +   
-   done+  done
  
  
 Exemple : Exemple :
- $ ./runremote.sh 'machine1 machine2 machine3 machine4' 'uptime' +  $ ./runremote.sh 'machine1 machine2 machine3 machine4' 'uptime' 
- machine1  +  machine1 
- 13:15:59 up 8 days,  3:28,  1 user,  load average: 0.00, 0.02, 0.00 +  13:15:59 up 8 days, 3:28, 1 user, load average: 0.00, 0.02, 0.00 
- machine2  +  machine2 
- 13:10:03 up 153 days, 22:43,  0 users,  load average: 0.50, 0.48, 0.45 +  13:10:03 up 153 days, 22:43, 0 users, load average: 0.50, 0.48, 0.45 
- machine3  +  machine3 
- 13:16:00 up 117 days,  3:02,  9 users,  load average: 0.39, 0.41, 0.45 +  13:16:00 up 117 days, 3:02, 9 users, load average: 0.39, 0.41, 0.45 
- machine4  +  machine4 
- 13:16:00 up 99 days,  3:25,  2 users,  load average: 3.55, 4.35, 4.31+  13:16:00 up 99 days, 3:25, 2 users, load average: 3.55, 4.35, 4.31
  
tuto/linux/envoyer_les_memes_commandes_sur_plusieurs_serveurs_ssh.1237118965.txt.gz · Dernière modification : 2009/03/15 12:09 de root