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

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

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

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

385
задан 19 January 2013 в 14:40

3 ответа

Как отмечено в ответе геокозавра, escape-последовательность ~. разорвет соединение.

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

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.)
0
ответ дан 19 January 2013 в 14:40

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

Больше этих escape-последовательностей можно перечислить с помощью Enter ↵ , ~ , ? :

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

You можете закрыть список последовательностей Escape, нажав enter .

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

0
ответ дан 19 January 2013 в 14:40

Можно также хотеть установить сообщения проверки активности прикладного уровня для SSH, чтобы препятствовать тому, чтобы он заморозился по проблемам соединения. Мой ~/.ssh/config содержит это:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

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

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


Отмечается, что те сообщения проверки активности также помогают, uhm, поддерживают долго бездействующие соединения, т.е. препятствуют тому, чтобы Вы имели полузамкнутые сеансы TCP, зависающие в течение нетронутых часов.

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

54
ответ дан 19 January 2013 в 14:40

Другие вопросы по тегам:

Похожие вопросы: