2010-05-12 16 views
6

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í?

Respuesta

2

He utilizado un script similar a autologin.

He utilizado "interact" y he eliminado "expect eof". Al hacer esto, puedo recuperar la pantalla para poder ingresar comandos a mano.

expect "?assword: " 
send -- "$password\r" 
expect "$" 
interact 
0

ponerlo todo junto, se inicia la sesión y de salir de la línea de comandos exactamente como si lo hubiera tecleado manualmente

#!/usr/bin/expect -f 
set ip "127.001.001.001" 
set password "xxyykkx" 
spawn ssh $ip -l root 
expect "?assword:" 
send "$password\r" 
interact 
Cuestiones relacionadas