Frage Wie kann ich beim Schließen von SSH ausbrechen?


Ich sitze oft zu Hause in der Schachtel von der Schule, aber normalerweise, wenn ich den Unterricht ändere und mein Computer aussetzt, wird das Rohr zerbrochen. Allerdings stürzt ssh einfach ab - Strg+c, Strg+z und Strg+d habe keine Wirkung.

Es ist nervig, mein Terminal neu starten zu müssen, und noch nerviger, ein neues Bildschirmfenster schließen und neu erstellen zu müssen.

Also meine Frage, gibt es einen einfachen Weg, um ssh sterben richtig zu machen (d. H. Wenn das Rohr "normal" ausfällt, wird es mit einer Nachricht über ein kaputtes Rohr enden)? Oder muss ich herausfinden, was die PID ist und manuell töten?


343
2018-03-11 16:22


Ursprung


Wenn die Verbindung mit einer aktiven SSH-Sitzung unterbrochen wird, bleibt sie hängen. Ich töte es einfach und starte eine neue Sitzung. Keine Information ist verloren, weil ich GNU Bildschirm verwende. - Lekensteyn
Ich auch - Bildschirm ist der beste. Aber es ist immer noch nervig zu müssen screen -x : P - Wayne Werner
[Mosh] (mosh.mit.edu) ist eine gute Alternative, um dieses Problem zu vermeiden. Es "bleibt verbunden" auch bei intermittierender Internetverbindung. - jaynp
@jaynp Der Nachteil von mir mit Mosh (seit zwei Minuten) ist, dass ich nicht weiß, wie man es trennt. Ich benutze eine tmux + irssi-Sitzung auf einem Remote-Host (als IRC-Türsteher, Art von) und ich möchte manchmal trennen (während die tmux + irssi läuft) und das tat ich mit <Enter> + ~ +. mit SSH, funktioniert aber nicht mit Mosh. - Pavel Šimerda


Antworten:


Normale Schlüssel werden über die ssh Sitzung, so wird keiner von denen funktionieren. Verwenden Sie stattdessen die Escape-Sequenzen. Um den aktuellen Sitzungstreffer anschließend zu beenden Geben Sie ↵ ein, ~, ..

Weitere dieser Escape-Sequenzen können mit aufgelistet werden Geben Sie ↵ ein, ~, ?:

Supported escape sequences:
  ~.  - terminate session
  ~B  - send a BREAK to the remote system
  ~R  - Request rekey (SSH protocol 2 only)
  ~#  - list forwarded connections
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

Sie können die Liste der Escape-Sequenzen schließen, indem Sie auf klicken eingeben.

Beachten Sie, dass da schlagen ~~ Ursachen ssh den schicken ~ anstatt es abzufangen, können Sie sich ansprechen N verschachtelt ssh Verbindungen durch Schlagen ~  N mal. (Dies gilt nur für ~s, die direkt einem folgen eingeben.) Das heißt, dass eingeben~~~~~. beendet ein ssh Sitzung 5 Schichten tief und hält die anderen 4 intakt.


478
2018-03-11 17:18



Für Tastaturlayouts wo ~ ist ein tote Taste, ist die Tastenfolge Enter  ~  Space  .. - Søren Løvborg
Ich habe hinzugefügt mehr der Escape-Sequenzen, die nützlich sein könnten. :) - gertvdijk
Beachten Sie, dass Sie die Zeile auskommentieren müssen EscapeChar ~ im /etc/ssh/ssh_config (oder ~/.ssh/ssh_config wenn Sie bevorzugen). - Aditya M P
@ Hitechcomputergeek Enter  ~  ~  . Schon seit ~  ~ sendet ein Literal ~ Durch Ihre SSH - Sitzung wird die zweite SSH - Sitzung als eine einzige Tilde empfangen und interpretiert die . als Teil der Flucht. Um an die 5. verschachtelte SSH-Sitzung zu senden, verwende einfach 5 Tilden in deiner Escape-Sequenz. - Score_Under
lebensverändernd;) - artm


Möglicherweise möchten Sie auch Anwendungsebene einrichten keep-alives für SSH zu verhindern es vor dem Einfrieren bei Verbindungsproblemen. Meine ~/.ssh/config enthält das:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

Auf diese Weise sendet der SSH-Client alle 15 Sekunden eine Weiterleitung auf Anwendungsebene. Wenn drei von ihnen nacheinander fehlschlagen (der Standardwert von ServerAliveCountMax) hält der Client die Verbindung für beendet und schließt sie.

Im Gegensatz zu der anderen Option TCPKeepAliveDies wird innerhalb des verschlüsselten Kanals überprüft und ist nicht spoofable.


Es wird angemerkt, dass diese Keep-Alive auch helfen, ähm, zu halten lang im Leerlauf Verbindungen am Leben, d. h. verhindern, dass Sie haben halb geschlossen TCP-Sitzungen hängen seit Stunden unberührt.

Ich empfehle dringend, diese Funktion zu aktivieren, wenn Sie regelmäßig darauf stoßen, aber Sie sollten auch über das geringe Sicherheitsrisiko Bescheid wissen. EIN Bekannter-Klartext-Angriff könnte leichter werden, wenn der Angreifer das Intervall und den Inhalt einer Verbindung im Leerlauf kennt. Dies könnte der Grund sein, warum es nicht standardmäßig aktiviert ist.


51
2018-03-11 18:51



Sicherheits Gründe. Du könntest trinken gehen und ssh sessio geöffnet lassen und dein Laborpartner, mit dem du in den letzten 20 Jahren gearbeitet hast, könnte deine Session nutzen, um den Server zu kapern und ihn zu zerstören ... während du in deiner 10-minütigen Pause trinkst. - Luis Alvarado♦
@ CYREX, was? Und wie kann die standardmäßig deaktivierte Option verhindern, dass Sie unfaire Laborpartner haben? %) - ulidtko
@ulidtko: Gibt es einen Grund, nicht einzustellen? ServerAliveInterval zu 1, damit eine verlorene Verbindung sofort erkannt wird? - krlmlr
Ich habe hat den Beitrag verbessert mit meinem Wissen darüber zusammen mit anderen 'Fixes'. Ich denke es ist nicht das Beantworten Sie die Frage, denn es geht eher darum, einen bereits gebrochenen Fehler zu verhindern als ihn zu reparieren. - gertvdijk
@gertvdijk: Danke. Für mich funktioniert es auch ohne die Host Linie. "Moderne Chiffren wie der Advanced Encryption Standard sind derzeit nicht anfällig für bekannte Klartext-Angriffe." (von dem Link, den du hinzugefügt hast) ... - krlmlr


Wie in Geekosaurs Antwort erwähnt, die Escape-Sequenz ~. beendet die Verbindung.

Die vollständige Liste der Escape-Sequenzen und was sie tun, kann durch Eingabe angezeigt werden ~?:

Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

39
2018-03-15 06:39



Wie schließe ich die Liste der Escape-Sequenzen? - kristianp
Nachdem Sie die Escape-Sequenzliste ausgedruckt haben, können Sie die nächste Sequenz nicht akzeptieren. - Tejas Kale