Si vous ne connaissez pas expect, c’est un outil qui permet d’écrire des scripts en TCL qui iront interagir avec telnet/ssh et d’autres trucs du genre, sans que vous ayez à le faire vous même. C’est donc très pratique pour écrire des scripts qui seront exécutés vers des équipements qui n’ont pas de cron (ce qui est typiquement le cas des switches et des routeurs).
Ici, le script est utilisé pour sauvegarder la configuration des switchs de Breizh-IX
On commence par écrire le script TCL pour aller chercher la version de l’OS
qui tourne ainsi que la configuration qui tourne. Bien sûr, il faut changer
user et password par les valeurs qui vont bien pour vous.
Je teste les noms d’hôte des switch afin d’adapter les commandes qui
différent entre Cisco et Brocade. Dans l’idéal il faudrait tester ça par
rapport au sh ver du début, et non par rapport à l’argument que
l’on passe au script, mais dans l’immédiat ça suffit vu que je n’ai que
deux switches.
#!/usr/bin/expect -f
set host [lindex $argv 0]
set prompt "(>|#|\\\$) $"
spawn telnet $host
expect Connected
set current_line $expect_out(buffer)
if { [string first "Connected" "$current_line"] == -1 } {
exit 1
}
expect -nocase "user "
send "user\r"
expect -nocase "pass"
send "password\r"
send "enable\r"
send "password\r"
send \r
expect -re $prompt
send "show version\r"
expect -re $prompt
expect *;
# disable pagination on brocade
if { [string first "asterix" $host]!=-1 } {
send "skip-page-display\r"
}
# disable pagination on cisco
if { [string first "amonbeaufils" $host]!=-1 } {
send "terminal length 0\r"
}
expect -re $prompt
send "show run\r"
expect "end"
send \r
expect -re $prompt
send "exit\r"
exit
Ensuite, on écrit un petit script shell qui va renvoyer la sortie dans le bon dossier, et compresser les fichiers histoire de ne pas perdre trop de place, puis on retire les backups qui ont plus d’un mois.
#!/bin/sh
./expect-sh-run.tcl $1 > /var/backups/switches/${1}-$(date +%F).txt
if [ $? = 0 ]; then
gzip /var/backups/switches/${1}-$(date +%F).txt
find "/var/backups/switches/${1}-*" -mtime +30
else
echo "Backup error!"
cat /var/backups/switches/${1}-$(date +%F).txt
fi