Перейти к содержимому
EVI Solutions

SSH connection refused: как восстановить доступ к серверу

Средне 15 мин Обновлено:

Краткий ответ

Сообщение «connection refused» означает, что сервер доступен, но ни одна служба не принимает соединение на запрошенном порту. Чаще всего причина в том, что служба SSH (sshd) не работает, прослушивает другой порт или блокируется брандмауэром. Проверяйте по порядку: работает ли sshd, на каком порту, открыт ли порт и тот ли это хост.

Как проявляется проблема

  • Клиент сообщает «ssh: connect to host ... port 22: Connection refused»
  • Пинг до сервера проходит, но SSH-соединение сразу отклоняется
  • Соединение работает из одной сети, а из другой нет
  • После изменения порта или конфигурации sshd доступ пропадает
  • Сервер загрузился после перезагрузки, и SSH больше не принимает соединения

Частые причины

Служба SSH не запущена

Процесс sshd не работает или упал, поэтому операционная система отклоняет соединение на порту 22. Проверьте статус службы и журналы.

SSH прослушивает другой порт

В конфигурации изменён порт (например, на 2222), а вы подключаетесь к порту по умолчанию 22. Клиент тогда получает connection refused.

Брандмауэр блокирует порт

Локальный брандмауэр (ufw, firewalld, nftables) или группа безопасности облака отклоняет трафик на порту SSH.

Неверный хост или IP

Вы подключаетесь к IP-адресу, на котором не работает SSH, к неправильному серверу или к устройству, не разрешающему SSH.

Служба слушает только localhost

sshd привязан к 127.0.0.1 или к неправильному интерфейсу, поэтому извне соединения не принимает.

Пошаговое решение

  1. 1

    Проверьте, тот ли это хост и порт

    Сначала подтвердите IP-адрес или имя сервера и порт. Если не знаете порт, спросите администратора или посмотрите конфигурацию. По умолчанию используется 22, но многие серверы используют другой порт. На клиенте попробуйте явно: ssh -p 22 пользователь@сервер. Если по-прежнему получаете «connection refused», продолжайте дальше.

  2. 2

    Проверьте доступность сервера

    С клиента выполните ping сервер и nc -vz сервер 22 (или telnet сервер 22). Если ping проходит, а nc сообщает «Connection refused», сеть в порядке, но служба не принимает соединение. Если nc сообщает «timed out», вероятно, брандмауэр отбрасывает пакеты.

  3. 3

    Войдите локально или через консоль

    Если у вас есть физический доступ или консоль провайдера (KVM, VNC, serial), войдите как root или пользователь с правами sudo. Без этого вы не сможете проверить состояние службы. Если консоли нет, обратитесь к провайдеру.

  4. 4

    Проверьте статус службы SSH

    Выполните systemctl status ssh (Debian/Ubuntu) или systemctl status sshd (RHEL/CentOS). Если служба неактивна, запустите её: sudo systemctl start ssh (Debian/Ubuntu) или sudo systemctl start sshd (RHEL/CentOS). Затем проверьте, включена ли она при загрузке системы: sudo systemctl enable ssh (Debian/Ubuntu) или sudo systemctl enable sshd (RHEL/CentOS).

  5. 5

    Просмотрите журналы на ошибки

    Используйте journalctl -u ssh -n 50 или journalctl -u sshd -n 50. Ищите сообщения об ошибках при запуске, например «bind: Address already in use» или «error: Bind to port 22 failed». На старых системах смотрите /var/log/auth.log или /var/log/secure.

  6. 6

    Проверьте, на каком порту и интерфейсе слушает sshd

    Выполните ss -tlnp | grep ssh или netstat -tlnp | grep ssh. Обратите внимание на столбец Local Address. Если указано 127.0.0.1:22, sshd слушает только локально. Если указано 0.0.0.0:2222, порт 2222. В конфигурации /etc/ssh/sshd_config проверьте Port и ListenAddress.

  7. 7

    Проверьте брандмауэр

    На Ubuntu/Debian: sudo ufw status verbose. На RHEL/CentOS: sudo firewall-cmd --list-all. Убедитесь, что порт SSH разрешён. Если используете облако, проверьте группу безопасности или сетевой брандмауэр в консоли провайдера. Если используете ufw, можно разрешить порт SSH (например, sudo ufw allow 22/tcp).

  8. 8

    Исправьте конфигурацию и перезапустите sshd

    Если вы меняли /etc/ssh/sshd_config, проверьте синтаксис: sudo sshd -t. Затем перезапустите службу: sudo systemctl restart ssh (Debian/Ubuntu) или sudo systemctl restart sshd (RHEL/CentOS). Учтите, что перезапуск может прервать существующие соединения, поэтому заранее обеспечьте альтернативный доступ. Если всё в порядке, попробуйте снова с клиента.

Если ничего не помогло: расширенные проверки

Если sshd активен и слушает на 0.0.0.0:22, а соединение всё равно отклоняется, проверьте, нет ли другого слоя брандмауэра (например, правил nftables, fail2ban, который добавил запрет). Посмотрите sudo nft list ruleset и sudo fail2ban-client status sshd. В облачной среде проверьте, правильно ли публичный IP-адрес сопоставлен с экземпляром. Можно временно запустить sshd на другом порту для теста: sudo sshd -p 2222 -d (режим отладки, не прерывайте сеанс). Если проблема возникает только с одного клиента, проверьте локальный брандмауэр или VPN. Для production-серверов обязательно имейте альтернативный доступ (консоль, другой порт SSH), чтобы избежать блокировки.

Как избежать повторения

  • Регулярно проверяйте статус службы sshd и журналы
  • Ведите учёт изменений порта и правил брандмауэра
  • Обеспечьте альтернативный доступ (консоль, другой порт)
  • Используйте мониторинг, который обнаруживает недоступность SSH

Когда лучше обратиться к специалисту

Если у вас нет консоли или альтернативного доступа к серверу, а SSH не работает, вы рискуете окончательно заблокировать доступ. В этом случае лучше обратиться в IT-поддержку, которая имеет опыт удалённого восстановления.

Обслуживание ИТ-инфраструктуры · Серверы, сети, резервное копирование, безопасность и helpdesk

Частые вопросы

Почему я получаю «connection refused», когда ping проходит?

Ping проверяет сетевую доступность, а не службу. Connection refused означает, что хост доступен, но ни один процесс не принимает соединение на этом порту. Чаще всего sshd не работает или слушает на другом порту.

Как узнать, на каком порту работает SSH?

На сервере выполните `ss -tlnp | grep ssh` или посмотрите `/etc/ssh/sshd_config` (директива `Port`). Если у вас нет доступа к серверу, спросите администратора или провайдера.

Безопасно ли перезапускать sshd?

Перезапуск может прервать существующие SSH-сеансы, но не удалит данные. Перед перезапуском проверьте синтаксис с помощью `sudo sshd -t` и обеспечьте альтернативный доступ (например, консоль). Если не уверены в конфигурации, не перезапускайте sshd через тот же сеанс.

Поделиться
Не нашли решение?ИИ-помощник работает 24/7. Опишите проблему или отправьте скриншот ошибки и получите инструкцию для вашего случая.Спросить ИИ-помощника