Что означает ошибка "Disconnected by remote host"
Ошибка Connection closed by remote host (или Received disconnect from <IP> port 22:11: Bye Bye) — это сообщение от SSH-сервера, который сознательно разорвал установленное соединение. Клиент (ваша локальная машина) получает этот сигнал и завершает сессию. Это не всегда сбой; иногда это штатное действие (например, завершение работы sshd), но чаще — признак проблемы с конфигурацией, сетью или ресурсами сервера.
Сообщение обычно появляется в клиентской консоли сразу после ввода пароля или через некоторое время бездействия.
Причины возникновения
- Таймаут неактивности (Idle Timeout): Сервер разрывает соединение после периода бездействия (по умолчанию в некоторых дистрибутивах может быть 5-10 минут). Клиент не отправляет данные, сервер считает сессию мёртвой.
- Несоответствие настроек keepalive: Клиент и/или сервер не настроены на отправку периодических "живых" пакетов (
keepalive), что позволяет обнаружить разрыв или поддерживать активность. - Проблемы с аутентификацией: Неверные права на файлы
~/.ssh/authorized_keys(должны быть 600) или~/.ssh(700) на сервере. Сервер отвергает ключ и закрывает соединение. - Перегрузка сервера или исчерпание ресурсов: Сервер исчерпал лимиты процессов (
MaxStartups), сессий или памяти (ulimit), иsshdпринудительно закрывает новые или существующие соединения. - Сетевая проблема или срабатывание firewall: Промежуточное сетевое устройство (роутер, корпоративный фаервол) разрывает "молчаливое" TCP-соединение по истечении таймаута. Также возможен блокирующий
DROPпакетов SSH. - Конфликт портов или служб: На сервере уже запущен другой демон на порту 22 (или кастомном порте SSH), или
sshdперезапускается (например, после обновления конфига). - Проблема с GSSAPI-аутентификацией: Включённый по умолчанию в некоторых версиях OpenSSH механизм GSSAPI может вызывать задержки и таймауты, приводящие к разрыву.
Способы решения
Способ 1: Настройка keepalive на стороне клиента (самый частый и простой)
Это заставит ваш SSH-клиент периодически отправлять пустые пакеты, чтобы "оживлять" соединение.
- Откройте или создайте файл конфигурации клиента:
nano ~/.ssh/config - Добавьте блок конфигурации для нужного хоста (или используйте
Host *для всех):Host * ServerAliveInterval 60 ServerAliveCountMax 3ServerAliveInterval 60— отправлять пакет каждые 60 секунд.ServerAliveCountMax 3— если 3 пакета подряд не получили ответ, разорвать соединение (итоговый таймаут ~3 минуты).
- Сохраните файл (
Ctrl+O,Enter,Ctrl+X). Переподключитесь. Эта настройка действует только для исходящих соединений с вашей машины.
💡 Совет: Если вы подключаетесь к разным серверам с разными политиками, настройте
Host-блоки для каждого.
Способ 2: Настройка keepalive на стороне сервера
Если вы имеете административный доступ к серверу, измените его конфигурацию sshd.
- Подключитесь к серверу (возможно, через консоль управления, если SSH падает).
- Отредактируйте главный конфиг
sshd:sudo nano /etc/ssh/sshd_config - Найдите (или добавьте) параметры и установите значения:
ClientAliveInterval 60 ClientAliveCountMax 3ClientAliveInterval— сервер будет отправлять пакеты клиенту каждые N секунд.ClientAliveCountMax— количество "живых" запросов без ответа, после которых сервер разрывает соединение.
- Перезапустите службу SSH:
sudo systemctl restart sshd⚠️ Важно: Не закрывайте текущую сессию до проверки новой! Рекомендуется открыть вторую консоль для теста.
Способ 3: Проверка и исправление прав доступа на сервере
Неправильные права на ~/.ssh и authorized_keys — частая причина немедленного разрыва после попытки аутентификации.
На сервере (для пользователя, под которым вы подключаетесь):
# Перейдите в домашнюю директорию целевого пользователя
cd ~
# Установите корректные права
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
# Проверьте владельца (должен быть сам пользователь, не root!)
ls -la .ssh/
Если владелец неверный, исправьте:
sudo chown -R <username>:<username> .ssh
Способ 4: Диагностика сети и firewall
- Проверьте стабильность соединения с сервера на клиенте:
Ищите потерю пакетов (ping -c 20 <server_ip>packet loss). Даже 1-2% могут вызывать проблемы. - Проверьте путь (traceroute) для выявления узлов с задержками:
traceroute <server_ip> - Проверьте firewall на сервере (если есть доступ):
Убедитесь, что порт SSH (по умолчанию 22 или указанный вами в# Для firewalld (CentOS/RHEL/Fedora) sudo firewall-cmd --list-all # Для ufw (Ubuntu/Debian) sudo ufw status verbose # Для iptables (универсально) sudo iptables -L -n -vsshd_config) разрешён для входящих соединений (ACCEPT). - Проверьте firewall на клиенте (особенно если вы в корпоративной сети). Возможно, исходящий трафик на порт 22 блокируется.
Способ 5: Увеличение лимитов на стороне сервера
Если сервер под высокой нагрузкой, может срабатывать лимит MaxStartups (максимальное количество одновременных незавершённых подключений).
- На сервере в
/etc/ssh/sshd_configнайдите или добавьте:MaxStartups 100:30:200- Формат:
начальное_значение:процент_сброса:максимум. Пример: разрешить 100 одновременных подключений, начиная сбрасывать 30% новых при достижении 150, верхний предел 200.
- Формат:
- Также проверьте системные лимиты (
ulimit -nдля файловых дескрипторов). При необходимости увеличьте в/etc/security/limits.confи перезагрузите сервер. - Перезапустите
sshd:sudo systemctl restart sshd
Способ 6: Отключение GSSAPI (если проблема в нём)
GSSAPI-аутентификация (для интеграции с Kerberos) может вызывать задержки.
- На клиенте в
~/.ssh/configдобавьте для проблемного хоста:Host <server_alias_or_ip> GSSAPIAuthentication no - Или на сервере в
/etc/ssh/sshd_config:
Затем перезапуститеGSSAPIAuthentication nosshd.
Профилактика
- Настройте keepalive на клиенте и сервере (Способ 1 и 2) для всех критических соединений, особенно через нестабильные сети.
- Регулярно обновляйте OpenSSH (
sudo apt update && sudo apt upgrade openssh-serverна Debian/Ubuntu,sudo yum update opensshна RHEL/CentOS) для получения исправлений безопасности и стабильности. - Мониторьте логи SSH (
sudo journalctl -u sshd -f) при возникновении проблем, чтобы сразу видеть причину. - Следите за нагрузкой сервера (
top,htop,free -h). Резкие всплески нагрузки могут приводить к таймаутам. - Правильно настраивайте права (
chmod 700 ~/.ssh,chmod 600 ~/.ssh/authorized_keys) и владельца (chown) файлов аутентификации.