Wie kann ich eine SSH-Verbindung beenden?

245

Ich verbinde mich über SSH mit einem Server, um eine Nachricht an einen Socket-Server zu senden.

ssh 181.169.1.2 -p 5566

Nachdem die Verbindung hergestellt wurde und ich die Nachricht geschrieben und gesendet habe, kann ich den Textmodus nicht verlassen. Ich darf nur mehr Text eingeben und das wars.

Gibt es einen Befehl oder eine Tastenkombination, mit der ich in den Befehlsmodus zurückkehren kann?

Andreea
quelle

Antworten:

156

Wie kann ich eine SSH-Verbindung beenden?

Zwei Wege:

  • Schließen der Shell-Sitzung, z. B. mit exitgefolgt von Enteroder Ctrl- dErmöglicht sshnormalerweise das normale Beenden der Sitzung.
  • Wenn Sie eine schlechte Verbindung haben und die Shell nicht reagiert, Enterdrücken Sie die Taste. ~.Geben Sie dann ein und ssh sollte sofort geschlossen werden und Sie zur Eingabeaufforderung zurückkehren.

Die erste Option sollte intuitiv sein, aber woher kennen wir die letztere Option?

Wir könnten diese Information aus einem sorgfältigen Lesen der Manpage lernen.

$ man ssh

gibt uns die SSH-Dokumentation , die den folgenden Abschnitt zu Escape-Zeichen enthält:

ESCAPE CHARACTERS
     When a pseudo-terminal has been requested, ssh supports a number of
     functions through the use of an escape character.

     A single tilde character can be sent as ~~ or by following the tilde by
     a character other than those described below.  The escape character
     must always follow a newline to be interpreted as special.  The escape
     character can be changed in configuration files using the EscapeChar
     configuration directive or on the command line by the -e option.

     The supported escapes (assuming the default ‘~’) are:

     ~.      Disconnect.

     ~^Z     Background ssh.

     ~#      List forwarded connections.

     ~&      Background ssh at logout when waiting for forwarded connection
             / X11 sessions to terminate.

     ~?      Display a list of escape characters.

     ~B      Send a BREAK to the remote system (only useful if the peer sup‐
             ports it).

     ~C      Open command line.  Currently this allows the addition of port
             forwardings using the -L, -R and -D options (see above).  It
             also allows the cancellation of existing port-forwardings with
             -KL[bind_address:]port for local, -KR[bind_address:]port for
             remote and -KD[bind_address:]port for dynamic port-forwardings.
             !command allows the user to execute a local command if the
             PermitLocalCommand option is enabled in ssh_config(5).  Basic
             help is available, using the -h option.

     ~R      Request rekeying of the connection (only useful if the peer
             supports it).

     ~V      Decrease the verbosity (LogLevel) when errors are being written
             to stderr.

     ~v      Increase the verbosity (LogLevel) when errors are being written
             to stderr.
Aaron Hall
quelle
Ich finde den Abschnitt "Woher wissen wir das?" Nicht besonders hilfreich, da er für mich impliziert, dass es eine offensichtliche Lösung gibt, wenn ich es nicht besonders intuitiv finde, dass ich es tun würde "um herauszufinden, wie die Verbindung getrennt werden kann. Wie hätte ich zum Beispiel "exit" gefunden? Ich bin damit einverstanden, dass es gut ist, die Manpages zu überprüfen, wenn Sie können.
Alexander Pritchard
@AlexanderPritchard Ich habe meine Antwort aktualisiert, um genauer zu erklären, was wir hier tun. Wenn Sie Schwierigkeiten haben, die Manpage zu verstehen, reichen Sie ein Problem beim Betreuer ein oder senden Sie noch besser eine Pull-Anfrage mit einer (uneingeschränkt guten) Verbesserung.
Aaron Hall
1
Das hört sich theoretisch gut an, aber in der Praxis haben viele Menschen Mühe, herauszufinden, wie sie mit diesen Befehlen umgehen können, denn selbst wenn sie wissen, wie sie nach den gewünschten Informationen suchen sollen, wird davon ausgegangen, dass sie keinen Kontext haben. Das Einreichen eines Problems bei Betreuern und das Einreichen von Pull-Anfragen mit Verbesserungen geht noch weiter. Ich behaupte nicht, dass Manpages nützlich sind, aber wenn sie so nützlich wären, wie es scheint, würde ich Stack Exchange nicht verwenden. Ich möchte klarstellen, dass Ihre Antwort in Ordnung ist und dass die Leute die Manpages überprüfen sollten, aber sie sind nicht allumfassend nützlich.
Alexander Pritchard
6
"Wenn sie so nützlich wären, wie manche es scheinen, würde ich Stack Exchange nicht verwenden." Ich stimme zu, und deshalb versuche ich, gute Antworten zu schreiben. Das Zitieren und Zitieren von Referenzquellen soll nicht dazu führen, dass sich jemand dumm oder schlecht fühlt, wenn er nicht bereits aus dieser Quelle gelesen hat. Es wird lediglich versucht, weitere Beweise für eine möglicherweise nachweisbare Behauptung der Tatsachen zu liefern und den Benutzer darüber zu informieren, wo mehr relevante Informationen können gespeichert werden. Sie möchten wissen, dass Sie semantisch das Richtige tun und dass es funktioniert.
Aaron Hall
278

