Co mogę zrobić, gdy moja sesja SSH utknęła?

107

Czasami moja sesja ssh w terminalu zawiesza się. Jak mogę zakończyć sesję ssh i ponownie się połączyć?

Kit Sunde
źródło

Odpowiedzi:

191

Wpisz ~.(tj. Tylda, kropka) na początku wiersza. Innymi słowy, naciśnij Enter, a ~następnie .. (W niektórych językach może być konieczne naciśnięcie przycisku Shiftlub, Altaby wprowadzić ~znak.)

Ogólnie rzecz biorąc, ~znak jest znakiem ucieczki w sesji SSH, gdy wpisujesz go na początku wiersza. Wpisz Enternastępnie, ~?aby wyświetlić listę poleceń zmiany znaczenia. Najczęstsze z nich to

  • ~. aby zakończyć połączenie
  • ~^Z(naciśnij ~następnie Ctrl+ Z), aby zawiesić połączenie i wpisać polecenie lokalnie (uruchom polecenie, fgaby powrócić do sesji SSH)

Jeśli chcesz wstawić tyldy na początku wiersza, naciśnij ~dwukrotnie.

Gilles
źródło
7

Aby wyjść z sesji ssh, wystarczy wpisać exitpolecenie.

Spróbuj wpisać Shift+ `+.

daviesgeek
źródło
2
Nie akceptuje już danych wprowadzanych przez użytkownika, jest dosłownie zablokowany. W Ubuntu istnieje kombinacja klawiatury, która kończy sesję, z której możesz skorzystać w takich przypadkach. Po chwili sesja zakończy się stwierdzeniem, broken-pipeale raczej nie czekam.
Kit Sunde
1
@Kit Naprawiłem swoją odpowiedź. Przepraszam za to. Nie zdawałem sobie sprawy, że masz na myśli całkowicie zablokowaną sesję SSH.
daviesgeek
Zwykle czekam, aż upłynie limit czasu. Pomimo tego, że wiem o tych poleceniach, zawsze zapominam, że mogę ich użyć, aby przyspieszyć proces odzyskiwania powłoki. Uwaga: Odpowiedź @Gilles również może wymagać jednokrotnego naciśnięcia klawisza Enter / Return. Aby ~. dowiedzieć się więcej na stronie SSH (nieco ponad w połowie), i wpisując: ~?w aktywnej / połączonej sesji SSH, ponownie możesz mieć nacisnąć Enter wcześniej.
Jason Salaz
7

Jeśli twoja sesja jest zawieszona, a monit przestaje reagować, możesz po prostu zabić instancję terminala, a wszystkie procesy potomne powiązane z tą instancją, której sesją jest ssh, powinny zostać z nią połączone.

Jeśli naprawdę chcesz być dokładny, ale możesz otworzyć nową instancję terminala, poszukaj sesji ssh na liście procesów i zabij je za pomocą wiersza polecenia:

> ps -ef  |grep ssh
501  1332   142   0 20Dec11 ??         0:01.33 /usr/bin/ssh-agent -l
501 57172 57150   0  1:58pm ttys000    0:00.01 grep ssh
501 57139 57133   0  1:57pm ttys002    0:00.03 ssh -i/Users/ian/code/ec2-keys/id_rsa-gsg-keypair [email protected]

> kill 57139

Jeśli to nie działa spróbuj:

> kill -9 57139

Nie zabijaj ssh-agentprocesu.

Możesz też otworzyć Monitor aktywności i wyszukać tam sesje i nacisnąć dla nich przycisk zabicia:

Filtrowanie Monitora aktywności dla sesji ssh

Ian C.
źródło
+1, to właśnie robię. Często tam, gdzie zostawiłem uruchomioną sesję, a następnie albo połączenie zostało przerwane przypadkowo, albo śpię na laptopie, powoduje to, że ssh zawiesza się. Otwieram nową kartę konsoli i zabijam PID procesu ssh (lub zamykam kartę ssh i otwieram nową)
halfer
Czy korzystanie ze skrótu klawiaturowego działa na komputerze Mac bez żmudnego kończenia procesu?
Rafael Bugajewski
1
Użyj ~.. Patrz wyżej.
Snowcrash
0

~. działa, chociaż wygląda na to, że całkowicie utknął, zatrzymuje połączenie ssh i możesz go uruchomić ponownie, ale na klawiaturze muszę nacisnąć Alt + ~, a następnie spację, a następnie.

Hannu
źródło