Verwenden Sie expect, um per SSH einen Host zu verbinden, einige Befehle auszuführen, das Gerät zu beenden und per SSH ein anderes Gerät zu verbinden, um einige andere Befehle auszuführen

Verwenden Sie expect, um per SSH einen Host zu verbinden, einige Befehle auszuführen, das Gerät zu beenden und per SSH ein anderes Gerät zu verbinden, um einige andere Befehle auszuführen

Hallo, ich versuche, expect zur Netzwerkfehlerbehebung zwischen zwei Geräten zu verwenden. Kurz gesagt: Was ich erreichen möchte, ist, mit expect ein Skript auszuführen, das zwei Geräte eingibt und Befehle anwendet.

  1. Das Skript fordert den Benutzer auf, die beiden Hostnamen einzugeben
  2. Variablen Benutzer, Passwort und Eingabeaufforderung werden gesetzt
  3. Spawn-Prozess zum SSH-Zugriff auf das erste Gerät
  4. Befehle zur Fehlerbehebung anzeigen

Alles oben genannte funktioniert einwandfrei. Das Problem tritt auf, wenn ich versuche, per SSH auf den anderen Hostnamen zuzugreifen. Im Grunde läuft mein Skript nach 10 Sekunden ab und stellt nie eine SSH-Verbindung zum anderen Gerät her.

Vielen Dank im Voraus an die Community für ihre großartige Hilfe

hier ist der Code

#!/usr/local/bin/expect -f

exec tput clear >@ stdout
set timeout 10

puts "Enter hostname to connect"
set c [gets stdin]

puts "which is the destination hostname?"
set dhostname [gets stdin]

#setting password variable, reading it from file
set pa [open "pass.txt" r]
set pass [read $pa]
close $pa

#setting user variable
set user xxxx

#setting prompt variable
set prompt "(%|#|\\$|>|~|:) $"

spawn -noecho ssh $user@$c;

expect {
"Are you sure you want to continue connecting (yes/no)" {send {yes};
send "\r"
exp_continue}

"assword:" {
        send "$pass\r"
        expect -re $prompt

}
}
##commands to execute on the device
send "show system uptime\r";

expect "$prompt"

send "exit\r";

expect -re $prompt

send "ssh $user@$dhostname";

verwandte Informationen