Dies ist die Fortsetzung meiner vorherigen Frage:Spawn-Befehl nicht gefunden
Nachdem ich einige alte Beiträge zu Rate gezogen hatte, habe ich diese Befehle geschrieben. Wenn sie falsch sind, wie kann ich dann per SSH eine Verbindung zum Remote-Server herstellen und einige Befehle ausführen?
Antwort1
Eine Möglichkeit ist: Erstellen Sie eine Expect-Syntax-Datei und rufen Sie diese über ein Shell-Skript auf:
#!/bin/bash
expect -f my-file.exp $1 # parameter 1 is the server name
In my-file.exp hätten Sie nur die folgenden Befehle erwartet:
spawn ssh "username@[lindex $argv 0]" # param 1 : server name
# expect now reads the input and does what you tell it on certain patterns
expect {
"password:" { send "my-password\r"; send "do_this_command\r"; send "do_that_command\r"; exp_continue; }
"done" { send_user "exiting"; }
}
In diesem Beispiel wird die Anmeldung beim Server durchgeführt, indem das Kennwort im Klartext gesendet wird. Anschließend werden einige Befehle gesendet und der Vorgang fortgesetzt.
Wenn aus der Eingabe „done“ gelesen wird, wird es beendet. Andernfalls tritt nach einigen Sekunden eine Zeitüberschreitung ein.
Solange Sie ein „exp_continue“ ausführen, bleibt es innerhalb der expect {}-Schleife, gleicht die Eingabe ab und führt die entsprechende Ausgabe aus.
Antwort2
Sie können in Ihrem Shellskript auch ein Expect-Shebang verwenden und ein Expect-Skript schreiben.
#!/usr/bin/expect -f
spawn ssh localhost
expect "password: "
send "password\r"
expect "{[#>$]}" #expect several prompts, like #,$ and >
send -- "command.sh\r"
expect "result of command"
etc...