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 
Thursday, May 18. 2006 at 00:45 (Link) (Reply)
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 ++
Thursday, May 18. 2006 at 09:31 (Reply)
Mais je vais regarder ça.
Et pour le spam, WAI... bof bof...
Thursday, May 18. 2006 at 00:47 (Link) (Reply)
Thursday, May 18. 2006 at 09:38 (Reply)