El otro día estaba leyendo UbuntuLife (blog que visito casi a diario), cuando me topé con este artículo sobre expect, que voy a complementar con otra herramienta, autoexpect.

EXPECT

Resulta que ya conocía esta herramienta de hace unos años. Expect permite crear scripts que responden a la shell, a la consola de comandos, siendo casi interactivos. Con él podemos hacer un script que se conecte a un ftp y espere a que el ftp le pida datos de usuario y contraseña. El script estará programado para responder cuando se le pregunte, pero no antes.

Antes a la hora de hacer un script para esto, la gente solía recurrir a hacks como:

ftp dirección
sleep 5
echo "mi usuario"
sleep 5
echo "mi password"
...

Esta solución puede fallar (dependiendo de si el ftp está saturado, tu ancho de banda…), además no es eficiente, ni elegante.

AUTOEXPECT

Ahora bien, en su día descubrí que existía una herramienta llamada autoexpect. Esta herramienta es un shell script (no un binario) que permite generar scripts de expect sin tener ni idea de cómo se programan, ¡genial!

Mucha gente desconoce….

….su existencia porque las distribuciones al instalar expect no ponen autoexpect en el PATH del sistema, es decir, que dejan el script en una ruta «escondida», sino recuerdo mal era algo como /usr/share/doc/expect-{version}/examples/

Así que me puse a buscarlo en Ubuntu Feisty 7.04. Pero resulta que cuando instalo expect, ya no pone autoexpect en esa ruta. Lo han quitado del paquete, porque autoexpect no se mantiene (actualiza) desde el 1995, es decir, unos cuantos años. Sin embargo, funcionaba perfectamente. Así que me pongo a buscar paquetes antiguos por la red de expect-dev y finalmente doy con el diamante en bruto. Lo he subido para que podáis descargarlo.

Pincha aquí para descargar autoexpect

INSTALACIÓN

Vale, sí, es un shell script, ¿qué se supone que hay que instalar? Bueno, pues hay que ponerlo en una ruta del $PATH. Así que una vez lo bajáis, lo pegáis o movéis a:

sudo cp /ruta/donde/lohayas/descargado/autoexpect /usr/bin/

Ahora instalamos también expect.

sudo apt-get install expect

Ahora la mejor forma de saber que opciones dispone autoexpect es leer su página man. Ahí vienen documentadas a fondo todas las opciones y vale la pena leerlo si lo vais a usar. Yo os pongo un ejemplo que he hecho:

autoexpect -f ssh.exp -p ssh miguel@servidor

Después de poner esto en la shell. Ejecuto los comandos que yo quiera. Mientras tanto autoexpect va a estar vigilando lo que hago para que al salir se la sesión ssh generar un script que se va a llamar ssh.exp que va a utilizar solamente la última línea del prompt (de lo que salga por pantalla) para reconocer órdenes (recomendable), y que va a reproducir los comandos que yo haya ejecutado, en este caso, descargar algún fichero a mi máquina.

Es muy importante tener en cuenta, que debemos correr el menor número posible de comandos, y que deben arrojar como resultado siempre lo mismo para funcionar correctamente.

Después de esto, siempre que quiera bajarme esos ficheros, haré:

./ssh.exp

Espero que haya quedado más o menos claro. Este es un tema propio de administradores de sistemas, de entre los que muchos desconocen la existencia de expect, pero no tendrán problemas para entender esto.

Un saludo para superpiwi

Technorati Tags:

menefante.gif meneame ico_delicious.gif del.icio