Senden von Befehlen über Telnet via Bash-Skript

Ich bin versucht zu automatisieren, eine telnet-Sitzung in Debian, aber ich habe Schwierigkeiten, wenn es um das senden der Befehle.

Suchen hier, ich hatte ein gutes Verständnis von dem, was ich tun musste.

spawn telnet localhost
expect "login:"
send "test\n"
expect "Password:"
send "password\n"
sleep 10 //Time for the connection to be established
send "ls\n"

Dem das Skript läuft, es korrekt eingegeben der Benutzername. Es kam zu dem Passwort-Feld und ich gehe davon aus, dass Sie es eingetragen haben (auch wenn ich nicht für sicher, da die Passwörter sind leer in Debian, wenn eingegeben). Es ins stocken geraten, für das warten, dann brachte mich zurück auf mein Konto (root). Es hat nicht immer eine Verbindung zu "testen".

Ändern mein code, mehr wie meine Referenz:

spawn telnet localhost
expect "login:"
send "test\n"
expect "Password:"
send "password\n"
interact

Diese led sofort einloggen und die Verbindung in meine "test" - Konto.
Von hier aus habe ich versucht, indem Befehle nach Interaktion mit senden, echo, und gerade die Befehle eingeben. Nichts würde passieren, bis ich es beendet die telnet-Sitzung, dann würde ich diesen Fehler bekommen.

Senden:

send: spawn id exp6 not open
    while executing
"send "ls\n""
    (file ".telnet.sh" line 8)

Für echo:

invalid command name "echo"
    while executing
"echo "ls\n""
    (file ".telnet.sh" line 8)

Nur mit dem Befehl "ls"
Ungültiger name für den Befehl "ls"
während der Ausführung
"ls"
(Datei ".telnet.sh" Zeile 8)

Ich erkennen, interagieren, gibt die Kontrolle zurück an den Benutzer, aber für einige Grund es ist der einzige Weg, es wirklich haben, mich verbinden, die auf das Konto.

Weiß jemand, warum es Probleme beim verbinden ohne Interaktion? Wenn nicht, warum kann ich nicht senden dieser Befehle, bis Sie die telnet-Sitzung beendet hat, mit interagieren?

BEARBEITEN
Nach einigen Recherchen fand ich dieses link, was am Ende kommt eine Lösung, dass eine expect-Skript sofort beendet, nachdem alles abgeschlossen ist, schließen Sie die telnet-Sitzung. Sie sagten, dass Sie das Problem durch das hinzufügen einer erwarten, die mit "$ " um das Skript wissen, mehr Befehle gesendet werden, seinen Weg. Ich habe versucht, gerade mit dem ' $ ' - symbol wie der Ort vorgeschlagen, aber es endete kicking mich wieder. Also versuchte ich diese.

Hier ist meine aktuelle code:

#!/usr/bin/expect
spawn telnet localhost
expect "debian login"
send "test\n"
expect "Password:"
send "password\n"
expect "test@debian:~$"
send "ls\n"

Nun bin ich noch in der telnet-Sitzung für etwa 10 Sekunden, und dann kickt mich aus. Wenn ich versuche, geben Sie einen Befehl in dieser Zeit, es wartet, dass die Zeit, dann läuft der Befehl, den ich eingegeben, nachdem die telnet-Sitzung beendet.

Fortschritte gemacht. Langsam, aber sicher.

InformationsquelleAutor Dylan | 2014-09-08

Schreibe einen Kommentar