Automatisches Einloggen in SSH mit Expect

4219
skerit

Ich habe ein Skript geschrieben, um sich automatisch bei einem Remote-Server anzumelden. Die Anmeldedaten werden in einer Datenbank gespeichert.

/usr/bin/expect <<EOD spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no $SSHUser@$SSHHost match_max 100000 expect "*?assword:*" send -- "$SSHPass\r" send -- "\r" expect eof EOD 

Das funktioniert, es loggt sich erfolgreich ein, aber ich kann nicht interagieren. Es werden keine Tastendrücke an den Server gesendet.

0
Verwenden Sie nicht die auf öffentlichen Schlüsseln basierende Authentifizierung und einen [lokalen Authentifizierungsagenten] (http://en.wikipedia.org/wiki/Ssh-agent). Es ist viel sicherer und gleichermaßen praktisch. RedGrittyBrick vor 12 Jahren 3

1 Antwort auf die Frage

2
CodeGnome

Warum Ihr Skript den Sockel schließt

Immer wenn ein Expect-Skript das Ende der Datei erreicht, werden alle erzeugten Prozesse geschlossen und beendet. Mit anderen Worten, es verhält sich derzeit wie geplant.

Halten Sie den Sockel für die Interaktion offen

Was fehlt, ist die Verwendung des Interaktionsbefehls, wenn Sie eine Eingabeaufforderung sehen. Zum Beispiel nach dem Senden Ihres Passworts:

expect {\$\s*} { interact } 

In Ihrem speziellen Anwendungsfall können Sie einfach nach dem Senden Ihres Kennworts einfach interaktiv anrufen, ohne auf die Aufforderung zu warten. Das obige Beispiel ist jedoch in der Regel eine bessere Vorgehensweise, mit der Sie mit anderen Situationen umgehen können, wenn Sie sich dafür entscheiden.

Mit Interact können Sie tun, was Sie möchten: mit der SSH-Sitzung interagieren. Dies wird fortgesetzt, bis Sie die Verbindung schließen und der erzeugte Prozess beendet wird.

Siehe auch

https://stackoverflow.com/questions/12236894/isit-moglich-automate-ssh-login-mit-passwd-not-passphraseless-ssh/12237702#12237702

Ich habe es tatsächlich ausprobiert und `Erwartet {\ $ \ s *} ` hinzugefügt, aber es funktioniert nicht. skerit vor 12 Jahren 0
@skerit Das liegt wahrscheinlich daran, dass stdin bereits von Ihrem Here-Dokument verwendet wird. Versuchen Sie, die Befehle in ein Skript anstelle eines Here-Dokuments einzufügen, z. B. "expect -f" # Ihre Befehle hier "". CodeGnome vor 12 Jahren 0