Frage Wie beende ich eine SSH-Verbindung?


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 ist und ich die Nachricht schreibe und abschicke, kann ich den Textmodus nicht verlassen. Ich darf nur mehr Text eingeben und das war's.

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


183
2017-08-28 14:29


Ursprung




Antworten:


Wie beende ich eine SSH-Verbindung?

Zwei Wege:

  • Schließen der Shell-Sitzung, z.B. mit exit gefolgt von Eingeben, oder Strg-d Normalerweise können Sie die ssh Sitzung normalerweise,
  • Falls Sie eine schlechte Verbindung haben und die Shell nicht reagiert, drücken Sie die Taste Eingeben Schlüssel, dann tippen ~. und ssh sollte sofort schließen und Sie zu Ihrer Eingabeaufforderung zurückkehren.

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

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

$ man ssh

gibt uns die SSH-Dokumentation, die den folgenden Abschnitt über 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.

63
2017-09-16 21:57



Ich finde den Abschnitt "Wie kann man das wissen?" Nicht besonders hilfreich, weil es für mich bedeutet, dass es eine naheliegende Lösung gibt, wenn ich es nicht besonders intuitiv finde, dass ich "Mann ssh "um zu finden, wie man die Verbindung trennt. Wie hätte ich zum Beispiel "exit" gefunden? Ich stimme zu, dass es gut ist, die Manpages zu überprüfen, wenn es geht. - Alexander Pritchard
@AlexanderPritchard Ich habe meine Antwort aktualisiert, um genauer zu erklären, was wir hier machen. Wenn Sie die Manpage schwer zu verstehen finden, reichen Sie ein Problem mit dem Betreuer ein, oder noch besser, reichen Sie eine Pull-Anfrage mit einer (unqualifizierend guten) Verbesserung ein. - Aaron Hall
Das hört sich in der Theorie gut an, aber in der Praxis haben viele Leute Schwierigkeiten, herauszufinden, wie sie diese Befehle steuern sollen, denn selbst wenn man weiß, wie man nach den gewünschten Informationen sucht, nimmt er an, dass Kontextmenschen es nicht haben. Das Einreichen eines Problems mit Betreuern und das Einreichen von Pull-Requests mit Verbesserungen geht noch darüber hinaus. Ich argumentiere nicht, dass Man-Pages nützlich sind, aber wenn sie genauso nützlich wären, wie einige sie erscheinen lassen, würde ich Stack-Exchange nicht verwenden. Ich möchte klar sein. Ich denke, deine Antwort ist in Ordnung, und die Leute sollten die Man-Pages überprüfen, aber sie sind nicht allumfassend nützlich. - Alexander Pritchard
"Wenn sie genauso nützlich wären, wie einige sie erscheinen lassen, würde ich Stack Exchange nicht verwenden." Ich stimme zu, und deshalb versuche ich, gute Antworten zu schreiben. Referenzquellen zu zitieren und zu zitieren ist nicht, jemanden dazu zu bringen, sich dumm oder schlecht zu fühlen, weil er nicht bereits von dieser Quelle gelesen hat, sondern um weitere Beweise für eine möglicherweise nachweisbare Tatsachenbehauptung zu liefern und den Benutzer darüber zu informieren relevante Informationen können gespeichert werden. Sie möchten wissen, dass Sie semantisch das Richtige tun und wissen, dass es funktioniert. - Aaron Hall


Kurze Antwort: Geben Sie ein exit

Wenn das aber nicht funktioniert ...

SSH-Escape-Zeichen und Trennsequenz

Die meisten SSH-Implementierungen implementieren ein Escape-Zeichen für interaktive Sitzungen, ähnlich wie bei Telnet Ctrl-] Kombination. Das Standard-SSH-Escape-Zeichen ist ~, am Anfang einer Zeile eingegeben.

Wenn Sie eine interaktive OpenSSH-Sitzung beenden möchten welches festsitzt und nicht durch Betreten verlassen werden kann exit oder StrgD in eine Shell auf der entfernten Seite, Sie können eintreten ~ gefolgt von einem Punkt .. Um das Escape-Zeichen am Anfang einer Eingabezeile einzugeben, müssen Sie zuerst die Eingabetaste drücken. Die folgende Sequenz beendet daher in den meisten Fällen eine SSH-Sitzung:

