Jak wyjść z połączenia SSH?

245

Łączę się z serwerem za pośrednictwem protokołu SSH, aby wysłać wiadomość do serwera gniazda za pomocą polecenia takiego jak:

ssh 181.169.1.2-p 5566

Po nawiązaniu połączenia i napisaniu wiadomości i wysłaniu jej nie mogę wyjść z trybu tekstowego. Mogę tylko wprowadzić więcej tekstu i to wszystko.

Czy istnieje polecenie lub kombinacja klawiszy, które pozwalają mi wrócić do trybu poleceń?

Andreea
źródło

Odpowiedzi:

156

Jak wyjść z połączenia SSH?

Dwie drogi:

  • zamknięcie sesji powłoki, np. z exitnastępującą po niej Enter, lub Ctrl- dzwykle pozwala sshnormalnie wyjść z sesji,
  • w przypadku, gdy masz złe połączenie i powłoka nie odpowiada, naciśnij Enterklawisz, a następnie wpisz ~.i ssh powinien natychmiast zamknąć i wrócić do wiersza polecenia.

Pierwsza opcja powinna być intuicyjna, ale skąd znamy tę drugą?

Możemy nauczyć się tych informacji po uważnym przeczytaniu strony podręcznika.

$ man ssh

daje nam dokumentację SSH , która zawiera następującą sekcję dotyczącą znaków specjalnych:

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
źródło
Nie uważam, aby sekcja „skąd wiemy o tym” była szczególnie pomocna, ponieważ dla mnie sugeruje, że istnieje jakieś oczywiste rozwiązanie, gdy nie uważam za szczególnie intuicyjne, że „man ssh ”, aby dowiedzieć się, jak się rozłączyć. Jak na przykład znalazłbym „wyjście”? Zgadzam się, że dobrze jest ponownie sprawdzić strony podręcznika, kiedy możesz.
Alexander Pritchard,
@AlexanderPritchard Zaktualizowałem swoją odpowiedź, aby dokładniej wyjaśnić, co tu robimy. Jeśli uważasz, że strona podręcznika jest trudna do zrozumienia, zgłoś problem do opiekuna, a nawet lepiej, prześlij żądanie ściągnięcia z (niewątpliwie dobrą) poprawą.
Aaron Hall,
1
Brzmi to dobrze w teorii, ale w praktyce wiele osób próbuje wymyślić, jak poruszać się po tych poleceniach, ponieważ nawet wiedząc, jak szukać potrzebnych informacji, zakłada kontekst, którego ludzie nie mają. Zgłaszanie problemu do opiekunów i przesyłanie żądań ściągania z ulepszeniami wykracza nawet poza to. Nie twierdzę, że strony podręcznika są przydatne, ale jeśli byłyby tak definitywnie przydatne, jak się wydaje, niektóre z nich nie korzystałyby ze stosu wymiany. Chcę jasno powiedzieć, że uważam, że twoja odpowiedź jest dobra i że ludzie powinni sprawdzać strony podręcznika, ale nie są one wszechogarniająco przydatne.
Alexander Pritchard,
6
„Gdyby były tak definitywnie przydatne, jak się wydaje, niektórzy nie używalibyśmy Stack Exchange”. Zgadzam się i dlatego staram się pisać dobre odpowiedzi. Powoływanie się i cytowanie źródeł referencyjnych nie ma na celu sprawienia, by nikt nie poczuł się głupi lub zły, że nie przeczytał już tego źródła. Robi się to w celu dostarczenia dalszych dowodów na to, co w innym przypadku byłoby prawdopodobnie możliwym do udowodnienia faktem, a także poinformowania użytkownika, gdzie więcej odpowiednie informacje mogą być przechowywane. Chcesz wiedzieć, że robisz semantycznie poprawną rzecz, a także wiedzieć, że to działa.
Aaron Hall
278

Krótka odpowiedź: typ exit

Jeśli to nie zadziała, jednak ...

SSH Escape Character and Disconnect Sequence

Większość implementacji SSH implementuje znak ucieczki dla sesji interaktywnych, podobnie jak Ctrl-]kombinacja telnet . Domyślny znak zmiany znaczenia SSH to ~, wprowadzony na początku wiersza.

