Copias de seguridad automatizadas de switches / routers con Expect y Linux

backups1

Buenos días chic@s!! Hoy voy a publicar una entrada en la que veremos como realizar copias de seguridad de switches / routers de nuestra organización. Debido a una tarea que me han solicitado, me he tenido que pelear para conseguir algún software que pudiera conectarse por SSH de manera automática y mandara un log con la configuración de cada switch a un directorio en particular. Para ello he utilizado el software Expect, a través de un servidor Linux (Debian). Veamos como proceder.

Lo primero que debemos de hacer es tener un listado con las IP’s , usuarios y contraseñas de los equipos a los que queremos acceder vía SSH o telnet.

1) En primer lugar, si no lo tenemos ya, es instalar el paquete de SSH en nuestro servidor Linux, para ello escribimos: apt-get install ssh

01

2) Lo siguiente será situarnos en el servidor Debian e instalamos el paquete Expect con apt-get install expect

00

3) Una vez instalados los paquetes necesarios, procedemos a crear nuestro script, para ello creamos un fichero llamado, por ejemplo, backups.sh al cual le asignaremos permisos de ejecución con chmod 700 backups.sh

02

4) Ahora procedemos a editar el script, podemos utilizar el editor que más nos guste, a mi con nano me gusta por la sencillez y el colorido que proporciona. Una vez dentro del script, la primera línea que debemos de escribir es la siguiente:

#!/usr/bin/expect -f

5) Ahora debemos de comenzar asignando las variables, para un rápido acceso a los diferentes equipos a los que nos conectaremos, los usuarios y contraseñas de nuestros equipos, en este ejemplo utilizaré las siguientes:

set switch0 192.168.150.1
set switch1 162.168.150.7
set pass israel
set filesave [exec date +%d-%m-%Y] => Esta variable será la que nos guardará la fecha en la que se está ejecutando el script

6) Una vez creadas las variables, procedemos a “jugar” con el software Expect. Lo que haremos será escribir:

spawn ssh admin@$switch0 => spawn lo que realiza es escribir un comando a un equipo remoto, en este caso se conectará por SSH al switch 192.168.150.1

match_max 10000 => Para que el máximo de líneas a mostrar sea como máximo 10000 (y no se quede a medias la configuración)

expect “*assword:” => Este termino es de lo más importantes, ya que expect, esperará el código que tu le escribas entre comillas, en mi caso esperará una línea que sea *assword: , es decir, cuando entras al switch o router, lo primero que te preguntará será la contraseña.

send “$pass\n” => Ahora, una vez esperada la línea de *assword: , send, enviará de manera automática lo que le escribas entre comillas, en este caso, mandará el contenido de la variable $pass (israel) y pulsará INTRO (\n)

expect “#” => De nuevo, debemos de escribir expect con alguna línea que espere, como ya estaremos dentro del equipo, pues debemos de esperar el prompt o algún símbolo, en mi caso el switch al que estoy accediendo tiene el siguiente prompt: switch#

log_file -noappend /backups/$switch0–switch0–$filesave.cfg => Esta línea lo que hará será crear un fichero llamado: 192.168.150.1–switch0–fecha.cfg y lo mandará al directorio /backups/ y no terminará hasta que cerremos la línea con log_file de nuevo. El parámetro -noappend lo que realiza es crear un nuevo fichero si este ya existe, y no introduce líneas del ya existente.

send “show config\n” => Como vemos, la cuestión es “jugar” con expect y send, ahora lo que haremos será enviar de manera automática la línea de show config con INTRO (\n)

expect “#” => Una vez termine de listar la configuración, lo que haremos será esperar de nuevo el prompt o símbolo característico de cada switch, en este caso, la almohadilla #.

send “exit\n” => Ahora, como ya tenemos listado la configuración y estamos de nuevo en el prompt, lo que haremos será escribir la línea de exit con INTRO (\n) para que cierre la sesión SSH.

log_file => Por último, debemos de escribir esta línea para cerrar el fichero (log) y poder crear otro en caso que lo necesitemos.

En resumen, nuestro script quedará así:

03

7) Por último, ejecutamos nuestro script con ./backups.sh y comenzará, de manera automática a entrar a los equipos por SSH y reportar cada configuración en un log independiente, con los valores que les hemos puesto.

003

8) Una vez comprobado, solo nos quedará programar este script o todos los que creemos, con crontab -e, y tendremos nuestras copias de seguridad de los equipos que necesitemos, cada vez que lo programemos!

Espero lo hayáis entendido todas las patas de Expect, cualquier duda, solo tenéis que escribirla.

Un saludo compañeros!!

3 pensamientos sobre “Copias de seguridad automatizadas de switches / routers con Expect y Linux

  1. Hola Israel!!

    Enhorabuena por el artículo!!
    ¿Como se podría hacer para pasar un listado de IP’s de gestión de switchs? Actualmente tengo montado algo parecido en perl con un bucle que me recorre una macro con todas las IP’s de gestión de los switchs. ¿Alguna idea?

    Muchas gracias

  2. Hola buenas,

    Gracias por el aporte. Para entornos con pocos equipos es una buena manera de salvar configuraciones y eso. Cuando la cosa se complica con muchos equipos y diferentes fabricantes hay que usar herramientas tipo KiwiCatTools.

    Saludos

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>