Ein ssh-Login zu automatisieren, ist stabil nur durch expect, via Skript, zu realisieren.
Expect ist ein spezialisiertes Tool zur Automatisierung interaktiver Anwendungen auf Unix.
Unter Windows soll es auch einen Clone geben (sourceforge.net ).
Das ssh-Login interaktiv aufgerufen ssh sshusr@server03 fordert zur Eingabe des Passwortes auf.
Mit Hilfe von expect wird nach Absenden (spawn) des Befehls auf den String „password“ gewartet.
Dazu das Skript ssh_loginaction mit folgendem Aufruf und Parametern:
./ssh_loginaction user password server03
#!/usr/local/bin/expect set timeout 30 set user [lindex $argv 0] set pass [lindex $argv 1] set host [lindex $argv 2] spawn ssh $user@$host expect { "password:" {send "$pass\r"} default {puts stdout "\nHat nicht funktioniert!" exit} } expect "prompt>" {send "action_command\r"} expect "prompt>" {send "exit\r"} puts stdout "\nEND\n"
set timeout 30 – Standard sind 10 Sekunden Timeout. Dann beendet sich expect ohne weitere Warnung. Es soll ja Server geben, die unter Last und nur über ausgiebiges Routing zu erreichen, etwas länger für das Login brauchen. Ich hatte mich gewundert, als ein expect die Aktion meist ausführte, manchmal aber eben nicht. Grund war ein nicht definierter Timeout und dann ist nach 10 Sekunden Schluss.