#Что происходит и когда это важно
Пока пользователь печатает команды, SSH работает, но после нескольких минут/часов бездействия возникает Broken pipe, Connection reset или timeout. Это не относится к нестабильной сети во время активной передачи.
#Возможные причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| NAT забывает соединениеРоутер удаляет неактивную TCP-сессию. | Обрыв наступает при схожем времени простоя. | Проверить умеренный ServerAliveInterval. |
| Сервер завершает бездействующие сеансыНа сервере задана политика ClientAlive или оболочки. | В журнале sshd есть timed out/disconnected. | Согласовать правила сервера с администратором. |
| Обрывается физическая сеть или VPNПотеря интерфейса совпадает с переключением Wi-Fi/сна. | Активные передачи тоже прерываются. | Диагностировать интерфейс и VPN отдельно. |
#Пошаговая диагностика и исправление
- Измерьте, когда соединение прерываетсяОткройте терминал и подключитесь обычным SSH. Запишите, через сколько минут без команд возникает обрыв, повторите при активном использовании. Если сеанс рвётся во время активности, тайм-аут простоя не главная гипотеза.
- Проверьте, нет ли сна устройстваУбедитесь, что локальный ноутбук не уходит в сон и VPN не отключается при блокировке экрана. Сначала проверьте настройки энергосбережения штатным способом; без причины не меняйте системные службы.
- Протестируйте keepalive только на клиентеНа локальном компьютере выполните
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 пользователь@серверс реальными данными. Каждые 60 секунд клиент отправляет зашифрованный запрос; после трёх отсутствующих ответов соединение завершается. Это диагностический, а не гарантированный обход корпоративной политики. - Сравните без новой настройки сервераОставьте тестовый сеанс в простое дольше обычного времени обрыва. Если он сохранился, вероятен тайм-аут промежуточного устройства; если всё равно рвётся, сохраните время и тип ошибки.
- Внесите постоянные настройки только для нужного хостаНа клиенте откройте
~/.ssh/configв текстовом редакторе (при необходимости создайте файл с правами только владельца). В отдельном блокеHostдля конкретного сервера установитеServerAliveInterval 60иServerAliveCountMax 3. Не включайте эти параметры глобально для всех подключений без необходимости. - Проверьте настройки без отображения секретовВыполните
ssh -G имя-хоста | grep -i aliveдля своего алиаса. SSH покажет итоговые значения. Если используются Match или централизованная конфигурация, настройки могут быть переопределены: разберите вывод с администратором. - Проверьте откат и поведение после следующего подключенияЕсли не стало лучше, удалите добавленные две строки из конфигурации клиента и сохраните файл; перезапустите подключение. На сервере администратор может посмотреть журнал sshd, но не нужно глобально отключать тайм-ауты и защитные политики.
#Команды из инструкции с пояснениями
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 пользователь@серверssh -G имя-хоста | grep -i alive#Как проверить результат
Сессия остаётся активной в требуемый период простоя, а после исчезновения сети корректно закрывается, не зависая бесконечно.
#Если проблема не устранена
Если keepalive не помогает, соберите время обрыва, состояние VPN и сетевого интерфейса, вывод клиента ssh -v без секретов и информацию о корпоративных ограничениях.