Skip to content

SRC : Simultaneous Remote Command

Lorsque vous administrez pas mal de serveur, il peut-être interressant de lancer simultanément une commande (ou une série de commande) sur l'ensemble des serveurs (pour faire une mise à jour de paquets ou de sécurité par exemple).
J'ai donc développé un petit logiciel en Python pour envoyer une commande (ou série de commandes) à un ensemble de serveur. Le logiciel envoie cette commande grâce à ssh. Par exemple, cela permet de faire les mise-à-jour de sécurité de serveurs Debian en envoyant "apt-get update;apt-get upgrade".

Le script

Le script utilise des thread pour envoyer à chaque serveur la commande à exécuter. La sortie de cette commande est enregistrée dans un fichier qui se nomme <nom_du_server>.log

 1 #!/usr/bin/env python
 2 
3 import os 4 from threading import Thread 5
6
7 class MyThread(Thread): 8 def __init__(self,serverName,command):
9
Thread.__init__(self) 10 self.serverName=serverName 11 self.command=command 12
13 def run(self):
14
cmd_ssh = "ssh root@"+self.serverName+ " '"+self.command+"'"
15 logfile = open(self.serverName+".log",'w') 16 for line in os.popen(cmd_ssh).readlines(): 17 logfile.write(line) 18 logfile.close() 19
20 cmdFile = open(
"cmd") 21 cmd = cmdFile.readline
() 22 cmdFile.close()
23
24 servers = open("servers") 25 server = servers.readline() 26 while server: 27 thrd = MyThread(server[:-1], cmd[:-1]) 28 thrd.start() 29 print "Thread for "+server[:-
1]+" server started" 30 server = servers.readline() 31 servers.close()

Utilisation

Pour utiliser le script, téléchargez le ici et créer les fichiers suivants :
  • servers : contenant sur chaque ligne le nom ou l'adresse du serveur
  • cmd : la commande à envoyer sur une ligne (si vous voulez envoyer plusieurs commandes, il faut les acrire sur une seule ligne et les séparer par un ; ).

Pour que cela fonctionne, il faut utiliser ssh avec une authentification par certificat et que le script n'est pas à "saisir" la passphrase (soit il n'y en a pas, soit il faut utiliser ssh-agent).
Il ne reste plus qu'à lancer la commande src.py et attendre la fin des commandes sur chaque serveur ;-)

Rétroliens

Pas de rétroliens

Commentaires

Afficher les commentaires en Vue non groupée | Vue groupée

Jkx sur :

Pourqoa ne pas directement utiliser le module ssh de python ? Ca sera + propre et aussi ca permet de gèrer l'authentification plus simplement.

Car hum .. perso j'ai viré le ssh root des machines (je sais + pourqoa mais j'avais une bonne raison à l'époque :-)


(PS, je déteste toujours autant la méthode anti-spam 249L qui n'est pas WAI compliant !!!! et oui je suis pour le WAI !!!) (désolé pour le spam) (en + j'arrive jamais à lire ce foutu texte, ca fait 4 fois que je le tappe... !!! Y a mieux !!) (Bon ca fait 5 fois.. il déconne ce truc..)
A ++

David sur :

Pour le module ssh, je ne l'ai pas utilisé tout simplement car il n'est pas listé dans les modules sur le site de la doc de python (http://docs.python.org/modindex.html).
Mais je vais regarder ça.

Et pour le spam, WAI... bof bof...

Jkx sur :

Bon Ok, j'ai pigé le spamTrucBot, il faut tapper le texte en minuscule .. Grr le lien répondre marche aussi un coup sur deux.. (c qoa ce soft sérieux ?)

David sur :

le lien répondre ? en fait, tu peux répondre directement dessous en sélectionnant le message auquel tu réponds (le lien en fait préremplit ce champs et c'est donc du javascript...).

Ajouter un commentaire

Marquer un texte en gras: *mot*, souligner un texte: _mot_.
Les smilies standard comme :-) et ;-) sont convertis en images.
Les adresses Email ne sont pas affichées, et sont seulement utilisées pour la communication.

Pour éviter le spam par des robits automatisés (spambots), merci d'entrer les caractères que vous voyez dans l'image ci-dessous dans le champ de fomulaire prévu à cet effet. Assurez-vous que votre navigateur gère et accepte les cookies, sinon votre commentaire ne pourra pas être enregistré.
CAPTCHA

Form options
tweetbackcheck