Mostramos un método mejorado para backup (copia de seguridad) automatizada de la configuración de los routers y switches Cisco (y compatibles) de nuestra organización.
Nos basaremos en el método base indicado en este artículo:
Por lo tanto necesitaremos un servidor (equipo virtual) con Linux y un FTP habilitado, como indicamos en el artículo anterior.
En los switches, necesitaremos que tengan el acceso SSH habilitado, como indicamos en este artículo:
Deberemos conocer, como es lógico, IP, usuario y contraseña de cada router/switch Cisco o compatible para el que queramos hacer el backup automático.
Supondremos en este tutorial que vamos a hacer y programar un backup de la configuración del switch Cisco con IP: 192.168.10.10, con usuario de acceso SSH: usu y con contraseña: passwd. Y supondremos que la IP del servidor con Linux y FTP (en el que se harán las copias), será 192.168.10.3.
Desde el equipo servidor Linux con FTP, desde la línea de comandos, conectaremos con el switch por SSH. Solo realizaremos este paso una vez por cada switch, para que nos solicite si quremos guardar la clave pública del switch para futuras conexiones SSH:
1 |
ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -c aes128-ctr -l pl_ave 192.168.10.10 |
Si nos devuelve este error:
Unable to negotiate with 192.168.10.10 port 22: no matching cipher found. Their offer: aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
Deberemos cambiar el parámetro -c aes128-ctr por un algoritmo de cifrado que acepte (uno de los que muestra en el mensaje de error). Para el ejemplo anterior, cambiaremos -c aes128-ctr por -c -c aes128-cbc, quedando:
1 |
ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -c aes128-cbc -l usu 192.168.10.10 |
Como es la primera vez que accedemos al switch Cisco por SSH desde el servidor Linux, nos solicitará si queremos guardar la clave pública, con el texto:
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Responderemos «yes» e INTRO para que no nos la vuelva a pedir:
Como hemos comentado, esto tendremos que hacerlo una vez por cada switch del que queramos hacer backup automático. No será necesario acceder completamente, será suficiente con responder «yes» en la pregunta anterior.
El siguiente paso será crear los scripts necesarios para realizar la copia de seguridad de la configuración de los switches de forma automática.
Crearemos el script «principal», en la carpeta /home/script, con el nombre backup_cisco.sh y el contenido:
/home/script/backup_cisco.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#!/usr/bin/expect set espera1 1 set espera2 2 set espera10 10 set ip_switch [lindex $argv 0] set usuario_switch [lindex $argv 1] set contrasena_switch [lindex $argv 2] set servidor_ftp [lindex $argv 3] set fichero_destino [lindex $argv 4] set algoritmo [lindex $argv 5] set nombre_switch [lindex $argv 6] #Abrimos una sesion SSH contra el switch spawn ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -c $algoritmo -l $usuario_switch $ip_switch sleep $espera2 #Captura la petición de contraseña de conexión SSH y la envía expect { "word:" {send "$contrasena_switch\r"} } sleep $espera1 #Enviamos el comando de obtener la configuración del switch y enviarla al servidor FTP expect { "#" {send "copy startup-config ftp:\r"} } sleep $espera1 #Esperamos a las dos preguntas de confirmación al conectar con el FTP #El servidor y el nombre del fichero destino expect { "?" {send "$servidor_ftp\r"} } sleep $espera1 expect { "?" {send "$fichero_destino\r"} } #Esperamos el tiempo suficiente hasta que concluya el envío FTP y salimos sleep $espera10 #Enviamos un par de INTROs para que se quede la línea de comandos correcta expect { "?" {send "\r\r"} } |
Estableceremos el permisos de ejecución con:
1 |
chmod +x /home/usu_ftp/script/backup_cisco.sh |
Para cada switch al que queramos hacer backup, se le creará un fichero de script propio, con el nombre del switch (hostname), en la misma carpeta. Por ejemplo, si el switch tiene de nombre SW_FACTURACION_PLANTA1, el fichero tendrá el nombre:
/home/script/SW_FACTURACION_PLANTA1.sh
Este fichero de script será el que se añada al crontab de Linux, como tarea programada, que habrá una por cada swtich (lo explicamos más adelante).
El script de cada swtich tendrá el siguiente contenido:
/home/script/SW_FACTURACION_PLANTA1.sh
1 2 3 4 5 6 7 8 |
fecha=$(date +"%Y_%m_%d") nombre_sw=SW_FACTURACION_PLANTA1 #Ejecutamos el script principal para conectar por SSH al Switch y enviar el fichero por FTP /home/script/backup_cisco.sh 192.168.10.10 usu passwd 192.168.10.3 "$fecha-$nombre_sw".txt "aes128-cbc" nombre_sw #Movemos el fichero a la carpeta del Switch mv /home/cisco/"$fecha-$nombre_sw".txt /home/cisco/$nombre_sw |
En el script anterior, cambiaremos lo siguiente por nuestros datos:
- SW_FACTURACION_PLANTA1: cambiaremos este nombre por el nombre del switch (hostname) al que queramos hacer la copia.
- 192.168.10.10: cambiaremos esta IP por la IP del switch al que queremos hacer la copia.
- 192.168.10.3: IP del propio servidor Linux en el que tenemos el FTP.
- usu: nombre de usuario de conexión SSH al switch.
- passwd: contraseña del usuario anterior de conexión SSH al swtich.
- aes128-cbc: cambiaremos este algoritmo de conexión por el que hayamos comprobado anteriormente, en la primera conexión SSH al switch.
Estableceremos el permiso de ejecución para este script:
1 |
chmod +x /home/script/SW_FACTURACION_PLANTA1.sh |
Como vemos en el script anterior, los backup del switch quedarán en una carpeta con el nombre del switch, en /home/cisco. Dicha carpeta debe existir previamente a la programación del backup, por lo que la crearemos con el comando:
1 |
mkdir /home/cisco/SW_FACTURACION_PLANTA1 |
De esta forma, cada vez que se haga backup de este switch, se almacenará el fichero de configuración en esta carpeta y quedará un histórico, pues no se reemplazarán.
El siguiente paso será añadir una tarea programada para este switch, eligiendo los días y hora en que queramos hacer el backup. Para ello ejecutaremos el comando:
1 |
crontab -e |
Y en la edición del crontab añadiremos la siguiente línea:
1 |
* 20 * * 1,3,5 /home/script/SW_FACTURACION_PLANTA1.sh >> /home/script/log/cron_root 2>&1 |
En la línea anterior el script para backup del swtich SW_FACTURACION_PLANTA1 se ejecutará los lunes, miércoles y viernes a las 8 de la tarde.
Guardaremos los cambios pulsando Control + O y cerraremos la edición del contrab pulsando Control + X.
A partir de ahora, todos los lunes, miércoles y viernes a las 20 horas se ejecutará el backup que obtendrá la configuración actual del switch indicado y la guardará en su carpeta.
Si accedemos por FTP, veremos una carpeta por cada swtich. Accediendo a la carpeta de uno de los switch, veremos todos los ficheros de configuración almacenados:
Desde aquí podremos abrirlos o descargarlos y ver su contenido: