Вопрос: Как я могу вырваться из ssh, когда он блокируется?


Я часто сажу в свою коробку дома из школы, но обычно, когда я меняю классы и мой компьютер приостанавливается, труба будет сломана. Однако ssh просто блокируется - Ctrl+с, Ctrl+Z а также Ctrl+d не имеют никакого эффекта.

Досадно, что нужно перезапустить мой терминал и еще более раздражать, чтобы закрыть и заново создать новое окно экрана.

Итак, мой вопрос: есть ли простой способ заставить ssh умереть правильно (т. Е. Когда труба не работает «нормально», он выйдет с сообщением о сломанной трубе)? Или мне нужно выяснить, что такое PID и вручную убить?


340
2018-03-11 16:22


Источник


Если я отключился с активным сеансом SSH, он зависает. Я просто убиваю его и начинаю новый сеанс. Никакая информация не теряется, потому что я использую экран GNU. - Lekensteyn
Я тоже - экран лучший. Но все равно досадно, что нужно screen -x :П - Wayne Werner
[mosh] (mosh.mit.edu) является опрятной альтернативой, чтобы избежать этой проблемы. Он «остается подключенным» даже при прерывистом подключении к Интернету. - jaynp
@jaynp Недостаток меня с использованием mosh (так как две минуты назад) заключается в том, что я не знаю, как его отключить. Я использую сеанс tmux + irssi на удаленном хосте (как IRC-вышибала, вроде), и иногда я хочу отключиться (сохраняя при этом работу tmux + irssi), и я сделал это с помощью <enter> + ~ +. используя SSH, но не будет работать с помощью mosh. - Pavel Šimerda


Ответы:


Нормальные клавиши пересылаются по ssh сессии, поэтому никто из них не будет работать. Вместо этого используйте escape-последовательности. Чтобы убить текущий сеанс, нажмите Введите ↵, ~, ,,

Более того, эти escape-последовательности можно Введите ↵, ~, ?:

Supported escape sequences:
  ~.  - 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
(Note that escapes are only recognized immediately after newline.)

Вы можете закрыть список эпизодов Escape, нажав войти,

Обратите внимание, что поскольку удар ~~ причины ssh для отправки ~ вместо перехвата, вы можете обратиться N вложенными ssh соединения путем удара ~  N раз. (Это относится только к ~которые непосредственно следуют войти.) То есть войти~~~~~, завершает ssh сеанс 5 слоев глубоко и сохраняет остальные 4 неповрежденными.


471
2018-03-11 17:18



Для раскладки клавиатуры, где ~ это мертвая клавиша, последовательность клавиш Enter  ~  Space  ., - Søren Løvborg
Я добавленной которые могут быть полезны. :) - gertvdijk
Обратите внимание, что вам нужно раскомментировать строку EscapeChar ~ в /etc/ssh/ssh_config (или ~/.ssh/ssh_config Если вы предпочитаете). - Aditya M P
@Hitechcomputergeek Enter  ~  ~  . поскольку ~  ~ отправляет литерал ~ через ваш сеанс SSH второй сеанс SSH получит его как одну тильду и будет интерпретировать . как часть побега. Чтобы отправить 5-ю вложенную сессию ssh, просто используйте 5 тильд в вашей escape-последовательности. - Score_Under
изменение жизни;) - artm


Вы также можете настроить уровень приложения Keep-alives для SSH не допустить это от замораживания от проблем с подключением. мой ~/.ssh/config содержит следующее:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

Это заставляет ssh-клиент отправлять на уровне приложений каждые 15 секунд. Всякий раз, когда три из них прерываются последовательно (по умолчанию ServerAliveCountMax), клиент считает соединение подвесным и закрывает его.

Против другого варианта TCPKeepAlive, это проверяется в зашифрованном канале и не подделывается.


Отмечается, что эти сторонники также помогают, давно на холостом ходу живые соединения, т. е. не позволяют полузамкнутый tcp сеансы висят на несколько часов нетронутыми.

Я настоятельно рекомендую включить эту функцию, если вы сталкиваетесь с этим регулярно, но вы также должны знать о небольшом угрозе безопасности, который она может наложить. атака с открытым текстом может стать проще, если злоумышленник знает интервал и содержимое простоя. Это может быть причиной того, почему он не включен по умолчанию.


51
2018-03-11 18:51



Причины безопасности. Вы можете пойти выпить и оставить ssh sessio открытым, и ваш партнер по лабораторным вопросам, с которым вы работали в течение последних 20 лет, может использовать вашу сессию, чтобы захватить сервер и уничтожить его ... пока вы пили в своем 10-минутном перерыве. - Luis Alvarado♦
@CYREX, а? И как можно отключить по умолчанию вариант, препятствовать вам иметь несправедливые партнеры лаборатории? %) - ulidtko
@ulidtko: Есть ли причина не устанавливать ServerAliveInterval 1, так что потерянное соединение обнаруживается немедленно? - krlmlr
Я улучшил должность с моими знаниями об этом вместе с другими «исправлениями». Я думаю, что это не  ответьте на вопрос, поскольку это скорее предотвращение, а не исправление уже сломанного. - gertvdijk
@gertvdijk: Спасибо. Для меня это работает даже без Host линия. Кроме того, «Современные шифры, такие как Advanced Encryption Standard, в настоящее время не чувствительны к атакам известного типа». (из добавленной вами ссылки) ... - krlmlr


Как отмечалось в ответе гейкозавра, управляющая последовательность ~. прекратит соединение.

Полный список управляющих последовательностей и то, что они делают, можно отобразить, набрав ~?:

Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

39
2018-03-15 06:39



Как закрыть список управляющих последовательностей? - kristianp
Вы не хотите, после того, как он распечатает список escape-последовательностей, он готов принять следующий. - Tejas Kale