Что означает ошибка Connection timed out
При попытке подключиться к удалённому серверу через OpenSSH вы видите сообщение: ssh: connect to host <IP> port 22: Connection timed out. Это не ошибка аутентификации или проблем с ключами. Система сообщает, что отправленные TCP-пакеты (SYN) не получили ответа (SYN-ACK) в установленное время. Клиент просто устал ждать и принудительно разрывает соединение. Ошибка возникает на самом раннем этапе установления TCP-сессии, ещё до начала обмена ключами SSH.
Причины возникновения
- Сервер выключен, перезагружается или зависла служба
sshd. - Входящие соединения на порт 22 блокируются фаерволом сервера (UFW, firewalld, iptables) или облачной группой безопасности.
- Локальный фаервол или антивирус на вашей машине блокирует исходящий трафик по порту 22.
- Некорректный IP-адрес или доменное имя, указывающее на другой, недоступный хост.
- Проблемы с маршрутизацией у интернет-провайдера или сбой работы NAT-шлюза.
- Слишком строгие настройки таймаута в конфигурации SSH-клиента по умолчанию.
Способы решения
Способ 1: Проверка доступности хоста и сетевого соединения
Начните с базовой диагностики. Убедитесь, что сервер физически доступен в сети.
# Проверка базовой связности (может быть отключён ICMP на сервере)
ping -c 4 192.168.1.100
Если ping не проходит, проверьте IP-адрес в панели управления облачным провайдером или у хостера. Далее проверьте открыт ли именно порт 22:
# Использование netcat для быстрой проверки TCP-порта
nc -zv 192.168.1.100 22
Успешный вывод: Connection to 192.168.1.100 22 port [tcp/ssh] succeeded!. Если команда зависает или сразу пишет Connection timed out, переходите к следующим шагам.
Способ 2: Настройка правил фаервола
Чаще всего порт закрыт на уровне сервера. Настройте правила в зависимости от вашей ОС. Для Ubuntu/Debian (UFW):
sudo ufw allow 22/tcp
sudo ufw reload
sudo ufw status
Для RHEL/CentOS/AlmaLinux (firewalld):
sudo firewall-cmd --permanent --add-port=22/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
💡 Совет: Если вы используете облачные платформы (AWS, Google Cloud, Azure, Hetzner), проверьте настройки Security Group или Network ACL в веб-панели управления. Правила фаервола внутри ОС не сработают, если внешний блокирующий фильтр их отсекает.
Способ 3: Увеличение таймаута в конфигурации SSH-клиента
Иногда сеть работает медленно из-за высокой задержки, а стандартный таймаут OpenSSH слишком короткий. Вы можете увеличить время ожидания глобально или для конкретного хоста. Откройте файл конфигурации клиента:
nano ~/.ssh/config
Добавьте следующие строки:
Host *
ConnectTimeout 30
ServerAliveInterval 15
ServerAliveCountMax 4
ConnectTimeout задаёт время ожидания установки TCP-соединения в секундах. ServerAliveInterval и ServerAliveCountMax помогают поддерживать активную сессию при нестабильном интернете. Сохраните файл (Ctrl+O), закройте редактор и переподключитесь.
Способ 4: Проверка маршрутизации и DNS-резолвинга
Если вы подключаетесь по доменному имени, убедитесь, что оно преобразуется в правильный IP:
dig +short example.com
Если возвращается несколько адресов или неверный, очистите локальный кэш DNS или используйте прямой IP в команде ssh. Для анализа потери пакетов на пути к серверу используйте утилиту mtr:
mtr -n -c 50 192.168.1.100
Высокий процент потерь (Loss%) на промежуточных узлах указывает на проблему провайдера. В таком случае попробуйте подключиться через мобильный интернет (режим модема) или обратитесь в поддержку хостинга с результатами трассировки.
Профилактика
Чтобы избежать повторения сбоев, всегда настраивайте автоматическое поддержание сессии через параметры ServerAliveInterval и ServerAliveCountMax. Регулярно проверяйте статус службы sshd командой systemctl status sshd. Для критичных серверов используйте резервный доступ: аварийную консоль провайдера (VNC/IPMI), WireGuard-туннель или альтернативный порт SSH (например, 2222), который реже сканируется ботами и реже попадает в базовые блокировки провайдеров. Документируйте изменения в фаерволе в едином репозитории инфраструктуры (Ansible, Terraform), чтобы быстро откатить ошибочные правила.