Kurze Antwort: Typ exit

Wenn das aber nicht geht ...

SSH-Escape-Zeichen und Trennsequenz

Die meisten SSH-Implementierungen implementieren ein Escapezeichen für interaktive Sitzungen, ähnlich der Ctrl-]Kombination von Telnet . Das Standard-SSH-Escapezeichen wird ~am Anfang einer Zeile eingegeben.

Wenn Sie eine interaktive OpenSSH-Sitzung beenden möchten, die blockiert ist und nicht durch Eingeben exitoder Betreten CtrlDeiner Shell auf der Remote-Seite beendet werden kann, können Sie ~einen Punkt gefolgt von einem Punkt eingeben .. Um das Escape-Zeichen am Anfang einer Eingabezeile einzugeben, müssen Sie zuerst die Eingabetaste drücken. Die folgende Sequenz beendet in den meisten Fällen eine SSH-Sitzung:

Enter~.

Andere Escape-Sequenzen

OpenSSH bietet beispielsweise noch andere Escape-Sequenzen an ~.. Wenn Sie ~?während einer Sitzung teilnehmen, sollten Sie eine Liste erhalten. Einige Beispiele:

  • ~wird Ctrl-Zdie Sitzung unterbrochen,
  • ~& stellt es direkt in den Hintergrund,
  • ~# Gibt eine Liste der weitergeleiteten Verbindungen in dieser Sitzung aus.
  • Wenn Sie eine Tilde am Anfang einer Zeile einfach eingeben möchten, müssen Sie es verdoppeln: ~~.

Das Escape-Zeichen kann mit der Befehlszeilenoption geändert werden -e. Wenn Sie den speziellen Wert festlegen -e none, wird die Escape-Funktion deaktiviert und die Sitzung ist vollständig transparent.

Siehe auch die OpenBSD-Manpage auf ssh (auf die von www.openssh.org verwiesen wird ) unter der -eKommandozeilenoption

Dubu
quelle
2
Warum machen Sie es einfach, wenn Sie es unnötig kompliziert haben können?
MariusMatutiae
7
@MariusMatutiae Das OP hat nach einem Fall gefragt, in dem keine Remote-Shell eingegeben werden kann exitoder Ctrl-D, sondern nur ein Abhörvorgang. Ich habe klargestellt, dass meine Lösung für eine Sitzung geeignet ist, die feststeckt und nicht beendet werden kann . Ich habe versucht, dies näher zu erläutern, hoffe, es ist jetzt einfacher zu sehen.
Dubu
5
Ich war skeptisch, aber ~.ohne Leerzeichen war genau das, was ich brauchte, danke! :)
Jamey
2
Im schweizerischen Tastaturlayout wird die Tilde durch Drücken von AltGr + ^ erzeugt (plus es ist eine Sperrtaste). Aus diesem Grund scheint die Escape-Sequenz nicht zu funktionieren. Weiß jemand, wie man die Standardflucht in Schweizerdeutsch schreibt?
Daniel Alder
4
@Dobu Den Grund gefunden, warum es vorher nicht funktioniert hat. Wenn Sie bereits ~ in dieselbe Zeile eingegeben haben (was beim Testen leicht vorkommt), lautet das folgende ~. Sequenzen werden ignoriert. Musste zuerst die Eingabetaste drücken ...
Daniel Alder
32

Möchten Sie die SSH-Shell beenden?

Sie können eingeben exitund drücken Enteroder Ctrl+ verwendenD

Jeroen Vermeulen - MageHost
quelle
1
"exit" hat mir geholfen, da ctrl + d im VNC-Viewer nicht funktioniert hat ... danke
raj gupta
1
Dies funktioniert nicht in Fällen, in denen der Computer eingefroren ist oder verschwunden ist oder die Anwendung auf keine Eingaben reagiert
Daniel Alder,
11

Geben Sie einfach exitoder ein logout(drücken Sie dann natürlich die Eingabetaste), beide funktionieren.

octa
quelle
4

Dies sind die unterstützten Zeichen, die verschiedene Optionen bieten, mit denen Sie mit ssh herumspielen können.

Unterstützte Escape-Sequenzen:

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

(Beachten Sie, dass Escape-Zeichen erst unmittelbar nach einer neuen Zeile erkannt werden.) Sie können die Liste der Escape-Zeichenfolgen schließen, indem Sie auf klicken Enter.

0_o
quelle
3

Sie können logoutin die Konsolenzeile schreiben (und Enternatürlich treffen ).

Etienne
quelle
1

MacOS : Wenn SSH hängt, verwenden Sie folgende Reihenfolge:

ENTER 
SHIFT+`
.

Wo: shift + ` erzeugt ~ (Tilde)

Kamil Kiełczewski
quelle