Esta semana he tenido que realizar un script para copiar las grabaciones de un callmanager de cisco por ssh y volcarlas en un servidor, por SSH.
Los requisitos:
1º) conectarme por SSH al CCM
2º) Ejecutar unas instrucciones y esperar respuesta del CCM
3º) Eliminar las grabaciones, una vez pasadas al servidor
Nos ponemos manos a la obra…..
#cd /usr/local/bin
#nano copia.sh
Tenemos el fichero en blanco y pegamos …
#!/usr/bin/expect
set timeout -1
spawn ssh usuario@ip_del_ccm
expect "password:"
send "passwordn"
expect "admin:"
send "file get activelog /uccx/recordings/ n"
expect "Would you like to proceed "
send "yn"
expect "SFTP server IP: "
send "192.168.XXX.XXX n"
expect "SFTP server port "
send "22n"
expect "User ID: "
send "usuarioSSHn"
expect "Password:"
send "passwordSSHn"
expect "Download directory:"
send "/n"
expect "admin:"
send "utils uccx recordings purge 1000 [exec date +%m/%e/20%y] 23:59:59n"
expect "press"
send "Y"
expect "admin:"
send "quitn"
expect eof
Vamos por partes y lo explicamos…..
Primero, en nuestro debian, instalamos el paquete expect
#apt-get install expect
Y Ahora explicamos las líneas:
#!/usr/bin/expect
set timeout -1
Ponemos el timeout a -1 para que espere de manera indefinida…. cuando copiemos las grabaciones, se puede pasar más de 20 minutos copiando… y como no sabemos cuánto tiempo, pues que espere…
spawn ssh usuario@ip_del_ccm
–> nos conectamos por ssh
expect «password:»
–> esperamos a que nos pida el servidor el password
send «passwordn»
–> enviamos el password
expect «admin:»
–> ahora el callmanager espera a que pongamos la instrucción
send «file get activelog /uccx/recordings/ n»
–> activamos el envío de las grabaciones
expect «Would you like to proceed «
–> nos pide confirmación
send «yn»
–> pues eso, que Yes
expect «SFTP server IP: «
–> Esperamos a que nos pida el servidor SSH
send «192.168.XXX.XXX n»
–> Le enviamos la IP
expect «SFTP server port «
–> Nos pide el puerto
send «22n»
–> El 22
expect «User ID: «
–> nos pide el usuario
send «usuarioSSHn»
–> ahí que te va
expect «Password:»
–> el password
send «passwordSSHn»
–> lo enviamos
expect «Download directory:»
–> Directorio destino
send «/n»
–> es la raíz del Servidor (/)
expect «admin:»
–> esperamos que acabe…. bastante rato; al final nos pide otro comando
send «utils uccx recordings purge 1000 [exec date +%m/%e/20%y] 23:59:59n»
–> Ahora borramos los del día actual (hago la copia cada día)
expect «press»
–> Pide que pulsemos «Y»
send «Y»
–> lo pulsamos ;-P
expect «admin:»
–> Ha acabado de borrar
send «quitn»
–> tarea finalizada 🙂
expect eof
Enjoy the script