Как исправить проблему подключения к серверу Linux Ubuntu по SSH?
Я арендовал VPS Linux Ubuntu 24.04 сервер, но не могу подключиться к нему по SSH. Вот что я уже сделал:
- Установил пакет openssh-server:
sudo apt install openssh-server - Проверил статус сервиса SSH — он активен (active, running):
sudo systemctl status ssh - Перезапустил сервис SSH
- Проверил фаервол и убедился, что порт 22 открыт:
sudo ufw allow 22sudo ufw status
- Проверил, открыт ли порт 22:
nc -zv 94.103.2.134 22
При попытке подключения с клиента (PowerShell) через SSH:
ssh root@94.103.2.134
Пинги проходят, но доступа нет. В чем может быть проблема и как ее исправить?
SSH-подключение к Ubuntu 24.04 может не работать даже при активном сервисе и открытом порту 22 из-за конфликта между socket и service, неверной привязки интерфейсов, проблем с iptables или особенностей конфигурации в Ubuntu 24.04.
Содержание
- Основные причины проблемы
- Проверка конфигурации SSH
- Анализ работы сервисов
- Настройка сетевой привязки
- Проверка iptables и UFW
- Решение конфликта socket/service
- Дополнительные проверки
- Заключение
Основные причины проблемы
Наиболее частые причины, по которым SSH не работает в Ubuntu 24.04, несмотря на активный сервис:
- Конфликт между socket и service - В Ubuntu 24.04 SSH может быть запущен как socket, но не как service, что приводит к ситуации, когда сервис активен, но порты не слушаются.
- Неправильная привязка интерфейсов - SSH сервер может быть настроен слушать только определенный IP-адрес или интерфейс.
- Проблемы с iptables - Даже при открытом порту в UFW, правила iptables могут блокировать подключения.
- Особенности конфигурации в Ubuntu 24.04 - В новых версиях Ubuntu настройки SSH могут мигрировать в отдельные конфигурационные файлы systemd.
В исследовании AskUbuntu указано, что в Ubuntu 22.10, 23.04 и 23.10 при обновлении настройки порта или ListenAddress могут мигрировать в
/etc/systemd/system/ssh.socket.d/addresses.conf.
Проверка конфигурации SSH
Проверьте основные параметры конфигурации SSH сервера:
sudo nano /etc/ssh/sshd_config
Убедитесь, что следующие параметры правильно настроены:
Port 22- стандартный порт, может быть измененListenAddress 0.0.0.0- слушать на всех интерфейсахPermitRootLogin yes- разрешить вход для root (илиnoдля безопасности)PasswordAuthentication yes- разрешить парольную аутентификацию
Согласно официальному руководству по SSH в Ubuntu 24.04, для изменения порта нужно отредактировать
/etc/ssh/sshd_config, найти строкуPort 22и изменить номер порта.
Анализ работы сервисов
Проверьте, какой именно тип сервиса SSH запущен:
systemctl list-units --type=socket | grep ssh
systemctl list-units --type=service | grep ssh
Если вы видите активный ssh.socket но не активный ssh.service, это может быть причиной проблемы.
Как указано в ответе на AskUbuntu, проблема решается путем отключения socket и включения service:
bashsudo systemctl disable --now ssh.socket sudo systemctl enable --now ssh.service
Настройка сетевой привязки
Проверьте, на каких интерфейсах и IP-адресах слушает SSH:
sudo ss -tlnp | grep ssh
netstat -tlnp | grep ssh
Если SSH слушает только на localhost (127.0.0.1), а не на внешнем IP, измените конфигурацию:
sudo nano /etc/ssh/sshd_config
Измените или добавьте:
ListenAddress 0.0.0.0
Перезапустите SSH:
sudo systemctl restart ssh
Проверка iptables и UFW
Даже если UFW разрешает порт 22, проверьте правила iptables:
sudo iptables -L -n -v
sudo iptables -L INPUT -n -v | grep 22
Добавьте правило для iptables если необходимо:
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
Проверьте активность UFW:
sudo ufw status verbose
Согласно статье на Baeldung, нужно убедиться, что порт 22 действительно открыт в UFW и iptables.
Решение конфликта socket/service
Это наиболее вероятная причина вашей проблемы в Ubuntu 24.04. Выполните следующие команды:
sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service
sudo systemctl restart ssh
Проверьте статус:
sudo systemctl status ssh.socket
sudo systemctl status ssh.service
Решение из AskUbuntu подтверждает, что именно этот подход исправляет проблему в Ubuntu 24.04.
Дополнительные проверки
- Проверьте логи SSH:
sudo tail -f /var/log/auth.log
sudo tail -f /var/log/syslog | grep ssh
- Проверьте доступность порта:
nc -zv your_server_ip 22 telnet your_server_ip 22
- Проверьте сетевые настройки:
ip addr show netstat -tlnp | grep 22
- Проверьте SELinux/AppArmor (если установлен):
sudo aa-status
sudo sestatus
- Проверьте дублирование IP-адресов:
arp -a
В статье на Medium указано, что при обнаружении дублирующихся IP-адресов необходимо сменить IP-адрес SSH сервера.
Заключение
- Основная проблема - в Ubuntu 24.04 часто возникает конфликт между
ssh.socketиssh.service, даже если сервис выглядит активным. - Решение - отключите socket и включите стандартный service с помощью команд
systemctl disable --now ssh.socketиsystemctl enable --now ssh.service. - Дополнительные меры - проверьте привязку интерфейсов, конфигурацию iptables и UFW, а также просмотрите логи SSH для диагностики.
- Предотвращение проблем - всегда проверяйте работу сервисов через
netstatилиss, а не только черезsystemctl status.
Следуя этим шагам, вы должны решить проблему SSH подключения к вашему Ubuntu 24.04 VPS. Если проблема persists, проверьте логи на предмет ошибок и убедитесь, что ваш провайдер VPS не блокирует порт 22 на сетевом уровне.
Источники
- 24.04 - SSH connection refused - Ask Ubuntu
- Enable SSH on Ubuntu 24.04 – Secure Remote Access - LinuxConfig
- How to Fix Connection Refused by Port 22 Debian/Ubuntu – Linux Hint
- Solving Error port 22: Connection refused in Linux | Baeldung on Linux
- How to fix: Connection refused by port 22 Debian/Ubuntu | Medium
- (Resolved) SSH Connection Refused on Ubuntu & Debian – TecAdmin
- networking - ssh connection refused - Ask Ubuntu