Google+

miércoles, 27 de abril de 2016

¿Qué puede hacer EXPECT por ti?


Buenos días a tod@s!

El otro día vi un post que me gustó bastante, sobre cómo hacer backup de los diferentes elementos de red físicos (Firewall, Switches, Cabinas de almacenamiento, etc…)

Seguramente si tiene administración web podremos hacer una copia sin ningún problema. Pero si queremos automatizar la tarea, usaremos el acceso CLI, en el siguiente ejemplo, nuestras “victimas” serán unos switches CISCO, colocados en diferentes plantas de un edificio.

Vamos a por ello!!!!!!!

Lo primero que necesitamos es un servidor tftp donde subir nuestras copias, en nuestro servidor, deberemos crear un usuario que tenga permisos de escritura para poder subir los archivos, por supuesto tiene que tener conectividad con las máquinas que queramos copiar.
Existen muchos clientes gratuitos y muy fáciles de instalar.

Cuando tengamos esto, necesitaremos una máquina Linux y a nuestro gran amigo EXPECT.

¿Cómo funciona? 

Facil, lo que hay que poner es el comando que esperas recibir en la consola y el que tu teclearías, no os preocupéis, dejo comentado el script para que podáis identificar cómo se hace.

Lo primero será entrar en cada una de nuestras máquinas e introducir nuestro usuario y password, recordad que los hemos debido crear antes.

Introducimos el usuario 


Router(config)# ip ftp username javi


Introducimos la password


Router(config)# ip ftp password linuxtargz


Ahora nuestro switch guardará nuestras credenciales. Sólo nos falta crear nuestro script.




El código será el siguiente:

#!/usr/bin/expect
spawn  date +%u 
expect -re "."
set hoy $expect_out(buffer) >> guardamos la variable "hoy" como nuestra fecha 

spawn /usr/bin/telnet 10.0.1.6 >>nos conectamos a la máquina que queremos copiar, en este caso por telnet

expect "Username: " >> Nos pide el usuario
send "usuario\n"       >> Introducimos el usuario que esperaría recibir e introducimos un retorno de carro.

expect "Password: "
send "CiscoSwitch3p\n"

expect "PilaCore_planta3>"
send "enable\n"

expect "Password: "
send "P@ssw0rd12\n"

expect "PilaCore_Planta3#"
send "copy running-config ftp \n"

expect -re "Address or name of remote host .. "
send "172.22.14.73\n"

expect -re "Destination filename .pilacore_plta5a-confg.. "
send "switch_planta3-$hoy\n"      >> Aquí enviamos la fecha que tenemos en nuestra variable

expect "PilaCore_Planta3#"

close


**** Para que podáis ver qué funciona en todos los entornos os dejo también el script que copia varias switches brocade***

#!/usr/bin/expect
spawn  date +%u
expect -re "."
set hoy $expect_out(buffer)

set switches [list 172.22.2.21 172.22.2.22 172.22.2.27 172.22.2.29]
foreach switch $switches {

spawn /usr/bin/telnet $switch

expect "Enter password: "
send "admin\n"

expect ">> Main# "
send  "cfg/\n"

expect ">> Configuration# "
send "ptcfg/\n"

expect "Enter hostname or IP address of FTP/TFTP server: "
send "172.22.14.73\n"

expect "Enter name of file on FTP/TFTP server: "
send "$switch-$hoy\n"

expect "Enter username for FTP server or hit return for TFTP server: "
send "javi\n"

expect "Enter password for username on FTP server: "
send "linuxtargz\n"

expect ">> Configuration# "

close

}




Ahora solo os faltaría dar permisos de ejecución al script que acabáis de crear. 

¿Cómo hacemos eso? 

Con "chmod 644 archivo"


Este script podríamos programarlo con un "cron" y hacer que se ejecutara una vez al día a la hora que queramos. 

La copia se guardará con la fecha del día en el que se hizo.

Espero que os haya resultado útil.

Un saludo amig@s!