НейроАгент

Как исправить проблему SSH подключения к Ubuntu 24.04

Решение проблемы SSH подключения к Ubuntu 24.04: конфликты socket/service, настройка интерфейсов, проверка iptables и UFW. Полное руководство по устранению ошибок.

Вопрос

Как исправить проблему подключения к серверу Linux Ubuntu по SSH?

Я арендовал VPS Linux Ubuntu 24.04 сервер, но не могу подключиться к нему по SSH. Вот что я уже сделал:

  1. Установил пакет openssh-server: sudo apt install openssh-server
  2. Проверил статус сервиса SSH — он активен (active, running): sudo systemctl status ssh
  3. Перезапустил сервис SSH
  4. Проверил фаервол и убедился, что порт 22 открыт:
    • sudo ufw allow 22
    • sudo ufw status
  5. Проверил, открыт ли порт 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 не работает в Ubuntu 24.04, несмотря на активный сервис:

  1. Конфликт между socket и service - В Ubuntu 24.04 SSH может быть запущен как socket, но не как service, что приводит к ситуации, когда сервис активен, но порты не слушаются.
  2. Неправильная привязка интерфейсов - SSH сервер может быть настроен слушать только определенный IP-адрес или интерфейс.
  3. Проблемы с iptables - Даже при открытом порту в UFW, правила iptables могут блокировать подключения.
  4. Особенности конфигурации в 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 сервера:

bash
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 запущен:

bash
systemctl list-units --type=socket | grep ssh
systemctl list-units --type=service | grep ssh

Если вы видите активный ssh.socket но не активный ssh.service, это может быть причиной проблемы.

Как указано в ответе на AskUbuntu, проблема решается путем отключения socket и включения service:

bash
sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service

Настройка сетевой привязки

Проверьте, на каких интерфейсах и IP-адресах слушает SSH:

bash
sudo ss -tlnp | grep ssh
netstat -tlnp | grep ssh

Если SSH слушает только на localhost (127.0.0.1), а не на внешнем IP, измените конфигурацию:

bash
sudo nano /etc/ssh/sshd_config

Измените или добавьте:

ListenAddress 0.0.0.0

Перезапустите SSH:

bash
sudo systemctl restart ssh

Проверка iptables и UFW

Даже если UFW разрешает порт 22, проверьте правила iptables:

bash
sudo iptables -L -n -v
sudo iptables -L INPUT -n -v | grep 22

Добавьте правило для iptables если необходимо:

bash
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Проверьте активность UFW:

bash
sudo ufw status verbose

Согласно статье на Baeldung, нужно убедиться, что порт 22 действительно открыт в UFW и iptables.

Решение конфликта socket/service

Это наиболее вероятная причина вашей проблемы в Ubuntu 24.04. Выполните следующие команды:

bash
sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service
sudo systemctl restart ssh

Проверьте статус:

bash
sudo systemctl status ssh.socket
sudo systemctl status ssh.service

Решение из AskUbuntu подтверждает, что именно этот подход исправляет проблему в Ubuntu 24.04.

Дополнительные проверки

  1. Проверьте логи SSH:
bash
sudo tail -f /var/log/auth.log
sudo tail -f /var/log/syslog | grep ssh
  1. Проверьте доступность порта:
bash
nc -zv your_server_ip 22
telnet your_server_ip 22
  1. Проверьте сетевые настройки:
bash
ip addr show
netstat -tlnp | grep 22
  1. Проверьте SELinux/AppArmor (если установлен):
bash
sudo aa-status
sudo sestatus
  1. Проверьте дублирование IP-адресов:
bash
arp -a

В статье на Medium указано, что при обнаружении дублирующихся IP-адресов необходимо сменить IP-адрес SSH сервера.

Заключение

  1. Основная проблема - в Ubuntu 24.04 часто возникает конфликт между ssh.socket и ssh.service, даже если сервис выглядит активным.
  2. Решение - отключите socket и включите стандартный service с помощью команд systemctl disable --now ssh.socket и systemctl enable --now ssh.service.
  3. Дополнительные меры - проверьте привязку интерфейсов, конфигурацию iptables и UFW, а также просмотрите логи SSH для диагностики.
  4. Предотвращение проблем - всегда проверяйте работу сервисов через netstat или ss, а не только через systemctl status.

Следуя этим шагам, вы должны решить проблему SSH подключения к вашему Ubuntu 24.04 VPS. Если проблема persists, проверьте логи на предмет ошибок и убедитесь, что ваш провайдер VPS не блокирует порт 22 на сетевом уровне.

Источники

  1. 24.04 - SSH connection refused - Ask Ubuntu
  2. Enable SSH on Ubuntu 24.04 – Secure Remote Access - LinuxConfig
  3. How to Fix Connection Refused by Port 22 Debian/Ubuntu – Linux Hint
  4. Solving Error port 22: Connection refused in Linux | Baeldung on Linux
  5. How to fix: Connection refused by port 22 Debian/Ubuntu | Medium
  6. (Resolved) SSH Connection Refused on Ubuntu & Debian – TecAdmin
  7. networking - ssh connection refused - Ask Ubuntu