Eingeben~.

Andere Escape-Sequenzen

OpenSSH bietet zum Beispiel andere Escape-Sequenzen ~.. Eingabe ~? während einer Sitzung sollte Ihnen eine Liste geben. Einige Beispiele:

  • ~ gefolgt Ctrl-Z unterbricht die Sitzung,
  • ~& stellt es direkt in den Hintergrund,
  • ~# Gibt eine Liste der weitergeleiteten Verbindungen in dieser Sitzung an.
  • Wenn Sie einfach eine Tilde am Anfang einer Zeile eingeben möchten, müssen Sie sie verdoppeln: ~~.

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

Siehe auch die OpenBSD man-Seite auf ssh (auf das verwiesen wird von www.openssh.org) unter dem -e Befehlszeilenoption


254
2017-07-17 09:26



Warum machen Sie es einfach, wenn Sie es unnötig kompliziert haben können? - MariusMatutiae
@MariusMatutiae Das OP hat nach einem Fall gefragt, in dem es keine entfernte Shell gab exit oder Ctrl-D, aber nur ein Hörprozess. Ich habe klar gesagt, dass meine Lösung für eine Sitzung geeignet ist das ist fest und kann nicht verlassen werden. Ich habe versucht, dies noch deutlicher zu machen, hoffe, es ist jetzt leichter zu sehen. - Dubu
Ich war skeptisch, aber ~. ohne Leerzeichen war genau das, was ich brauchte, danke! :) - Jamey
Im Schweizerdeutschen Tastaturlayout wird Tilde durch Drücken von AltGr + ^ generiert (plus eine Sperrtaste). Aus diesem Grund scheint es, dass die Escape-Sequenz nicht funktioniert. Weiß jemand, wie man die Standard-Flucht in Schweizerdeutsch eintippt? - Daniel Alder
@Dobu Fand den Grund, warum es vorher nicht funktioniert hat. Wenn Sie bereits in derselben Zeile ~ eingegeben haben (was beim Testen leicht passieren kann), folgt folgendes ~. Sequenzen werden ignoriert. Musste zuerst zurück drücken ... - Daniel Alder


Möchten Sie die SSH-Shell beenden?

Du kannst Tippen exit und hit Eingebenoder verwenden Strg+D 


33
2017-08-28 18:37



"exit" hat mir als ctrl + d im VNC-Viewer nicht geholfen ... danke - raj gupta
Dies funktioniert nicht in Fällen, in denen das Gerät eingefroren oder verschwunden ist oder die Anwendung auf Eingaben nicht reagiert - Daniel Alder


Schreib einfach exit oder logout (dann Enter drücken) beide funktionieren.


11
2018-04-14 15:00





Du kannst schreiben logout in der Konsolenlinie (und drücken Sie Eingeben Na sicher).


4
2017-07-17 07:12





Ich sehe, dass die Frage ausreichend beantwortet ist, aber ich möchte hinzufügen, dass ich sehe, dass Sie sich über ssh auf Port 5566 mit diesem Server verbinden. Ich lese einmal auf Diese Seite die Kommunikation über SSH auf nicht privilegierten Ports (alles über 1023) ist unsicher.

Wenn Sie bei einem System als Nicht-Root-Benutzer angemeldet sind (kein Benutzer 0), können Sie keinen Listen-TCP- oder UDP-Port unter 1024 erstellen. Dies liegt daran, dass Portnummern unter 1024 sogenannte privilegierte Ports sind und nur sein können geöffnet von root oder Prozessen, die als root ausgeführt werden. Wenn zum Beispiel Ihr Webserver (Apache, Nginx usw.) gestartet wird, geschieht dies als privilegierter Root-Benutzer, um eine abhörende Verbindung zu Port 80 (der Port, der standardmäßig für HTTP-Datenverkehr verwendet wird) zu öffnen. Jetzt, sobald der Port geöffnet ist und alles, was als root erledigt werden muss, wird der Webserver auf einen nicht-privilegierten Benutzer (entweder den www-data, apache oder nobody) zurückgreifen. Von diesem Zeitpunkt an, wenn etwas Schlimmes passiert, ist es nur auf die Rechte beschränkt, die dieser Benutzer hat. Nun, zurück zu SSH: Wenn wir SSH an Port 22 starten, wissen wir, dass dies durch root oder einen root-Prozess geschieht, da kein anderer Benutzer diesen Port öffnen kann. Was passiert aber, wenn wir SSH nach Port 2222 verschieben? Dieser Port kann ohne ein privilegiertes Konto geöffnet werden, was bedeutet, dass ich ein einfaches Skript schreiben kann, das auf Port 2222 hört und SSH imitiert, um Ihre Passwörter zu erfassen. 

