Как предотвратить разрывы соединения SSH?

Здравствуйте. У меня установлена Ubuntu 14.04.3, на которой работает сервис sshd. В последнее время я сталкиваюсь с проблемами: соединение разрывается примерно через 2 минуты работы, и после повторного подключения клиенты видят только черный экран, т.е. новая сессия SSH не устанавливается. 

Каковы возможные причины этих разрывов соединения, и что можно предпринять для их устранения или для улучшения процесса повторного подключения?

У меня 2-5 клиентов, часть из которых подключена через мобильные сети, а часть - через проводное соединение. В конфигурации sshd у меня установлены следующие параметры:
<blockquote>
LoginGraceTime 60  
TCPKeepAlive yes  
MaxStartups 30:30:60  
ClientAliveInterval 30  
ClientAliveCountMax 20  
</blockquote>
Все остальные параметры настроены по умолчанию. При проверке активных пользователей с помощью команды who, клиентов немного и все знакомы, а вывод команды netstat -aopn | grep ssh показывает лишь несколько активных соединений, которые также выглядят нормальными.
  • 7 октября 2024 г. 11:34
Ответы на вопрос 2
Здравствуйте!

Проблемы с разрывами соединения SSH могут возникать по разным причинам. Давайте рассмотрим возможные причины и предложим решения.

### Возможные причины разрывов соединения SSH:

1. **Настройки сети**:
   - Если клиенты подключаются через нестабильные или медленные сети, это может привести к разрывам соединения.
   - Некоторые сетевые устройства, такие как маршрутизаторы и брандмауэры, могут сбрасывать соединения после определённого времени бездействия.

2. **Настройки SSH-сервера**:
   - Некоторые параметры конфигурации SSH-сервера могут быть не оптимальными. Например, если `ClientAliveInterval` слишком мал, это может привести к отключению клиента, если он не отправляет данные.

3. **Версия OpenSSH**:
   - Разные версии OpenSSH могут иметь различные настройки по умолчанию. Обновление до более новой версии может решить некоторые проблемы.

4. **Проблемы на стороне клиента**:
   - Приложения на стороне клиента или их настройки (например, фаерволы и программы для защиты) могут влиять на соединение SSH.

5. **Проблемы с DNS**:
   - Если серверу или клиентам не удаётся корректно резолвить DNS, это может вызвать дополнительные задержки и разрывы.

### Рекомендации по улучшению соединения:

1. **Настройки KeepAlive**:
   - Попробуйте изменить настройки `ClientAliveInterval` и `ClientAliveCountMax` на более высокие значения. Например:
     ```plaintext
     ClientAliveInterval 60
     ClientAliveCountMax 3
     ```
   - Это позволит серверу дольше ждать ответа от клиента перед тем, как разорвать соединение.

2. **Направьте на использование оживления соединений (KeepAlive) для клиентов**:
   - На стороне клиента в файле `~/.ssh/config` добавьте следующие строки:
     ```plaintext
     ServerAliveInterval 60
     ServerAliveCountMax 3
     ```
   - Это будет поддерживать активное соединение даже при временных перехватах.

3. **Проверка сетевых настроек**:
   - Убедитесь, что нет ограничений на уровне сети (например, брандмауэры), которые могут сбрасывать TCP-соединения.

4. **Проверьте версии OpenSSH**:
   - Если возможно, обновите OpenSSH до более новой версии, так как это может устранить некоторые известные проблемы.

5. **Мониторинг соединений**:
   - Используйте инструменты мониторинга, такие как `tcpdump` или `Wireshark`, чтобы проанализировать сетевой трафик на предмет разрывов.

### Попробуйте выполнить тест:

Также вам может быть полезен запуск SSH с дополнительной отладочной информацией. Подключайтесь с помощью:
```bash
ssh -vvv user@hostname
```
Это может помочь выявить, на каком этапе происходит разрыв соединения.

Изменив настройки и проводя мониторинг, вы сможете улучшить стабильность соединения SSH.
лучший вариант: заходя на сервер запускай "tmux" при отключении и повторном соединении запускай "tmux a" аналог screen и длительные операции типо обновления, скачивания, компилирования не потеряются 
если всё же нужно соединение при разрыве восстанавливать например для проброса портов туда-сюда ssh -R, ssh -L или прокси ssh -D используй опцию ssh -o reconnect кстати sshfs тоже опцию -o reconnect поддерживает
Похожие вопросы