2014-02-15 8 views
7

Ich versuche ein Skript zu schreiben, das über SSH mit einer Linux-Box verbunden ist und die interaktive Steuerung von Cisco-Geräten von dort aus ermöglicht; Nachdem ich die Ausrüstung fertiggestellt habe, möchte ich auch die Schale verlassen.Zwei Interaktionen in einem Expect-Skript verwenden

Ich habe SSH-Schlüssel und brauche kein Passwort für die Verbindung. go im folgenden Code ist ein Bash-Skript, das über SSH/Telnet mit dem Zielgerät verbindet.

Was ich bisher getan ist:

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

Die Störung, die ich erhalte, wenn ich die Shell verlassen ist:

Connection to my_linux.domain.com closed. 
expect: spawn id exp4 not open 
    while executing 
"expect "[email protected]_linux:~#"" 
    (file "./aaa" line 11) 
+0

Command go ist ein Bash-Skript, das die Verbindung zu einem Gerät (ssh/telnet) spwan. – Cosmin

Antwort

5

ich das Problem gelöst haben:

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

set arg1 [lindex $argv 0] 
spawn ssh -p 24 [email protected]_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 "[email protected]_linux:~#" 
send "exit\n exit\n" 
interact 

Erläuterung: Ich fügte ein paar Zeilen hinzu:

# 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 "[email protected]_linux:~#" 
send "exit\n exit\n" 

Hope hilft jedem

Verwandte Themen