Gibt es eine Möglichkeit, eine Verbindung zu einer SSH-Sitzung herzustellen, die getrennt wurde? Wir haben Probleme mit unserer Netzwerkverbindung zu einem Remote-Standort, an dem wir separat arbeiten. In der Zwischenzeit tritt jedoch eine große Anzahl von Verbindungsabbrüchen aufgrund verlorener Pakete auf, wenn eine Verbindung zu Servern am Remotestandort besteht. Oft bleibt die Sitzung für eine Weile aktiv und manchmal befindet sie sich mitten in einer Aktion (Dateibearbeitung, Ausführen eines Prozesses usw.), zu der ich zurückkehren muss, anstatt nach Möglichkeit neu zu starten.
linux
ssh
gnu-screen
palehorse
quelle
quelle
Antworten:
UPDATE: Für eine aktuelle Antwort siehe die Antwort von zero_r unten
Dies ist keine Antwort, sondern eine Problemumgehung. Verwenden Sie Bildschirm .
Wenn Sie sich zum ersten Mal anmelden, führen Sie screen aus. Sie erhalten eine andere Shell, in der Sie Befehle ausführen. Wenn Sie nicht verbunden sind, hält der Bildschirmprozess das Terminal am Leben, damit Ihre Shell und die von ihr ausgeführten Prozesse nicht umfallen. Wenn Sie die Verbindung wiederherstellen, führen Sie 'screen -r' aus, um fortzufahren.
Die Konfiguration und Verwendung des Bildschirms erfordert noch eine Menge mehr, aber die oben genannten Maßnahmen sollten Ihr Problem umgehen.
quelle
screen
, festgestellt zu haben, dass es bereits auf meinem Ubuntu 12.x installiert war. Wenn Sie sich also nicht sicher sind, versuchen Sie es einfach mit diesem Befehl. Es stellte die Verbindung wieder her und setzte den Aktualisierungsprozess fort : sudo screen -D -rsudo
sollte nur verwendet werden, wenn die ursprüngliche Bildschirmsitzung mit sudo initiiert wurde. Andernfalls wird es zurückgegeben, als ob keine Bildschirmsitzung existiert:There is no screen to be detached
screen -r
war genau das, was ich suchte.Versuchen Sie, ClientAliveInterval (z. B. 60) und TCPKeepAlive (yes oder no) auf der Serverseite sshd.conf auf die entsprechenden Werte zu setzen.
Dies sollte Ihre Sitzung am Leben erhalten, auch wenn die Verbindung für Minuten unterbrochen wird.
quelle
Wie oben erwähnt, ist GNU Screen der richtige Weg. Sie können auf der Remote-Box eine "Bildschirmsitzung" durchführen, in der Sie über mehrere "Bildschirmfenster" mehrere Befehle ausführen können. Dadurch wird die Verbindung einfach getrennt, wenn die übergeordnete SSH-Verbindung unterbrochen wird, und alle darin ausgeführten Unterprozesse bleiben erhalten.
'
man screen
' ist wie gewohnt dein Freund, und das Betriebssystempaket sollte 'screen
' heißen , wenn es nicht standardmäßig installiert ist.Grundlagen sind:
Starten Sie eine Bildschirmsitzung (auf Ihrem Remote-Host):
Trennen Sie von Ihrem Bildschirm - Sitzung: CTRL-A,d
Stellen Sie die Verbindung zu Ihrer Bildschirmsitzung wieder her, nachdem Sie sich erneut angemeldet haben:
Öffnen Sie einen anderen Bildschirm , Fenster ': CTRL-A,c
Zyklus durch Öffnen von Bildschirmfenster: CTRL-A,space
Es gibt viele coole Sachen, die Sie mit Screen machen können. Ich benutze es seit über 10 Jahren und finde immer noch neue Funktionen heraus. Es ist mein Lieblings-Unix-Dienstprogramm.
quelle
Ich kann nicht glauben, dass niemand MOSH erwähnt hat ;
Mosh ist ein separates Protokoll, das sich in den SSH-Anmeldevorgang einbinden kann. Es hält Ihre Sitzung nach Tagen der Trennung, Änderung der IP-Adresse, hoher Latenz usw. am Leben. Es wird auf der Homepage besser erklärt, als ich es erklären kann, daher habe ich die Beschreibung unten kopiert. Meine Erfahrungen und Ratschläge sind, dass ich es auf meinem Android-Handy verwende, es ist ein Lebensretter beim Reisen und SSH'ing. Das Gleiche gilt für meinen Laptop, wenn er zum Beispiel mit einem Mobiltelefon im Zug verbunden ist. Ich empfehle, aus dem Quellcode zu kompilieren, um die neueste Version zu erhalten. Die für mich in Ubuntu verwendete Repo-Version weist einige Unannehmlichkeiten auf, die in der neuesten Version (zum Zeitpunkt des Schreibens) behoben sind.
Funktionen von der Website:
IP ändern. In Verbindung bleiben : Mosh wechselt automatisch zwischen Internetverbindungen. Verwenden Sie Wi-Fi im Zug, Ethernet in einem Hotel und LTE am Strand: Sie bleiben angemeldet. Die meisten Netzwerkprogramme, einschließlich SSH und Web-Apps wie Google Mail, verlieren nach dem Roaming die Verbindung. Mosh ist anders.
Für süße Träume : Mit Mosh können Sie Ihren Laptop in den Ruhezustand versetzen und später wieder aufwecken, sodass Ihre Verbindung erhalten bleibt. Wenn Ihre Internetverbindung unterbrochen wird, werden Sie von Mosh gewarnt. Die Verbindung wird jedoch wieder hergestellt, sobald der Netzwerkdienst wieder verfügbar ist.
Werde Netzwerkverzögerungen los : SSH wartet auf die Antwort des Servers, bevor es dir deine eigene Eingabe zeigt. Das kann zu einer miesen Benutzeroberfläche führen. Mosh ist anders: Es gibt eine sofortige Antwort auf das Eingeben, Löschen und Bearbeiten von Zeilen. Es macht dies adaptiv und funktioniert sogar in Vollbildprogrammen wie Emacs und Vim. Bei einer schlechten Verbindung werden herausragende Vorhersagen unterstrichen, damit Sie nicht irregeführt werden.
Kein privilegierter Code. Kein Daemon : Sie müssen nicht der Superuser sein, um Mosh zu installieren oder auszuführen. Der Client und der Server sind ausführbare Dateien, die von einem normalen Benutzer ausgeführt werden und nur für die Dauer der Verbindung gültig sind.
Gleiche Anmeldemethode : Mosh überwacht weder Netzwerkports noch authentifiziert er Benutzer. Der mosh-Client meldet sich über SSH beim Server an und die Benutzer geben die gleichen Anmeldeinformationen (z. B. Kennwort, öffentlicher Schlüssel) wie zuvor an. Dann führt Mosh den Mosh-Server aus der Ferne aus und stellt über UDP eine Verbindung zu ihm her.
Läuft in Ihrem Terminal, aber besser : Mosh ist ein Befehlszeilenprogramm wie ssh. Sie können es in xterm, gnome-terminal, urxvt, Terminal.app, iTerm, emacs, screen oder tmux verwenden. Aber mosh wurde von Grund auf neu entwickelt und unterstützt nur einen Zeichensatz: UTF-8. Es behebt Unicode-Fehler in anderen Terminals und in SSH.
Control-C funktioniert hervorragend : Im Gegensatz zu SSH behandelt das UDP-basierte Protokoll von mosh den Paketverlust ordnungsgemäß und legt die Framerate basierend auf den Netzwerkbedingungen fest. Mosh füllt keine Netzwerkpuffer, daher arbeitet Control-C
immer, um einen außer Kontrolle geratenen Prozess anzuhalten.
quelle
autossh überwacht Ihre Verbindung und stellt die Verbindung wieder her, wenn sie ausfällt . Es ist zuverlässiger als Keepalives. Wenn Sie eine Verbindung zu einer Bildschirmsitzung herstellen, fahren Sie direkt an der Stelle fort, an der Sie die Verbindung getrennt haben (siehe dazu
rscreen
autossh).quelle
rscreen
dafür.tmux
Dieser ist ein Klassiker. Verwenden Sie es, wenn Sie die Gefahr haben, die Verbindung zu einem Terminal zu verlieren.
Einfach so, du bist wieder in Aktion.
quelle
Ich würde installieren und starten Bildschirm, um Ihr Problem zu beheben. Auf dem Bildschirm können Sie erneut eine Verbindung zu einer vorherigen Bildschirmsitzung herstellen.
Abgesehen davon können Sie mit screen auch coole Dinge tun, z. B. Ihren Bildschirm teilen, die Konsole anzeigen usw. Weitere Informationen finden Sie hier und hier .
Für den Anfang, wenn Sie getrennt werden, können Sie verwenden
um Ihre Sessions zu sehen und
Verbindung zu einem getrennten Teilnehmer wiederherstellen.
quelle
Wie andere bereits betont haben, ist der Bildschirm im Allgemeinen die beste Lösung dafür und fügt eine Reihe weiterer nützlicher Funktionen hinzu.
Sie können Ihr Profil auf dem Remotecomputer so einrichten, dass es beim Anmelden automatisch gestartet und / oder erneut mit dem Bildschirm verbunden wird. Dadurch müssen Sie nicht mehr den Bildschirm starten, wenn Sie ihn einmal benötigen, da die Verbindung unterbrochen wird.
Siehe http://tlug.dnho.net/?q=node/239 (oder durchsuchen Sie Google nach vielen anderen Beispielen, die auf etwas andere Weise erstellt wurden).
quelle
eine modernere Alternative zum Bildschirm, die leider für einige Arten der "Virtualisierung" nicht verfügbar ist (z. B. können Sie in Cygwin "Bildschirm", aber aufgrund des Designs nicht "tmux" verwenden), aber wo immer Sie die Option haben, tmux zu installieren Ich würde dringend empfehlen, sich für diesen Bildschirm zu entscheiden.
quelle
Hier ist eine andere Nicht-Bildschirm-Lösung.
Mit der Kittablage können Sie genau das tun. Sie verfügt über eine Option zum erneuten Verbinden beim Trennen, die nicht im regulären oder Kitt-Modus enthalten ist
https://puttytray.goeswhere.com/
Es handelt sich um eine (vollständig Open Source) Auswahl an Kitt mit anderen Optionen. Wechseln Sie zu den Verbindungseinstellungen, und es gibt zwei Optionen, eine für "Versuch, bei Verbindungsfehlern erneut eine Verbindung herzustellen" und eine für "Versuch, bei Start erneut eine Verbindung herzustellen".
quelle
Während der Bildschirm Ihre Shell-Sitzung auf dem Remote-Server geöffnet hält, wenn Ihre SSH-Sitzung unterbrochen wird, kann das Problem des Ausfalls von SSH-Verbindungen nicht behoben werden. Versuchen Sie, wie von zero_r vorgeschlagen, Ihre ssh-Verbindung mit Keep Alives und langen Timeouts zu optimieren.
Ich schlage vor, dass Sie die Ursache der verlorenen Pakete, die die Probleme verursachen, aufspüren und beheben, anstatt sie zu umgehen.
quelle
Manchmal vergaß ich auch den Bildschirm zu starten und verlor meine unvollendete Arbeit. In diesem Fall können wir zwar keine unterbrochene SSH-Sitzung wiederherstellen, aber das Reparieren eines ausgeführten Programms auf einem neuen Terminal und die Wiederaufnahme Ihrer Arbeit ist dank weiterhin möglich
reptyr
.Nach dem versehentlichen Trennen der Verbindung zu einer SSH-Sitzung muss zuerst ausgeführt werden,
screen
damit die Verbindung nicht erneut unterbrochen wird. Führen Sie dann in der neuen Sitzungps aux | grep {The process to be resumed}
den Befehl aus, um die PID abzurufen. Mit der PID können Sie versuchenreptyr {PID}
oderreptyr -T {PID}
(falls es Unterprozesse gibt) die Arbeit fortzusetzen.quelle