So schreiben Sie expect in der Shell

So schreiben Sie expect in der Shell

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...

verwandte Informationen