it-swarm-ru.tech

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

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

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

Итак, есть ли способ предотвратить/восстановить терминал по ssh-соединениям, для которых истекло время ожидания?

229
Kzqai

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

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

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

Это то, что у меня есть в моем ~/.ssh/config.

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

Host *
  ServerAliveInterval 240

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

254
Ludwig Weinzierl

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

Раздел "ESCAPE CHARACTERS" на странице руководства ssh объясняет основные детали.

243
Peter Eisentraut

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

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

$ screen

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

$ screen -ls

Чтобы присоединить к сеансу:

$ screen -r <session>

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

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

Существует также простое онлайн-руководство .

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

37
fotos

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

11
Fergie

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

Файл: /etc/ssh/ssh_config

Содержание:

ClientAliveInterval XX
ClientAliveCountMax YY

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

Извлеченный из:

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

5
Ladinfremes

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

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

ваш файл конфигурации (или ssh_config) может выглядеть так:

Host *
   ConnectTimeout 0
1
Yohannes Libanos