Scripts sin intervencion del usuario

Saltar a: navegación, buscar

Hola, hoy os quería hablar de una herramienta que he encontrado gracias a san google. Se llama “expect” y según su descripción viene a ser un “dialogo programado con procesos interactivos”.

¿Cuantas veces, realizando vuestros scripts en bash, se os requería la contraseña de Super Usuario y teníais que introducirla a mano? A primera vista tendríais que ejecutar ese script con privilegios de root, con el riesgo que eso conlleva…

Para evitar ese riesgo aparece expect. Expect os permite ejecutar comandos y esperar una salida determinada por consola o esperar a que tecleemos alguna tecla tipo ys o no (y/n) o como queráis llamarlo. Una vez recibe esa cadena, continua con el resto de instrucciones y permite enviar señales como si fuera el propio teclado quien las escribe. No os lo tomeis al pie de la letra esta última frase jejeje.

Las funciones principales que usaremos, que no digo que sean las únicas, serán:

   * spawn: Permite la ejecución de comandos por consola.
   * expect: Espera por una cadena predefinida en stdout.
   * send: Envía comandos por stdin con el proceso.

Si esta herramienta la combinamos con scripts nuestros, realmente se pueden hacer autenticas virguerias. A continuación os voy a poner un ejemplo muy básico que me he creado para subir ficheros por sftp con otro equipo:

#!/usr/bin/expect
spawn sftp 192.168.1.2
expect “usuarioremoto@dominio.es password:”
send “contraseña\r”
expect “sftp>”
send “cd /home/usuario\r”
expect “sftp>”
send “put *\r”
expect “sftp>”
send “exit\r”
expect eof

Nota: Al finalizar pondremos “expect eof” para terminar la ejecución de expect. Cuando enviamos una señal debemos poner al final “\r” que viene a ser el retorno de carro o intro para que sea aceptada en la linea de comandos.

--Estrella de galicia 20:19 13 jul, 2008 (UTC) Pedro Aguilar