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

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

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

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

217 голосов | спросил Kzqai 21 Jam1000000amThu, 21 Jan 2010 02:33:01 +030010 2010, 02:33:01

6 ответов


244

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

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

  Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240
 

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

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

  Host *
  ServerAliveInterval 240
 

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

ответил Ludwig Weinzierl 21 Jam1000000amThu, 21 Jan 2010 02:53:48 +030010 2010, 02:53:48
231

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

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

ответил Peter Eisentraut 21 Jam1000000amThu, 21 Jan 2010 02:44:01 +030010 2010, 02:44:01
38

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

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

  $ screen
 

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

  $ screen -ls
 

Повторное подключение к сеансу:

  $ screen -r <session>
 

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

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

Существует простой онлайн-учебник .

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

ответил fotos 3 J000000Tuesday12 2012, 05:28:14
11

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

ответил Fergie 6 FebruaryEurope/MoscowbThu, 06 Feb 2014 18:13:27 +0400000000pmThu, 06 Feb 2014 18:13:27 +040014 2014, 18:13:27
5

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

Файл: /etc /ssh /ssh_config

Содержание:

  ClientAliveInterval XX
ClientAliveCountMax YY
 

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

Извлечен из:

http: //www.sysadmit. ком /2016/02 /Linux-у-VMware-SSH-evitar-desconexion.html

ответил Ladinfremes 13 FebruaryEurope/MoscowbSat, 13 Feb 2016 01:45:27 +0300000000amSat, 13 Feb 2016 01:45:27 +030016 2016, 01:45:27
1

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

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

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

  Host *
   ConnectTimeout 0
 
ответил Yohannes Libanos 17 ThuEurope/Moscow2015-12-17T05:19:43+03:00Europe/Moscow12bEurope/MoscowThu, 17 Dec 2015 05:19:43 +0300 2015, 05:19:43

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

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

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