Este tutorial usa Expect para automatizar tareas.
Expect es un lenguaje de programación de automatización. Le permite emular cada pulsación de tecla en una sesión. Ingresa los comandos que se entregarán y las respuestas que se esperan (o esperan). Si se reciben las respuestas esperadas, emita otro comando. Este proceso se repite hasta que finaliza el script.
El script de espera es toda la conversación bidireccional automatizada. En una secuencia de comandos adicional, los diálogos de los equipos emisores y receptores están controlados por secuencias de comandos. Un uso común de los scripts de Expects es automatizar las sesiones SSH entre una computadora local y un servidor remoto.
Configuración de Expect
Excepto que está disponible como paquete de software instalable para la mayoría de las distribuciones de Linux. Utilice el administrador de paquetes para descargar e instalar Expect junto con los paquetes y / o dependencias asociados.
Si está usando Ubuntu, ingrese la siguiente cadena en la línea de comandos para instalar Expect:
$ apt-get install expect
Si está usando CentOS, ingrese:
# yum install expect-devel
Esto puede llevar algún tiempo, pero una vez instalado, Expect se puede ejecutar desde la terminal.
Escribir un script SSH en Expect
Debe escribir ambos extremos del “diálogo”. Esto significa que debe escribir los comandos que desea enviar en la sesión y las respuestas esperadas del servidor remoto. Para que se ejecute el script, debe hacerse ejecutable. Para convertir el script de espera en un programa ejecutable independiente, se deben seguir tres pasos. La ubicación de Expect debe incluirse en el script.
Por ejemplo, suponga que la ubicación de Expect está en su sistema / usr / bin / esperan Ingrese lo siguiente como primera línea en su secuencia de comandos Expect:
#!/usr/bin/expect -f
- El shebang (#!) Necesario para especificar Expect como el programa utilizado para interpretar el script.
- La -F El interruptor se usa para decirle a Expect que leerá los comandos del archivo.
El script debe guardarse como un archivo de shell (.Sch). En este ejemplo, lo guardaremos como expscript.sh.
Haga que el script sea ejecutable.
Esto requiere cambiar los permisos en el archivo de secuencia de comandos para hacerlo ejecutable.
Ingrese lo siguiente en la terminal para cambiar los permisos en el archivo para que sea ejecutable.
$ chmod 755 expscript.sh
La secuencia de comandos
La segunda línea de su secuencia de comandos usa eso Aparecer Comando que inicia un comando externo. Dado que esto es SSH en este ejemplo, el ssh El comando se usa para iniciar una sesión SSH con un servidor remoto, “remote.server.com“.
spawn ssh remote.server.com
Si intenta conectarse a un servidor remoto a través de SSH, se le pedirá una contraseña. Como ya se mencionó, los scripts de espera consisten en diálogos de ambas máquinas, por lo que las respuestas esperadas también deben incluirse en el script.
Las respuestas esperadas deben pasar por suponer Comando y entre comillas dobles:
expect "password: "
Nota: Algunos servidores devuelven “Contraseña” con una “P” mayúscula. Si el script espera una ‘p’ común, puede provocar que falle. Se puede utilizar un marcador de posición como solución. Esta línea se editaría así:
expect "*ssword: "
O incluso más fácil:
expect "*: "
Esta técnica se puede utilizar para muchas respuestas esperadas de la máquina remota. Luego debes ingresar tu contraseña. Los comandos que se envían desde la computadora local son reemplazados por el enviar Command y debe estar entre comillas dobles como respuestas esperadas. Además, los comandos enviados deben tener un retorno de hardware ( r) al final, dentro de las comillas dobles.
Asumiendo una contraseña de P @ $$ w0rd, sería la siguiente línea.
send "P@$$w0rdr
En este punto, debe enfrentarse con el mensaje de usuario, que debe proporcionarse como la información esperada:
expect "$ "
En este punto, puede escribir cualquier lista de comandos que desee ejecutar, junto con las respuestas esperadas del servidor remoto. Al final de su lista de comandos automatizados, anticipe el mensaje del usuario y active una salida para cerrar la sesión.
expect "$ " send "exitr"
Por lo tanto, todo el guión debería leer:
#!/usr/bin/expect -f spawn ssh remote.server.com expect "password: " send "P@$$w0rdr" expect "$ " ...... ##Various automated commands## expect "$ " send "exitr"
Después de guardar el archivo, asegúrese de seguir las instrucciones dadas anteriormente para cambiar los permisos y hacerlo ejecutable.
Nota: Si tiene problemas con su script, intente seguirlo usted mismo y ejecutarlo manualmente. Tome nota de las respuestas del servidor para asegurarse de que las respuestas esperadas que tenga en el script sean correctas y que los comandos enviados estén libres de errores.
Aquí se explica cómo crear fácilmente un script de espera
Una forma excelente de crear un script de espera es utilizar un programa de grabación de shell llamado Autoexpect. Autoexpect funciona grabando una sesión de shell. Cada pulsación de tecla y cada respuesta de shell se registra y escribe en un script de espera. script.exp.
Debido a la naturaleza dinámica de las computadoras, no hay dos sesiones que sean completamente iguales, por lo que la secuencia de comandos sin procesar generada a partir de una sola sesión puede que no se ejecute como se esperaba cuando se vuelva a ejecutar. Como resultado, la mayoría de los scripts generados a través de Autoexpect deben revisarse, editarse y recortarse para lograr el efecto consistente deseado.
Si está usando Ubuntu, haga lo siguiente para instalar Autoexpect:
$ sudo apt-get install expect-dev
- Esto descargará la utilidad y las dependencias necesarias.
Si está utilizando CentOS, haga lo siguiente para instalar Autoexpect:
# yum install expect-devel
Ingrese lo siguiente para usar Autoexpect:
$ Autoexpect
Tan pronto como se active Autoexpect, aparecerá el siguiente mensaje en su terminal:
Autoexpect started, file is script.exp
Cada pulsación de tecla que escribe y las respuestas posteriores que aparecen en la pantalla se registran en el archivo. script.exp y formateado en el script de espera.
Para detener Autoexpect y detener la grabación en el archivo script.exp, presione Ctrl-D.
Que generó script.exp El archivo será muy extenso y contendrá la transcripción completa de la sesión y comentarios adicionales. Como se mencionó anteriormente, revise y edite el archivo generado y pruebe los errores. Si bien esto puede llevar algún tiempo, es mucho más fácil que crear scripts complejos a mano.
Ahora tiene una secuencia de comandos completamente funcional que puede ejecutar repetidamente con facilidad si es necesario, y la capacidad de crear fácilmente más secuencias de comandos.