Linux не выдерживает простоя SSH-соединений. Вы можете оставить SSH-соединение открытым на неопределенное время, и до тех пор, пока ни одна из конечных точек не будет перезагружена или не получит новый IP-адрес, соединение все равно будет работать при обращении к нему после длительного простоя.
Однако, если есть какие-либо промежуточные блоки с состоянием (NAT, межсетевой экран и т. Д.), Они могут превышать время ожидания незанятых соединений. В результате этого, несмотря на то, что соединение на обоих концах активно, две конечные точки больше не могут обмениваться данными, поскольку промежуточный ящик отказывается пересылать какие-либо пакеты, пока клиент SSH не установит новое соединение.
Если вы знаете , тайм - аут middlebox, вы можете обойти эту проблему путем настройки ClientAliveInterval
в /etc/ssh/sshd_config
на сервере или ServerAliveInterval
в ~/.ssh/config
на клиенте. Для оптимального обнаружения разорванных соединений рекомендуется включить обе настройки. Это также обнаружит разрыв соединений, когда либо конечная точка была перезагружена, либо получила новый IP-адрес.
Поскольку вы указываете, что время ожидания иногда составляет всего несколько секунд, этого может оказаться недостаточно для решения вашей проблемы. Очень малое кажущееся время ожидания может быть вызвано перегруженным или неправильно настроенным CGN. Вам необходимо проверить трафик в различных точках канала связи, чтобы выяснить, отвечает ли CGN за сбои.
Если окажется, что сбои вызваны тем, что ваш провайдер делает что-то глупое, например соединения с балансировкой нагрузки через несколько CGN, которые не разделяют состояние соединения, вы не можете решить проблему самостоятельно, просто настроив свою конфигурацию SSH.
Если вы застряли с интернет-провайдером с ненадежным CGN, который они отказываются исправить, единственные оставшиеся варианты, которые я знаю, это либо обновить клиентскую и серверную версии до версий ядра с поддержкой MPTCP, либо использовать туннельное решение, разработанное для поддержки спонтанных изменения в отображениях портов на NAT.