Тайм-аут Linux SSH [закрыто]


10

Я боролся с тайм-аутом системы пар после X минут бездействия и не знал, как это исправить.

У меня есть коробка CentOS в моем офисе. Подключение к SSH не может коснуться его в течение 2 часов, и он все еще жив, когда я что-то запускаю.

Тем не менее, подключитесь к той же коробке дома, и через несколько секунд будет время ожидания, иногда через пару минут.

Я бы подумал, что это мое интернет-соединение, однако, если я активно использую коробку, она останется на связи.

Однако, если я перестану набирать в Google что-то, он покажет отключенное сообщение, и мне придется переподключиться.

Что-нибудь, что я могу проверить, чтобы видеть то, что продолжается?


4
Документация для вашего (неназванного) клиента.
user9517

Ответы:


14

Первое, на что вы должны обратить внимание, это установить ServerAliveInterval. Это должно быть установлено на вашей рабочей станции.

На клиентах Linux или OSX вы можете создать файл конфигурации для вашего пользователя в ~ / .ssh / config на вашей рабочей станции. Добавьте следующую директиву. В моем случае я хочу, чтобы это влияло на все хосты, поэтому я помещаю его в Host *.

Host *
    ServerAliveInterval 60

Это будет отправлять команду noop каждые 60 секунд, чтобы сохранить соединение открытым. Вы можете настроить значение в соответствии с вашими потребностями.

На стороне сервера убедитесь, что для TCPKeepAlive установлено значение yes.

grep TCPKeepAlive /etc/ssh/sshd_config
TCPKeepAlive yes

Если вы используете Windows, вам нужно будет обратиться к документации для вашего клиента.


11

Linux не выдерживает простоя SSH-соединений. Вы можете оставить SSH-соединение открытым на неопределенное время, и до тех пор, пока ни одна из конечных точек не будет перезагружена или не получит новый IP-адрес, соединение все равно будет работать при обращении к нему после длительного простоя.

Однако, если есть какие-либо промежуточные блоки с состоянием (NAT, межсетевой экран и т. Д.), Они могут превышать время ожидания незанятых соединений. В результате этого, несмотря на то, что соединение на обоих концах активно, две конечные точки больше не могут обмениваться данными, поскольку промежуточный ящик отказывается пересылать какие-либо пакеты, пока клиент SSH не установит новое соединение.

Если вы знаете , тайм - аут middlebox, вы можете обойти эту проблему путем настройки ClientAliveIntervalв /etc/ssh/sshd_configна сервере или ServerAliveIntervalв ~/.ssh/configна клиенте. Для оптимального обнаружения разорванных соединений рекомендуется включить обе настройки. Это также обнаружит разрыв соединений, когда либо конечная точка была перезагружена, либо получила новый IP-адрес.

Поскольку вы указываете, что время ожидания иногда составляет всего несколько секунд, этого может оказаться недостаточно для решения вашей проблемы. Очень малое кажущееся время ожидания может быть вызвано перегруженным или неправильно настроенным CGN. Вам необходимо проверить трафик в различных точках канала связи, чтобы выяснить, отвечает ли CGN за сбои.

Если окажется, что сбои вызваны тем, что ваш провайдер делает что-то глупое, например соединения с балансировкой нагрузки через несколько CGN, которые не разделяют состояние соединения, вы не можете решить проблему самостоятельно, просто настроив свою конфигурацию SSH.

Если вы застряли с интернет-провайдером с ненадежным CGN, который они отказываются исправить, единственные оставшиеся варианты, которые я знаю, это либо обновить клиентскую и серверную версии до версий ядра с поддержкой MPTCP, либо использовать туннельное решение, разработанное для поддержки спонтанных изменения в отображениях портов на NAT.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.