Ich kämpfe mit dem klassischen Problem der Eingabe von Passwort automatisch in ssh, und wie alle anderen stolpere ich im Dunkeln über erwarten. Schließlich gepflasterten ich ein Skript zusammen, die ein bisschen arbeiten:exit expect {} ohne Zeitüberschreitung
#!/usr/bin/expect -f
# command line args
set user_at_host [lrange $argv 0 0]
set password [lrange $argv 1 1]
set timeout 1
# ssh command
spawn ssh -S ~/.ssh/tmp.$user_at_host -M -N -f $user_at_host
# deal with ssh prompts
expect {
"*yes/no*" { send "yes\r" ; exp_continue }
"*assword:" { send "$password\r" ; exp_continue }
}
Dieses Skript endet nur dank der timeout 1
Linie, ohne sie es einfach hängt und wird nur durch Interaktion mit dem Benutzer (^C
) beenden.
Wenn die Zeile spawn
ein direkter ssh-Befehl war, wurde das Skript sofort beendet, dies ist jedoch not your straight forward ssh. Die Sache, die anders sein könnte, ist die -f
Option, die es im Hintergrund laufen lässt (aber ich habe das Skript ohne es vergeblich versucht).
Ich lese, dass interact
oder expect eof
könnte helfen, aber ich war nicht in der Lage, die richtige Beschwörungsformel zu finden, die es tatsächlich tun wird.
Meine Frage (denke ich) ist Wie kann man ein Expect-Skript erstellen, das einen Hintergrundprozess hervorbringt, der ohne Timeout beendet wird?
Edit: Ich erwartet hätte (kein Wortspiel beabsichtigt), um die "Authentifizierung passwordless ssh" Antwort. Obwohl dies ein guter Rat ist, ist es in meinem Szenario nicht die geeignete Lösung: Automatisches Testen eines in einer Vanilla installierten Systems in einer vertrauenswürdigen Umgebung, wo das Hinzufügen vertrauenswürdiger Schlüssel zum Image nicht wünschenswert/möglich ist.
Gibt es eine Möglichkeit direkt nach dem '* Passwort zu verlassen:'? Als ich versuchte, das 'exp_continue' durch etwas anderes zu ersetzen, wurde es sofort beendet, schien aber' '{password}' 'nicht zu senden. –
Vielleicht ein "Schlaf 1" oder "erwarten eof" oder "warten"? –
Entschuldigung dafür, dass ich es abgehört habe, aber ich verspringe, und vielleicht kannst du mir helfen, die Anzahl der zu testenden Permutationen zu verringern: Sollte "warten" innerhalb oder außerhalb des 'erwarten {...} "Schleife"? –