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

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

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

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

ssh
338 голосов | спросил Wayne Werner 11 MarpmFri, 11 Mar 2011 19:22:22 +03002011-03-11T19:22:22+03:0007 2011, 19:22:22

3 ответа


469

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

Больше этих escape-последовательностей можно указать с помощью Enter â † μ , ~ , ? :

Поддерживаемые escape-последовательности:
  ~. - завершить сеанс
  ~ B - отправить BREAK на удаленную систему
  ~ R - запрос запроса (только протокол SSH 2)
  ~ # - список переадресованных соединений
  ~? - это сообщение
  ~~ - отправить escape-символ, введя его дважды
(Обратите внимание, что escape-файлы распознаются сразу после новой строки.)

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

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

ответил geekosaur 11 MarpmFri, 11 Mar 2011 20:18:37 +03002011-03-11T20:18:37+03:0008 2011, 20:18:37
51

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

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

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

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


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

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

ответил ulidtko 11 MarpmFri, 11 Mar 2011 21:51:12 +03002011-03-11T21:51:12+03:0009 2011, 21:51:12
39

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

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

Поддерживаемые escape-последовательности:
  ~. - завершить соединение (и любые мультиплексированные сеансы)
  ~ B - отправить BREAK на удаленную систему
  ~ C - открыть командную строку
  ~ R - запрос запроса (только протокол SSH 2)
  ~ ^ Z - приостановить ssh
  ~ # - список переадресованных соединений
  ~ & Амп; - background ssh (при ожидании завершения соединения)
  ~? - это сообщение
  ~~ - отправить escape-символ, введя его дважды
(Обратите внимание, что escape-файлы распознаются сразу после новой строки.)
ответил scottl 15 MaramTue, 15 Mar 2011 09:39:02 +03002011-03-15T09:39:02+03:0009 2011, 09:39:02

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132