Eine eingefrorene Sitzung schließen
Enter ~ .
Sie sehen:
Connection to server closed.
Wir haben den Server angehalten, sodass er nichts mehr beantwortete, und dann ~. direkt nach anderem Text getippt. Es passierte nichts. Nach Enter schloss ~. die Sitzung sofort. Scheint es nichts zu tun, drücken Sie Enter und versuchen Sie es erneut.
Mit Multiplexing schließt ~. in einer Sitzung, die die Verbindung mitbenutzt, nur diese Sitzung. In der Sitzung, die die Verbindung geöffnet hat, ohne ControlPersist, beendet es alle Sitzungen, die sie teilen.
Wenn die Sitzung endet, enden auch die Programme darin. Eine Shell in tmux läuft auf dem Server weiter: siehe SSH-Sitzung nach dem Trennen mit tmux am Leben halten.
Alle Escape-Sequenzen
Tippen Sie ~? nach einer neuen Zeile, und Ihr ssh gibt diese Liste aus. Alle brauchen zuerst eine neue Zeile, und sie werden nicht an den Server gesendet.
| Tasten | Was sie tun |
|---|---|
~. | Schließt die Verbindung |
~^Z | Hält ssh an, wobei ^Z Strg+Z bedeutet. Zurück mit fg |
~# | Listet offene Kanäle und Weiterleitungen auf |
~& | Schickt ssh in den Hintergrund, wenn es beim Abmelden auf das Ende von Weiterleitungen wartet |
~? | Zeigt die Liste |
~C | Öffnet eine kleine Kommandozeile, falls aktiviert |
~B | Sendet ein BREAK |
~I | Zeigt Verbindungsinformationen, in Versionen nach 10.0 |
~R | Fordert einen neuen Sitzungsschlüssel an |
~V und ~v | Verringern und erhöhen die Ausführlichkeit des Logs |
~~ | Sendet ein einzelnes ~ |
Anhalten mit ~^Z
~^Z [suspend ssh]
[1]+ Stopped ssh server
$ fg
Das bringt Sie zurück zu Ihrer lokalen Shell, ohne die Sitzung zu schließen. Nach fg lief die Sitzung in unserem Test normal weiter.
~C: eine Weiterleitung zu einer offenen Sitzung hinzufügen
Seit OpenSSH 9.2 ist das standardmäßig aus, und ~C gibt commandline disabled aus. So schalten Sie es ein:
ssh -o EnableEscapeCommandline=yes server
Oder setzen Sie EnableEscapeCommandline yes in ~/.ssh/config. Dann öffnet ~C einen ssh>-Prompt:
ssh> -L 8022:localhost:22
Forwarding port.
ssh> -KL8022
Canceled forwarding.
Tippen Sie an diesem Prompt ? für die Befehle. Er akzeptiert auch -R und -D. Wir haben bestätigt, dass der Port nach -L geöffnet und nach -KL geschlossen wurde.
Was -L, -R und -D tun, erklärt SSH-Tunnel erklärt: lokal, remote und dynamisch.
Verschachtelte Sitzungen
Wenn Sie von einem Server per SSH zu einem anderen gehen, sieht das äußerste ssh das Escape zuerst. Jedes zusätzliche ~ reicht es eine Ebene weiter nach unten:
| Tasten | Schließt |
|---|---|
~. | Die erste Verbindung, wodurch auch die innere endet |
~~. | Die zweite Verbindung, Sie bleiben auf dem ersten Server |
~~~. | Die dritte Verbindung, nach derselben Regel |
Wir haben die ersten beiden getestet. ~~. gab Connection to localhost closed. aus und ließ die äußere Sitzung weiterarbeiten.
Das Escape-Zeichen ändern oder abschalten
Wählen Sie ein anderes Zeichen, wenn ~ auf Ihrer Tastatur umständlich ist:
ssh -e '^' server
Jetzt schließt ^. die Sitzung, und ~. ist gewöhnlicher Text. Um Escapes abzuschalten, zum Beispiel wenn Binärdaten durch die Sitzung laufen:
ssh -e none server
In ~/.ssh/config lautet die Option:
Host server
EscapeChar none
Mit none lässt sich die Sitzung bei einem Einfrieren nicht mehr über die Tastatur schließen. Setzen Sie ServerAliveInterval, damit eine tote Verbindung von selbst endet. Siehe Broken pipe und Keepalive.
Fragen
Warum friert meine SSH-Sitzung ein?
Meist ist das Netz weggebrochen, während die Sitzung ruhig war, und ssh wartet noch auf einen Server, den es nicht mehr erreicht. Schließen Sie sie mit Enter, ~, . und setzen Sie ServerAliveInterval 30 in ~/.ssh/config: Dann bemerkt ssh eine tote Verbindung und beendet sich nach etwa anderthalb Minuten von selbst.
Warum schließt ~. meine SSH-Sitzung nicht?
Das Escape-Zeichen wirkt nur direkt nach einem Zeilenumbruch, drücken Sie also zuerst Enter. Es wirkt auch nicht, wenn EscapeChar auf none steht, wenn -e ein anderes Zeichen gewählt hat oder in einer Sitzung ohne Terminal.
Wie tippe ich ein ~ am Zeilenanfang in SSH?
Tippen Sie es zweimal. ~~ sendet ein einzelnes ~ an den Server.
Wofür ist ~C in SSH?
Es öffnet eine ssh>-Eingabe, in der Sie Portweiterleitungen in einer laufenden Sitzung hinzufügen oder beenden. Seit OpenSSH 9.2 ist es aus, bis Sie EnableEscapeCommandline yes setzen.
Quellen
- ssh(1), ESCAPE CHARACTERS, OpenBSD manual
- ssh_config(5), EscapeChar, OpenBSD manual
- OpenSSH 9.2 release notes