Administrer en masse avec Expect et Python

TerminalSi 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 = "adminrezo"
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.

 

 

 

Sur le même sujet :