Automatische Wiederverbindung von SSH-Verbindungen mit einer bestimmten Bildschirmsitzung

10

Ich habe normalerweise mehrere Terminalfenster, von denen jedes über ssh mit einem Remote-Server verbunden ist. In jedem Fenster arbeite ich mit dem Gnu-Bildschirmprogramm, um die Persistenz der interaktiven Prozesse im Falle einer Unterbrechung sicherzustellen.

Derzeit muss ich die SSH-Sitzung in jedem Fenster manuell und mühsam neu starten, wenn die SSH-Verbindung unterbrochen wird (z. B. wenn ich meinen Client-Computer über Nacht in den Ruhezustand versetze), und dann in jedem Fenster die spezifische Bildschirmsitzung mühsam fortsetzen (z. B. "Bildschirm -"). r 3453 "in einem Fenster," Bildschirm -r 3462 "im anderen usw.)

Gibt es eine elegante Möglichkeit, dies zu automatisieren? Speziell:

  • Verbinden Sie die SSH-Sitzung erneut, wenn sie unterbrochen wird, sobald eine Internetverbindung erkannt wird

  • Führen Sie die spezifische Bildschirminstanz für das Terminalfenster aus, sobald ssh erneut eine Verbindung herstellt

Vielen Dank für alle Tipps dazu

GJ.
quelle

Antworten:

10

Sie können dies ausführen: ssh -t hostname screen -r 3453um die Verbindung wiederherzustellen. Wenn Sie es in einer Schleife tun möchten, verwende ich Folgendes in einem Skript.

while true; do
    ssh -t -o BatchMode=yes eeepc-rsi "screen -r 3453"
    sleep 2
done

Dies funktioniert am besten, wenn Sie SSH-Schlüssel eingerichtet haben, damit Sie sich anmelden können, ohne Ihr Passwort einzugeben. Ich würde auch empfehlen, dass Sie sich tmux ansehen, eine modernere Implementierung des Bildschirms. Ich benutze tatsächlich das obige Skript mit Bildschirm. Sie möchten wahrscheinlich auch eine benannte Bildschirmsitzung verwenden, anstatt nur die PID zu verwenden, wie Sie es in Ihrem Beispiel tun.

Jason Axelson
quelle
Vielen Dank! Wofür genau ist der "-o BatchMode = yes"?
GJ.
Dadurch können Sie nicht zur Eingabe des Kennworts auffordern. Aus 'man ssh_config': "Die Abfrage von Passphrasen / Passwörtern wird deaktiviert. Diese Option ist nützlich in Skripten und anderen Stapeljobs, in denen kein Benutzer zur Eingabe des Passworts anwesend ist." Verwenden Sie es also nur, wenn Sie bereits SSH-Schlüssel eingerichtet haben.
Jason Axelson
5

Keine Notwendigkeit, Bash-Loops zu hacken. Sie müssen in autossh schauen . Ich habe es nicht viel selbst verwendet, aber mein Verständnis ist , dass man einfach ersetzen sshmit autosshin Ihrem Befehl.

Bearbeiten: Tatsächlich wird autossh mit einem Skript geliefert rscreen, das genau für diesen Zweck entwickelt zu sein scheint.

Ryan C. Thompson
quelle