Automatizar tareas o comandos que requieren uso interactivo por parte del usuario

En algunos momentos es necesario automatizar acciones que pueden requerir el uso interactivo de un usuario, por ejemplo introducir una password, ejecutar o reiniciar un servicio en base a una determinada respuesta, etc. Esto es simple y fácil de hacer con la utilidad Expect, la cual puede ejecutar cualquier programa en consola que requiera la interacción entre el programa y el usuario, solo necesita que se le indique el comando a ejecutar y qué debe realizar al recibir una determinada respuesta por parte de ese programa, como por ejemplo ejecutar algún tipo de comando u opción o devolverle el control al usuario para que continúe.

Una forma de facilitar las cosas a la hora de crear scripts con Expect, es el uso de Autoexpect, el cual al ser ejecutado, audita todas nuestras acciones y genera un script, para que posteriormente al ejecutarlo repita ese uso interactivo que hicimos anteriormente de forma automatizada. Lo ideal es una vez generado dicho script mediante Autoexpect, es limpiarlo de código superfluo y afinarlo según nuestras necesidades.

Para poder aprender sobre la programación de scripts con Expect se recomiendan las siguientes lecturas:

Manual de Expect: http://linux.die.net/man/1/expect
Exploring Expect PDF (O'Reilly): exploring_expect.pdf

Simple ejemplo que conecta mediante SSH, escribe un fichero “prueba.txt” y desconecta.

#!/usr/bin/expect -f
 
set timeout -1
spawn ssh root@dominio.com -p 2222
match_max 100000
expect -exact "root@dominio.com's password: "
send -- "XXXX\r"
expect -exact "\r"
send -- "echo hola > prueba.txt\r"
send "exit\r"
expect eof