Вопрос Способ избежать тайм-аута соединения ssh и замораживания терминала GNOME


Когда я подключаюсь через ssh к определенным серверам, он тайм-ауты и «замораживает» терминал (не принимает вход, не отключается, не может Ctrl-C, чтобы убить процесс ssh или что-то еще).

Это в Ubuntu's gnome-terminal хотя он, кажется, приостанавливает ввод / вывод терминала и не влияет на работу самого программного обеспечения терминала GNOME. Так что меньше ошибок с gnome-terminal чем раздражающая несогласованность с ssh.

Итак, есть ли способ предотвратить / восстановить терминал из ssh-соединений, которые были отключены?


217
2018-01-20 23:33


происхождения


Возможный дубликат Как надежно сохранить SSH-туннель открытым? - Murmel


ответы:


sshd (сервер) закрывает соединение, если какое-либо время он ничего не слышит от клиента. Вы можете сообщить своему клиенту, чтобы время от времени посылать сигнал о статусе на сервер.

Конфигурация для этого находится в файле ~/.ssh/config, Чтобы отправить сигнал каждые четыре минуты на remotehost, поставьте следующее в своем ~/.ssh/config,

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

Это то, что я имею в своем ~/.ssh/config,

Чтобы включить его для всех хостов, используйте:

Host *
  ServerAliveInterval 240

Также не забудьте запустить chmod 600 ~/.ssh/config, потому что файл конфигурации не должен читаться в мире.


244
2018-01-20 23:53



Спасибо sblair за то, что помогли мне в формулировке, это очень ценится. Я изменил «не должен» на «не должен», потому что ssh проверяет права доступа к файлу, и если он читается в мире или группе, он терпит неудачу. - Ludwig Weinzierl
Это не то, что задал ОП. Его не пускают из-за бездействия. Он пытается подключиться, и его терминал замерзает. - Cerin
Где это ~/.ssh/config? - User
@User '~ /' представляет вашу домашнюю папку. '.ssh' - это папка в вашей домашней папке. - wkm
это бесполезно, если ваше соединение фактически теряется ... - so12311


Нажмите Войти, ~, , один за другим, чтобы отключиться от замороженной сессии.

Раздел «ESCAPE CHARACTERS» на странице ssh man объясняет основные сведения.


231
2018-01-20 23:44



Этот ответ мне кажется более точным ответом на вопрос, и в любом случае это был ответ, который я искал. - CoatedMoose
Обратите внимание, что вам нужно раскомментировать строку EscapeChar ~ в /etc/ssh/ssh_config (или ~/.ssh/ssh_config Если вы предпочитаете). - Aditya M P
@adityamenon Нет, EscapeChar ~ уже является встроенным значением по умолчанию. - Peter Eisentraut
@Mark вопрос спрашивает: «Есть ли способ предотвратить восстановление терминала из ssh-соединений которые приурочиваются«Акцент мой. - CoatedMoose
Хотя это было неверно в контексте вопроса, это именно то, что я хотел. - Subin Sebastian


Даже это не прямой ответ на ваш вопрос, это очень связано с вашей проблемой. Вместо того, чтобы пытаться сохранить соединение живым (все соединения в конечном итоге умирают), вы можете использовать терминальные мультиплексоры, например screen а также tmux которые сохраняют сеанс в фоновом режиме, даже если ваш терминал отключен.

По сути, когда вы входите на сервер SSH, вы сразу же запускаете screen который создаст и добавит новый сеанс:

$ screen

Затем вы идете вперед и выполняете свою работу с оболочкой, как обычно. Теперь, если соединение будет удалено, когда вы сможете вернуться в Интернет и снова подключиться к серверу через SSH, вы получите список текущих сеансов с:

$ screen -ls

Чтобы подключиться к сеансу:

$ screen -r <session>

где <session> является идентификатором PID или сеансом. Вы будете снова подключены к своей сессии, и вы сможете продолжить с того места, где вы остановились!

Вы можете даже отсоединить сеанс и снова подключиться из дома, чтобы забрать его с того места, где вы остановились. Чтобы отделить сеанс, который вы используете C-a с последующим C-d (это Control + A а потом Control + D).

Там есть простой онлайн-учебник также.

С помощью screen а также tmux на удаленных серверах считается передовая практика и является настоятельно рекомендуется, Некоторые люди заходят так далеко, screen как их стандартная логина входа, поэтому, когда они подключаются, они сразу же запускают новую screen сессия.


38
2017-07-03 01:28



Другой альтернативой является использование mosh: mosh.mit.edu - Zombies
Это особенно полезно, если вы используете горячую точку или Wi-Fi, которые иногда выпадают. - Randall


Попробовать добавить -o ServerAliveInterval=30 к вашей строке подключения (30 означает 30 секунд и, конечно, можно отрегулировать)


11
2018-02-06 14:13





Вы также можете установить интервал ожидания простоя со стороны сервера SSH:

Файл: /etc/ssh/ssh_config

Содержание:

ClientAliveInterval XX
ClientAliveCountMax YY

Это работает точно так же, как и настройка клиента, но пустые пакеты отправляются с сервера, а не из клиента.

Извлечен из:

http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html


5
2018-02-12 22:45





Для людей, которые хотят помешать клиенту отсрочить время в первую очередь.

Вы можете попытаться установить ConnectTimeout 0 в файле конфигурации. Значение 0 означает, что соединение будет поддерживаться в течение неопределенного периода времени, если оно не закрыто.

ваш файл config (или ssh_config) может выглядеть следующим образом:

Host *
   ConnectTimeout 0

1
2017-12-17 02:19