Dans notre modeste vie d'admin sys nous sommes souvent amenés à exécuter les mêmes commandes sur de multiples machines de la même plateforme .
L'utilisation d'une clé ssh pour l'authentification est un grand classique afin de se passer du mot de passe . Mais lorsqu'il s'agit de devoir taper une commande , ont se connectent à l'ensemble des machines .
Il serait beaucoup plus facile d'avoir un script qui se connecte à "n" machines et exécute une ou "x" commandes sur chacunes d'entre elles.
Pour cela on aura besoins du paquet "expect" . Commençons par l'installer .
- /*
- apt-get install expect
- */
En gros "expect" est un outil qui permets d'intéragir avec des programmes interactifs . Prenons le cas de ssh .
Quand vous vous connecter à une machine distante pour la 1ere fois il vous est demandé si oui ou non vous voulez vous connecter à cette machine .
Eh c'est la que expect intervient comme le montre le script ci-dessous .
- /*
- #!/usr/bin/expect -f
- set pass "votre_pass"
- set serveur [lrange $argv 0 0]
- set timeout -1
- spawn ssh root@$serveur
- expect {
- "*?connecting*" { send -- "yes\r"}
- "*?assword:*" {send -- "$pass\r"}
- }
- expect "*?:*"
- #send -- "df -h\r"
- send -- "uptime\r"
- send -- "exit\r"
- expect eof
- */
Toujours pour les fainéants
- /*
- #!/bin/sh
- for machines in VM1 VM2 ;
- do
- ./execution-a-distance.sh "$machines"
- done
- */
Bien-sur ceci n'est qu'une ébauche du potetienls de cet outil . Qui je pense changera certaines de vos habitudes. Sauf si bien sur vous aviez d'autres méthodes que je ne connaisse.
Merci à momo pour cette découverte