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ć?

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.


7

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

Spróbuj wpisać Shift+ `+.


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 someuser@someinstance.amazonaws.com

> 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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.