Я часто захожу в свой ящик дома из школы, но обычно, когда я меняю классы и мой компьютер зависает, труба нарушается. Однако ssh просто блокируется - Ctrl kbd> + c kbd>, Ctrl kbd> + z kbd> и Ctrl kbd > + d kbd> не имеют никакого эффекта.
Раздражает необходимость перезапускать мой терминал, и еще более раздражает, когда приходится закрывать и заново создавать новое окно экрана.
Итак, мой вопрос, есть ли простой способ заставить ssh умереть должным образом (то есть, когда канал не работает "нормально", он выходит с сообщением о сломанном канале)? Или мне нужно выяснить, что такое PID, и вручную убить его?
Как отмечено в ответе геокозавра, 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.)
Обычные ключи пересылаются в течение сеанса ssh
, поэтому ни одна из них не будет работать. Вместо этого используйте escape-последовательности. Чтобы убить текущий сеанс, нажмите Enter ↵ kbd>, ~ kbd>, . Kbd>.
Больше этих escape-последовательностей можно перечислить с помощью Enter ↵ kbd>, ~ kbd>, ? Kbd>:
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 kbd>.
Обратите внимание, что поскольку нажатие ~ kbd> ~ kbd> заставляет ssh
отправить ~
вместо его перехвата, вы можете обратиться к N вложенному [ 114] соединений, нажав ~ kbd> N раз. (Это относится только к ~ kbd>, которые непосредственно следуют за enter kbd>.) То есть enter kbd> ~ kbd> < kbd> ~ kbd> ~ kbd> ~ kbd> ~ kbd> . kbd> завершает ssh
сеанс глубиной в 5 уровней и сохраняет остальные 4 целы.
Можно также хотеть установить сообщения проверки активности прикладного уровня для SSH, чтобы препятствовать тому, чтобы он заморозился по проблемам соединения. Мой ~/.ssh/config
содержит это:
Host *
ServerAliveInterval 15
# ServerAliveCountMax 3
Это заставляет ssh клиент отправлять сообщения проверки активности прикладного уровня каждые 15 секунд. Каждый раз, когда три из них перестали работать последовательно (значение по умолчанию ServerAliveCountMax
), клиент рассматривает соединение, как подвешено и закрывает его.
Настроенный против другой опции TCPKeepAlive
, это проверяется в зашифрованном канале и не spoofable.
Отмечается, что те сообщения проверки активности также помогают, uhm, поддерживают долго бездействующие соединения, т.е. препятствуют тому, чтобы Вы имели полузамкнутые сеансы TCP, зависающие в течение нетронутых часов.
Я настоятельно рекомендую включение этой функции, если Вы регулярно сталкиваетесь с этим, но необходимо также знать о небольшой угрозе безопасности, которую это может наложить. Нападение известного простого текста могло бы стать легче, если взломщик знает интервал и контент неактивного соединения. Это могло бы быть причинами того, почему это не включено по умолчанию.