So stellen Sie die Verbindung zu einer getrennten SSH-Sitzung wieder her

So stellen Sie die Verbindung zu einer getrennten SSH-Sitzung wieder her

Gibt es eine Möglichkeit, eine Verbindung zu einer SSH-Sitzung herzustellen, die unterbrochen wurde? Wir haben Probleme mit unserer Netzwerkverbindung zu einem Remote-Standort, an dem wir separat arbeiten. In der Zwischenzeit kommt es jedoch häufig zu Verbindungsabbrüchen aufgrund verlorener Pakete während der Verbindung mit Servern am Remote-Standort. Oft bleibt die Sitzung eine Weile aktiv und manchmal passiert es, dass sie mitten in einer Aktion steckt (Dateibearbeitung, Ausführen eines Prozesses usw.), zu der ich zurückkehren muss, anstatt sie, wenn möglich, neu zu starten.

Antwort1

UPDATE: Eine tatsächliche Antwort finden Sie in der Antwort von zero_r weiter unten

Dies ist keine Antwort, sondern ein Workaround. Verwenden SieBildschirm.

Führen Sie screen aus, wenn Sie sich zum ersten Mal anmelden. Sie erhalten eine weitere Shell, in der Sie Befehle ausführen können. Wenn Ihre Verbindung getrennt wird, hält der Screen-Prozess das Terminal am Leben, damit Ihre Shell und die darauf ausgeführten Prozesse nicht abstürzen. Wenn Sie die Verbindung wiederherstellen, führen Sie „screen -r“ aus, um fortzufahren.

Zur Konfiguration und Verwendung des Bildschirms ist noch eine Menge mehr erforderlich, aber die oben genannten Schritte sollten Ihr Problem umgehen.

Antwort2

Versuchen Sie, ClientAliveInterval (z. B. 60) und TCPKeepAlive (ja oder nein) in der serverseitigen sshd.conf auf entsprechende Werte einzustellen.

Dadurch sollte Ihre Sitzung auch dann aufrechterhalten werden, wenn die Verbindung für einige Minuten unterbrochen wird.

Antwort3

Wie oben erwähnt,GNU-Bildschirmist der richtige Weg. Sie können damit eine „Bildschirmsitzung“ auf der Remote-Box einrichten, in der Sie über mehrere „Bildschirmfenster“ mehrere Befehle ausführen können. Dies wird einfach getrennt, wenn Ihre übergeordnete SSH-Verbindung abbricht, und alle darin ausgeführten Unterprozesse bleiben aktiv und fehlerfrei.

man screenist wie immer Ihr Freund, und das OS-Paket sollte aufgerufen werden, screenwenn es nicht standardmäßig installiert ist.

Grundlagen sind:

  • Starten Sie eine Bildschirmsitzung (auf Ihrem Remote-Host):

      $ screen
    
  • Trennen Sie die Verbindung zu Ihrer Bildschirmsitzung: CTRL-A,d

  • Stellen Sie nach der erneuten Anmeldung die Verbindung zu Ihrer Bildschirmsitzung wieder her:

      $ screen -d -r
    
  • Öffnen Sie ein weiteres Bildschirmfenster: CTRL-A,c

  • Wechseln Sie durch die geöffneten Bildschirmfenster: CTRL-A,space

Es gibtvielevon coolen Sachen, die man mit screen machen kann. Ich benutze es seit über 10 Jahren und entdecke immer noch neue Funktionen. Es ist mein liebstes Unix-Dienstprogramm.

Antwort4

Manchmal vergaß ich auch, screen auszuführen, und verlor meine unfertige Arbeit. In diesem Fall können wir zwar keine Verbindung zu einer unterbrochenen SSH-Sitzung wiederherstellen, aber dank ist es immer noch möglich, ein laufendes Programm einem neuen Terminal zuzuordnen und mit der Arbeit fortzufahren reptyr.

Nach einer versehentlichen Trennung von einer SSH-Sitzung ist das Erste, was Sie tun müssen, screen(oder tmux, was immer Sie möchten), damit die Verbindung nicht erneut unterbrochen wird. Führen Sie dann in der neuen Sitzung aus, ps aux | grep {The process to be resumed}um die PID abzurufen. Mit der PID können Sie versuchen, reptyr {PID}die reptyr -T {PID}Arbeit fortzusetzen (falls Unterprozesse vorhanden sind).


Zusätzliche Bemerkungen:

Denken Sie auch daran, ClientAliveInterval (z. B. 60) und TCPKeepAlive (ja oder nein) in der serverseitigen sshd.conf auf entsprechende Werte einzustellen.wie in der Antwort von zero_r erwähnt. Oder, wenn Sie in einer Netzwerkumgebung mit einer extrem hohen Paketverlustrate wie Starlink im Sturm arbeiten müssen,zu MOSH wechseln, eine SSH-Alternative, die jedoch auf UDP basiert.

verwandte Informationen