Sesiones interactivas con expect

By 7 de agosto de 2006 BSD, Debian, FreeBSD, Gentoo, Linux, SuSE, Ubuntu No Comments

tux.pngMediante el lenguaje de scrips intrepretado expect podemos crear sesiones interactivas, es decir, podemos conectarnos remotamente a un ftp o un telnet y ejecutar comandos a distancia de forma automatizada.Esto puede servirnos para limpiar cachés de un router de un plumazo, para generar mediante ssh backups entre servidores o telnets a una máquina win para que haga shutdown.

En este manual se trata éste último ejemplo.Para hacernos con la sintaxis de 'expect' lo mejor es acudir a su web: http://expect.nist.gov/

Ahí apreciaremos que los scripts de 'expect' se escriben en Tcl, por ejeplo un bucle sería algo así:

for {set i 0} {$i<2} {incr i} { send A expect B } send C 

Aquí pongo un sencillo ejemplo de script que podría utilizarse para el acceso a un proveedor de Internet.

Expect      ID:                        # esperar ID: Send        myid                       # debes sustituir myid por tu nombre de usuario Expect      word:                      # esperar 'password' Send        4u3fjkl                    # enviar la contraseña '4u3fjkl' Expect      granted                    # El proveedor envía 'Permission granted' si la conexión tiene éxito. Send        ppp                        # Esto inicia una conexión ppp para # el usuario en el proveedor. 

Lo primero que tenemos que hacer es habilitar un usuario con permisos de administrador y el servicio de telnet (si es un equipo de windows) o bién cerciorarnos de que el Administrador tiene password (no, no es tan obvio, creedme), eso lo haremos picando.

comando (tecla de windows) + r compmgmt.msc 

Luego tenemos que activar el servicio de telnet:

comando + r services.msc 

Buscar el servicio de telnet y habilitarlo en la opción de automático, luego iniciarlo. Bién ya tenemos a win escuchando por el puerto 23, ahora haremos que *UNIX/Linux se logée contra win y apague la máquina: Para eso acudiremos a expect el cual debe estar instalado en nuestro sistema, mediente un escript como el que sigue conseguiremos apaguar la máquina remotamente.

#!/usr/bin/expect  # Acceder mediante telnet a las máquinas  spawn telnet 192.168.0.118 expect "login" send "ceti" sleep 1 expect "password:" sleep 1 send "ceti" sleep 2 expect "*>" send "shutdown -s" send "exit" 

Es muy importante que se respeten los tiempos de espera sean corectos para emular un comportamiento humano y no flodear el servidor telnet.Si se ha de apagar varrias máquinas lo ideal es que mediante una estructura iterativa (un bucle for, por ejemplo) recorra todas las ip dentro de un rango definido para que envíe la orden de apagado a todas ellas.

Leave a Reply

Your email address will not be published.