Administrer en masse avec Expect et Python
Si vous administrez beaucoup d’équipements réseau ou de serveurs il vous arrive de devoir faire des modifications en masse. Rien de plus énervant que de se taper un travail de bête de somme pour modifier une petit détail sur plein d’équipements.
Si vous suivez mon blog, vous connaissez déjà Rancid, ce logiciel de sauvegarde automatique des équipements réseau.
Rancid utilise la librairie expect pour communiquer automatiquement avec les matériels.
Expect existe dans différents langages mais notamment dans LE langage des sysadmins : Python.
Expect en Python est packagé dans les distributions les plus communes :
apt-get install python3-pexpect
Un exemple de script très simple qui sauvegarde un équipement :
#!/usr/bin/env python # -*- coding: utf-8 -*- import pexpect,sys switch_ip = sys.argv[1] switch_user = "bibi" switch_pw = "xxxxxx" myssh = pexpect.spawn('ssh %s@%s' % (switch_user, switch_ip)) myssh.logfile = sys.stdout myssh.timeout = 4 myssh.expect("%s@%s's password: " % (switch_user, switch_ip)) myssh.sendline(switch_pw) myssh.expect('#') myssh.sendline("wr") myssh.sendline("exit")
Et c’est parti :
Un switch …
python3 write-cisco.py 192.168.0.30
Une liste de switches dans un fichier …
for i in `cat mes_switches`; do python3 write-cisco.py $i; done
Un peu de Python pour vous faire gagner beaucoup de temps.