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>.log1 #!/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() 1]+" server started" 30 server = servers.readline() 31 servers.close(
23
24 servers = open("servers") 25 server = servers.readline() 26 while server: 27 thrd = MyThread(server[:-1], cmd ) 29 print "Thread for "+server[:-[ :-1]) 28 thrd.start()
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
Commentaires
Afficher les commentaires en Vue non groupée | Vue groupée
Jkx sur :
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 :
Mais je vais regarder ça.
Et pour le spam, WAI... bof bof...
Jkx sur :
David sur :