Automatisation d’envoi de commandes sur routeurs Cisco en telnet avec « Expect »
Dans l’exemple suivant, nous voulons automatiser un envoi de commande via Telnet qui nécessite d’être en mode « configuration » sur plusieurs routeurs Cisco. Pour ce faire, nous allons utiliser Expect qui est un outil d’automatisation de tâches Unix, pour des applications interactive comme ssh, telnet, ftp, passwd, fsck ou autre.
Le script présenté par la suite permet de créer un autre script sous Expect qui permettra lui d’enchaîner les commandes sur les équipements voulus.
Prérequis :
– Créer un fichier nommé « liste » dans lequel sera listé les IP ou nom des équipements
– Créer un fichier nommé « commande » dans lequel sera listé les commandes à envoyer aux équipements
Dans le même dossier, créer un fichier avec le script ci-dessous :
#!/bin/bash
echo "veuillez donner le mot de passe RO"
stty -echo
read passwordRO
stty echo
echo "veuillez donner le mot de passe Enable"
stty -echo
read passwordRW
stty echo
liste=./liste
commande=./commande
rm -f telnet_cisco.sh &2>/dev/null
echo -e "Génération du fichier telnet_cisco.sh\n"
touch telnet_cisco.sh
echo '#!/usr/bin/expect -f' > telnet_cisco.sh
for i in `cat $liste`
do
cat >> telnet_cisco.sh << EOF
spawn telnet $i
expect "Password:"
send "${passwordRO}\r"
send "enable\r"
expect "Password:"
send "${passwordRW}\r"
expect "#"
send "conf t\r"
expect "#"
EOF
cat $commande | while read line
do
echo "send \"${line}\r\"" >> telnet_cisco.sh
echo "expect \"#\"" >> telnet_cisco.sh
done
cat >> telnet_cisco.sh << EOF
send "exit\r"
expect "closed"
EOF
echo -e "$i OK"
done
chmod u+x telnet_cisco.sh
Ce script permet de se connecter en telnet aux équipements, de rentrer en mode "enable" puis "configure terminal" afin de modifier de la conf.
Imaginons que :
commande = ip tftp source-interface vlan 55
liste = switch1
switch2
switch3
passwordRO = toto
passwordRW = tata
Le script Expect généré sera :
#!/usr/bin/expect -f
spawn telnet switch1
expect "Password:"
send "toto\r"
send "enable\r"
expect "Password:"
send "tata\r"
expect "#"
send "conf t\r"
expect "#"
send "ip tftp source-interface vlan 55\r"
expect "#"
send "exit\r"
expect "closed"
spawn telnet switch2
expect "Password:"
send "toto\r"
send "enable\r"
expect "Password:"
send "tata\r"
expect "#"
send "conf t\r"
expect "#"
send "ip tftp source-interface vlan 55\r"
expect "#"
send "exit\r"
expect "closed"
spawn telnet switch3
expect "Password:"
send "toto\r"
send "enable\r"
expect "Password:"
send "tata\r"
expect "#"
send "conf t\r"
expect "#"
send "ip tftp source-interface vlan 55\r"
expect "#"
send "exit\r"
expect "closed"
Il ne restera plus qu'à exécuter ce script qui réalisera les actions.