fragen stichworte

Einfaches EXPECT-Skript zum Ausführen von Remote-Befehlen und Anzeigen der Ausgabe

Ich versuche, eine Verbindung zu einem Netzwerkrouter herzustellen und show status darauf auszuführen.
Zur Zeit verwende ich:
spawn ssh -o StrictHostKeyChecking=no admin@192.168.20.254
expect " * ? password:*\r"
send -- "secretPassword\r"
sleep 5
send -- "show status\r"
sleep 10
send -- "exit\r"

Es funktioniert nicht, ich bleibe bei admin@192.168.20.254's password: Ich habe versucht, das Passwort einzugeben, aber es funktioniert nicht, ich bekomme:
server1:~# secretPassword
-bash: server1: command not found
server1:~#


Was mache ich hier so falsch ...?

antworten

Versuchen Sie es so zu machen

#!/usr/bin/expect -f
set timeout 120
spawn ssh -o StrictHostKeyChecking=no admin@192.168.20.254
expect "*?assword:*"
send -- "secretPassword\r"
sleep 5
send -- "show status\r"
sleep 10
send -- "exit\r"
expect eof

Wenn Ihr Gerät langsam reagiert, müssen Sie wahrscheinlich ein geeignetes Timeout einstellen.

Zuerst sollten Sie sich mit der Automatisierung des gesamten Prozesses des Sammelns und Verfolgens von Routerinformationen mit RANCID befassen, anstatt eine einmalige Lösung zu verwenden.

Weitere Informationen zu diesem Problem finden Sie unter autoexpect, um die Erstellung Ihres Expect-Skripts zu automatisieren. Das sollte Ihnen ein funktionsfähiges Skript geben, mit dem Sie beginnen können. Um Ihr vorhandenes Skript zu reparieren, führen Sie Expect mit dem Argument -d aus. Dies zeigt Ihnen genau, was erwartet wird, um zu passen, und sollte Ihnen hoffentlich sagen, was in Ihrem Übereinstimmungsausdruck falsch ist.