Usar dos interactúan en un script Expect

Estoy tratando de escribir un script que se conecte a una caja de Linux a través de SSH y permita el control interactivo de los equipos de Cisco desde allí; después de que termine de controlar el equipo, también quiero salir del caparazón.

Tengo claves SSH y no necesito una contraseña para conectarme. go en el código a continuación hay un script Bash que se conecta al equipo de destino a través de SSH/Telnet.

Lo que he hecho hasta ahora es:

#!/usr/bin/expect
set arg1 [lindex $argv 0]
spawn ssh -p 24 my_username@my_linux.domain.com
expect "#"
send "go $arg1 \n"
expect "sername:"
send "my_username\n"
expect "assword:"
send "my_password\n"
interact
expect "root@my_linux:~#"
send "logout\n"
expect "my_username@my_linux:~ $"
send "logout\n"
interact

El error que obtengo cuando salgo del shell es:

Connection to my_linux.domain.com closed.
expect: spawn id exp4 not open
    while executing
"expect "root@my_linux:~#""
    (file "./aaa" line 11)

preguntado el 15 de febrero de 14 a las 20:02

Command go es un script bash que activa la conexión a un equipo (ssh/telnet). -

1 Respuestas

He resuelto el problema:

#!/usr/bin/expect
set timeout -1

set arg1 [lindex $argv 0]
spawn ssh -p 24 my_username@my_linux.domain.com
expect "#"
send "go $arg1 \n"
expect "sername:"
send "my_username\n"
expect "assword:"
send "my_password\n"
expect "#"
interact timeout 5 return
send "\n"
expect "root@my_linux:~#"
send "exit\n exit\n"
interact

Explicación: Agregué algunas líneas:

# This prevents commands from timing out (default timeout is 10 seconds).
set timeout -1

# When I type something, the timeout is ignored, but when I'm not typing,
# it waits 5 seconds and then continues.
interact timeout 5 return
send "\n"
expect "root@my_linux:~#"
send "exit\n exit\n" 

Respondido el 12 de junio de 20 a las 20:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.