Wenn ich also den Port selbst ändere, verwende ich immer einen Port unter 1024, der nicht schon von anderer Standardsoftware benutzt wird. Da gibt es eine gute Liste Wikipedia dafür.

Der Autor des Artikels glaubt auch, dass das Ändern des SSH-Ports aus Kompatibilitätsgründen nicht durchgeführt werden sollte.

Ein weiteres Problem: Viele Unternehmen haben ein- und ausgehende Firewalls, was bedeutet, dass Sie nicht zu irgendeinem beliebigen Port zu irgendeiner Site gehen können und erwarten, dass es funktioniert. Einige sichere Ports, wie Port 22, sind davon häufig ausgenommen, während andere Ports wie Port 25 oder 110 blockiert sind.

Ich persönlich denke, dass es Anwendungsfälle gibt, in denen es nützlich ist. Wenn Sie oder eine kleine Gruppe von Personen zum Beispiel die einzige Verbindung zum Server über SSH herstellen, protokollieren Sie automatisierte Brute-Force-Angriffe, und Sie möchten das Protokoll sauber halten.


4
2017-07-19 06:59



Sicher ... Es ist viel Text und ich wollte nicht spammen. :) Aber du bist Argument ist ein guter. - Ogier Schelvis
Aus meiner Erfahrung ist das, was Sie hier schreiben, teilweise richtig, aber ja, jeder sollte diese Fakten über reservierte Häfen berücksichtigen, jedenfalls war das hier nicht das Problem. Danke für deine Antwort! - Andreea
Wenn es einen Teil gibt, der nicht stimmt, bin ich neugierig was es ist. - Ogier Schelvis
Ich gebe Ihnen nur die erste: Sie sollten keinen Port unter 1024 verwenden; Die Liste der verwendeten Ports beginnt bei Null. Es wird empfohlen, Ports über 63737 zu verwenden. Aber Sie sollten die Tatsache berücksichtigen, dass, wenn Sie nicht auf Ihrem Server installiert haben, zum Beispiel, Polipo, das den Port 8123 verwendet, es akzeptabel ist, es zu verwenden, bis polipo installiert ist dann erinnert sich niemand daran, den Port zu wechseln: P) - Andreea
Hier ist was falsch sein kann: Die beschriebene Sorge ist jemand, der einen lokalen Angriff durchführt. Hoffentlich sind Admins, die auf wichtigen Infrastrukturgeräten angemeldet sind, vertrauenswürdig. Es gibt viel mehr Ports über 1024 als unten. Wenn Sie also einen Dienst an einem höheren Port verbergen, kann dies dazu führen, dass Remote-Portscanner, die sich auf die am häufigsten verwendeten Ports konzentrieren, verhindert / verzögert werden. Wenn jemand Ihre höheren Ports durch einen Port scannt, kann ein IDS eine Warnung auslösen (und möglicherweise IPS-Techniken bereitstellen). Begrenzung auf <1024 beschränkt deine Verteidiger (vertrauenswürdige lokale Admins) und schränkt Dinge für den wahrscheinlichen und weniger vertrauenswürdigen Angriffsvektor ein: remote - TOOGAM


Dies sind die unterstützten Zeichen, die verschiedene Optionen bieten, mit denen Sie mit ssh spielen 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 Escapes nur unmittelbar nach einem Zeilenumbruch erkannt werden.) Sie können die Liste der Escape-Sequenzen schließen, indem Sie auf klicken Eingeben.


3
2018-06-14 22:26





Mac OS: Wenn ssh hängt, benutze folgende Sequenz:

ENTER 
SHIFT+`
.

woher: shift + `  produziert ~ (Tilde-Zeichen)


1
2018-03-29 17:25