Mediante 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.
Últimos comentarios