Jeśli chcesz zakończyć interaktywną sesję OpenSSH, która jest zablokowana i nie można jej zakończyć przez wprowadzenie exitlub CtrlDumieszczenie w powłoce po drugiej stronie , możesz wprowadzić ~kropkę .. Aby wprowadzić znak zmiany znaczenia na początku linii wprowadzania, najpierw naciśnij klawisz Enter. Tak więc następująca sekwencja w większości przypadków zakończy sesję SSH:

Enter~.

Inne sekwencje ucieczki

Na przykład OpenSSH oferuje inne sekwencje specjalne ~.. Wejście ~?podczas sesji powinno dać ci listę. Kilka przykładów:

  • ~obserwowane Ctrl-Zzawiesza sesję,
  • ~& umieszcza go bezpośrednio w tle,
  • ~# daje listę przekierowanych połączeń w tej sesji.
  • Jeśli chcesz po prostu wpisać tyldę na początku linii, trzeba go dwukrotnie: ~~.

Znak zmiany znaczenia można zmienić za pomocą opcji wiersza polecenia -e. Jeśli ustawisz wartość specjalną, funkcja -e noneEscape jest wyłączona, a sesja jest w pełni transparentna.

Zobacz także stronę podręcznika OpenBSD na ssh (do której odwołuje się www.openssh.org ) w -eopcji wiersza poleceń

Dubu
źródło
2
Po co ułatwiać, skoro można to bezużytecznie skomplikować?
MariusMatutiae
7
@MariusMatutiae OP poprosił o przypadek, w którym nie było żadnej zdalnej powłoki do wejścia exitlub Ctrl-Dtylko proces nasłuchiwania. Wyraźnie stwierdziłam, że moje rozwiązanie nadaje się na sesję, która utknęła i nie można z niej wyjść . Próbowałem to wyjaśnić bardziej, mam nadzieję, że teraz łatwiej to zobaczyć.
Dubu,
5
Byłem sceptyczny, ale ~.bez spacji było dokładnie to, czego potrzebowałem, dzięki! :)
Jamey
2
W szwajcarskim układzie klawiatury niemieckiej tylda jest generowana przez naciśnięcie AltGr + ^ (plus jest to klawisz blokujący). Z tego powodu wydaje się, że sekwencja ucieczki nie działa. Czy ktoś wie, jak wpisać domyślną ucieczkę w szwajcarskim języku niemieckim?
Daniel Alder,
4
@Dobu Znalazłem powód, dla którego wcześniej nie działał. Jeśli już wpisałeś ~ w tym samym wierszu (co łatwo się zdarza, jeśli testujesz), następujące ~. sekwencje są ignorowane. Musiałem najpierw nacisnąć przycisk powrotu ...
Daniel Alder
32

Czy chcesz wyjść z powłoki SSH?

Możesz pisać exiti naciskać Enterlub używać Ctrl+D

Jeroen Vermeulen - MageHost
źródło
1
„exit” pomogło mi, ponieważ ctrl + d nie działało w przeglądarce VNC ... dzięki
raj gupta
1
Nie działa to w przypadkach, gdy maszyna zawiesiła się lub zniknęła, lub aplikacja nie reaguje na żadne dane wejściowe
Daniel Alder
11

Po prostu wpisz exitlub logout(następnie wciśnij Enter oczywiście) oba będą działać.

octa
źródło
4

Są to obsługiwane postacie, które zapewniają różne opcje, z którymi możesz bawić się za pomocą ssh.

Obsługiwane sekwencje specjalne:

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

(Pamiętaj, że sekwencje specjalne są rozpoznawane tylko natychmiast po nowej linii.) Możesz zamknąć listę sekwencji Escape, naciskając Enter.

0_o
źródło
3

Możesz pisać logoutw linii konsoli (i Enteroczywiście hit ).

Etienne
źródło
1

MacOS : gdy ssh zawiesza się, użyj następującej sekwencji:

ENTER 
SHIFT+`
.

gdzie: shift + ` produkuje ~ (znak tyldy)

Kamil Kiełczewski
źródło