Wie kann ich beim Sperren von ssh ausbrechen?

340

Ich sitze oft zu Hause in der Schachtel von der Schule, aber normalerweise, wenn ich den Unterricht ändere und mein Computer aussetzt, wird die Pfeife zerbrochen. Ssh sperrt jedoch einfach - Strg + c , Strg + z und Strg > + d haben keine Wirkung.

Es ist ärgerlich, dass ich mein Terminal neu starten muss, und noch nerviger ist es, ein neues Bildschirmfenster schließen und neu erstellen zu müssen.

Also meine Frage, gibt es eine einfache Möglichkeit, ssh richtig zu machen (d. h., wenn die Leitung "normal" ausfällt, wird sie mit einer Nachricht über eine defekte Leitung beendet)? Oder muss ich herausfinden, was die PID ist und manuell töten?

    
Wayne Werner 11.03.2011, 17:22

3 Antworten

472

Normale Schlüssel werden über die ssh -Sitzung weitergeleitet, so dass keine davon funktioniert. Verwenden Sie stattdessen die Escape-Sequenzen. Um den aktuellen Sitzungstreffer zu beenden, geben Sie anschließend ein Geben Sie ↵ , ~ , . .

ein

Weitere dieser Escape-Sequenzen können aufgelistet werden mit Enter , ~ , ? :

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 eingeben .

Beachten Sie, dass, weil ~ ~ bewirkt, dass ssh das ~ sendet, anstatt es abzufangen, Sie N geschachtelt adressieren können ssh Verbindungen durch Drücken von ~ N mal. (Dies gilt nur für ~ s, die direkt einem enter folgen.) Das heißt, geben Sie ~ ~ ~ ~ ~ . beendet eine ssh -Sitzung 5 Schichten tief und hält die anderen 4 intakt.

    
geekosaur 11.03.2011, 18:18
51

Sie können auch auf Anwendungsebene für SSH einrichten, damit das Einfrieren von bei Verbindungsproblemen verhindert. Mein ~/.ssh/config enthält das:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

Dies bewirkt, dass der ssh-Client alle 15 Sekunden Anwendungsebenen-Keep-Alives sendet. Wenn drei von ihnen nacheinander fehlschlagen (der Standardwert von ServerAliveCountMax ), betrachtet der Client die Verbindung als angehalten und schließt sie.

Im Gegensatz zur anderen Option TCPKeepAlive wird dies innerhalb des verschlüsselten Kanals überprüft und ist nicht spoofable.

Es wird angemerkt, dass diese Keep-Alive auch dazu beitragen, langleerende Verbindungen am Leben zu halten, dh Sie daran zu hindern, halbgeschlossene TCP-Sitzungen, die stundenlang unbearbeitet bleiben.

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 wird möglicherweise einfacher, wenn der Angreifer das Intervall und den Inhalt einer inaktiven Verbindung kennt. Dies könnte der Grund sein, warum es nicht standardmäßig aktiviert ist.

    
ulidtko 11.03.2011 19:51
39

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

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

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.)
    
scottl 15.03.2011 07:39

Tags und Links