Así que quería automatizar mis inicios de sesión SSH. El host con el que estoy no permite la autenticación de clave en este servidor, así que tuve que ser más creativo.Inicio de sesión SSH con expect (1). ¿Cómo salir y esperar en SSH?
No sé mucho acerca de las secuencias de comandos shell, pero algunas investigaciones me mostraron el comando 'esperar' y algunas secuencias de comandos que lo utilizan para este fin. Configuré un script y lo ejecuté, funcionó perfectamente para iniciar sesión.
#!/usr/bin/env expect -f
set password "my_password"
match_max 1000
spawn ssh -p 2222 "my_username"@11.22.11.22
expect "*?assword:*"
send -- "$password\r"
send -- "\r"
expect eof
Inicialmente, funciona como debería.
Last login: Wed May 12 21:07:52 on ttys002
esther:~ user$ expect expect-test.exp
spawn ssh -p 2222 [email protected]
[email protected]'s password:
Last login: Wed May 12 15:44:43 2010 from 20.10.20.10
-jailshell-3.2$
Pero ahí es donde termina el éxito.
Los comandos no funcionan, pero pulsando enter solo hace una nueva línea. Las teclas de flecha y otras teclas no alfanuméricas producen símbolos como '^ [[C', '^ [[A', '^ [OQ' etc. [1]
No aparece ningún otro mensaje, excepto los dos inicialmente creados por el script expect. Cualquier comando ignorado será ejecutado por mi shell local una vez que se agote el tiempo de espera. Un ejemplo:
-jailshell-3.2$ whoami
ls
pwd
hostname
(... pasa el tiempo, esperan que el tiempo de espera ...)
esther:~ user$ whoami
user
esther:~ ciaran$ ls
Books Documents Movies Public
Code Downloads Music Sites
Desktop Library Pictures expect-test.exp
esther:~ ciaran$ pwd
/Users/ciaran
esther:~ ciaran$ hostname
esther.local
Como ya he dicho, no tengo experiencia shell scripting, pero creo que está siendo causado porque Todavía estoy "dentro de" esperar, pero no "dentro de" SSH. ¿Hay alguna manera de terminar una vez que inicie sesión y que me entregue la sesión SSH?
He intentado comandos como 'cerrar' y 'salir', después de "enviar -" \ r "". Sí, hacen lo que yo quiero y espero que muera, pero se lleva la sesión de SSH vindicativamente, dejándome donde comencé. Lo que realmente necesito es esperar hacer su trabajo y terminar, dejando la sesión SSH en mis manos como si lo hiciera manualmente.
Toda la ayuda se agradece, gracias. [1] Sé que hay un nombre para esto, pero no sé qué es. Y esta es una de esas cosas aterradoras que no se pueden buscar en Google, porque se ignoran los caracteres de puntuación. Como una pregunta secundaria, ¿cuál es la historia aquí?