Що я можу зробити, коли мій сеанс SSH застряг?


109

Іноді мій ssh ​​сеанс у терміналі висить. Як я можу вийти з сеансу ssh і відновити його знову?

Відповіді:


195

Введіть ~.(тобто тильду, період) на початку рядка. Іншими словами, натисніть Enter, потім ~, потім .. (У деяких мовах вам може знадобитися натиснути Shiftабо Altввести ~символ.)

Взагалі кажучи, ~символ є символом втечі в сеансі SSH, коли ви вводите його на початку рядка. Введіть Enterпотім, ~?щоб переглянути список команд втечі. Найпоширеніші з них

  • ~. припинити з'єднання
  • ~^Z(натисніть, ~а потім Ctrl+ Z), щоб призупинити з'єднання та ввести команду локально (запустіть команду, fgщоб повернутися до сеансу SSH)

Якщо ви хочете нахил на початку рядка, натисніть ~двічі.


7

Все, що вам потрібно зробити, щоб вийти з сеансу ssh - це ввести exitв запит.

Спробуйте ввести Shift+ `+.


2
Він більше не приймає введення користувачів, він буквально затримується. У Ubuntu є комбінація клавіатур, яка припиняє сеанс, який ви можете використовувати у таких випадках. Через деякий час сеанс припиняється, broken-pipeале я швидше не чекаю.
Кіт Сунде

1
@Kit Я виправив свою відповідь. Вибач за те. Я не розумів, що ти маєш на увазі повністю зупинений сеанс SSH.
daviesgeek

Зазвичай я просто чекаю, коли його очікує час. Незважаючи на те, що я знаю про ці команди, я завжди забуваю, що можу використовувати їх, щоб прискорити процес повернення моєї оболонки. Зверніть увагу також на відповідь @Gilles, можливо, вам доведеться один раз натиснути Enter / Return, перш ніж ~. ви зможете дізнатися більше на сторінці SSH (трохи більше на півдорозі) та ввівши: ~?в активному / підключеному сеансі SSH. натиснути Enter один раз раніше.
Джейсон Салаз

7

Якщо ваш сеанс вимкнено, а запит більше не реагує, ви можете просто вбити екземпляр Terminal, і всі дочірні процеси, пов’язані з цим екземпляром, з яких ваш сеанс ssh, повинні додаватися разом із ним.

Якщо ви дійсно хочете бути ретельним, хоча ви можете відкрити новий екземпляр Terminal, знайдіть сеанси ssh у списку процесів та вбийте їх за допомогою командного рядка:

> 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

Якщо це не працює, спробуйте:

> kill -9 57139

Не вбивайте ssh-agentпроцес.

Або ви можете відкрити Монітор активності та шукати там сеанси та натиснути кнопку вбити для них:

Фільтрація монітора активності для сеансів ssh


+1, це я і роблю. Часто там, де я залишив сеанс роботи, а потім або з'єднання розривається випадково, або я сплю ноутбук, це призводить до замерзання ssh. Я відкриваю нову вкладку консолі і вбиваю PID процесу ssh (або закриваю вкладку ssh і відкриваю нову)
половинка

Чи працює комбінація клавіш на вашому Mac, не стомлюючи процес вбивства?
Рафаель Бугаєвський

1
Використовуйте ~.. Дивись вище.
Snowcrash

0

~. працює, хоча, схоже, повністю застряг, зупиняє ssh-з'єднання, і ви можете запустити його знову, але на моїй клавіатурі я повинен натиснути клавішу Alt + ~, потім клавіша пробіл і потім.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.