#Что означает ошибка
ssh: connect to host ... port 22: Connection refused
«Connection refused» значит, что до сервера пакеты дошли, но на порту никто не слушает (или файрвол активно отклоняет). Это отличается от «Connection timed out» (пакеты вообще теряются) и «Permission denied» (подключение есть, но не принят ключ/пароль). Правильный диагноз — определить, как именно сервер отвечает.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Не запущена служба sshdOpenSSH-сервер не установлен или остановлен. | systemctl status ssh — inactive. | Запустите службу. |
SSH слушает другой портПорт изменён в sshd_config. | ss -tlnp показывает другой порт. | Подключайтесь с -p. |
| ФайрволПорт закрыт в ufw, firewalld, iptables или у провайдера. | Порт не открыт из внешней сети. | Откройте порт. |
| Неверный адрес или NATВы подключаетесь не к тому IP. | IP изменился (динамический). | Проверьте адрес. |
#Пошаговое решение
- Проверьте адрес и портНа своём компьютере откройте терминал: Windows 10/11 — PowerShell через «Пуск», macOS/Linux — «Терминал». Выполните
ssh -v -p 22 user@host, заменивuser,hostи 22 на реальные реквизиты из панели провайдера. Найдите в выводе строкуConnecting to ... port ...и убедитесь, что IP и порт правильные.Connection refusedозначает отказ TCP-соединения, это не ошибка пароля. - Проверьте доступность портаС клиента проверьте TCP-порт: в Windows PowerShell
Test-NetConnection host -Port 22, в Linux/macOS с установленным netcat —nc -zv host 22. При недоступности порта проверьте DNS-имя, VPN и сетевой экран. Если порт доступен, но SSH всё равно не подключается, смотрите подробный выводssh -v: там может быть проблема с протоколом или авторизацией. - Зайдите на сервер через консольЕсли SSH полностью недоступен, не меняйте межсетевой экран через это же соединение. Откройте кабинет VPS/хостинга и найдите «Консоль», «VNC», «Serial console» или «Доступ к серверу», если провайдер предоставляет такую функцию. Войдите через доверенную консоль под имеющимися учётными данными, проверьте сеть и состояние SSH. На выделенном сервере может потребоваться физический доступ или удалённое управление оборудованием.
- Установите и запустите sshdНа консоли сервера выполните
systemctl status sshна Debian/Ubuntu илиsystemctl status sshdна RHEL. Если пакет отсутствует, сначала убедитесь, что вы имеете консольный доступ и право устанавливать службу; на Debian/Ubuntu обычно пакетopenssh-server. После установки проверьте конфигурациюsshd -t, затем включайте службу черезsystemctl. Не устанавливайте пакеты по SSH на сервере, к которому уже не можете подключиться. - Проверьте портНа сервере выполните
sudo ss -tlnp | grep sshdлибоsudo ss -tlnp | grep :22и найдите адрес и порт прослушивания. Сравните с директивойPortв/etc/ssh/sshd_configи конфигурациямиsshd_config.d. Если служба слушает только127.0.0.1, внешнее соединение не придёт. Перед изменением адреса прослушивания сохраните файл и запуститеsudo sshd -t. - Откройте порт в файрволеПроверьте правила локального брандмауэра командами
sudo ufw status numbered(UFW) илиsudo firewall-cmd --list-all(firewalld). Если подтверждено, что SSH слушает нужный порт, а правила блокируют его, добавьте точечное разрешение только для административной сети и актуального порта. Не открывайте безусловно 22 для всего Интернета; сохраните консольный доступ для отката. - Проверьте файрвол провайдераВ панели облачного провайдера откройте «Сетевые правила», «Firewall» или «Security Groups» для нужной ВМ. Проверьте входящий TCP-порт SSH и разрешённые источники; исправляйте только нужное правило по политике безопасности организации. Убедитесь, что есть обратный маршрут через VPN, если он обязателен. Повторите
Test-NetConnectionсо своего клиента. - Проверьте конфигПосле корректировки конфигурации на сервере выполните
sudo sshd -t: отсутствие сообщения обычно означает успешную синтаксическую проверку. Затемsudo systemctl reload sshилиsshdсогласно дистрибутиву. Не закрывая рабочую консоль, откройте новое SSH-подключение с клиента и проверьте авторизацию. Если новое подключение не работает, верните исходный файл через консоль. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
Если служба «падает» сразу после запуска, смотрите журнал: sudo journalctl -u ssh -n 50. Типичные причины — ошибка в конфиге, отсутствие ключей хоста (создайте командой sudo ssh-keygen -A) или занятый порт. При смене порта SSH не забудьте открыть новый порт в файрволе и в панели хостинга до перезапуска службы, чтобы не потерять доступ. Для защиты включите вход по ключам и отключите вход root. Документация — .
Если подключение раньше работало, а теперь нет, проверьте, не сменился ли IP-адрес сервера (динамический адрес провайдера или пересозданная виртуальная машина) и не попали ли вы под блокировку fail2ban после неудачных попыток входа: sudo fail2ban-client status sshd покажет заблокированные адреса, а sudo fail2ban-client set sshd unbanip АДРЕС снимет блокировку. С клиента Windows используйте встроенный ssh из PowerShell или ; при смене ключа хоста удалите старую запись командой ssh-keygen -R адрес.