Не меняется порт sshd после правки файла sshd_config в Ubuntu

Не меняется порт sshd после правки файла sshd_config в Ubuntu

Приветствую!

Короткое предисловие: в ходе своей деятельности я чаще всего имею дело с дистрибутивами Debian и RHEL/Centos.
Поэтому как-то я упустил изменения в последних версиях дистрибутива Ubuntu, описанные ниже🫣

Подписывайтесь на наш телеграм @r4ven_me📱, чтобы не пропустить новые публикации на сайте😉. А если есть вопросы или желание пообщаться по тематике – заглядывайте в Вороний чат @r4ven_me_chat🧐.

Теперь сам кейс💼

Недавно при написании плейбука для прошлой заметки столкнулся с таким нюансом работы демона sshd в Ubuntu 24: после изменения порта прослушивания сервера в файле /etc/ssh/sshd_config и перезапуска сервиса:

systemctl restart ssh

Порт прослушивания не менялся. Т.е.

ss -tln

Система все ещё слушала 22 порт:

tcp  LISTEN  0  4096  *:22  *:*

С этим вопросом я вышел в интернет🧐

Оказывается в Ubuntu, начиная с версии, если не ошибаюсь, 22/23.10 демон ssh использует сокетную модель для подключения клиентов к серверу. Поэтому привычный перезапуска сервиса не возымеет действия😐

Не зная этого нюанса можно не плохо так опростоволоситься, например, при настройке сервера, если после правки конфига и такого “перезапуска” закрыть старый порт фаерволом😬

Расскажу чуть подробнее про такое поведение уебунты😡

Условно если подключиться к консоли сервера (не ssh) и выполнить:

pgrep -af ssh

Обнаружиться, что сервиса ssh то и нет🤷‍♂️
Но при этом:

tcp  LISTEN  0  4096  *:22  *:*

Механизм тут следующий: вместо привычного systemd юнита ssh.service по умолчанию активен юнит сокета – ssh.socket. Суть этой модели в том, чтобы не держать процесс демона ssh в активном состоянии постоянно, цитата: “с целью экономии ресурсов”🧏‍♂️

В случае сокетной модели, при обращении к заданному порту (по умолчанию 22), запрос попадает на сокет systemd, который уже в свою очередь запускает сервис ssh.service для активации демона и установки клиентского подключения🙄

Если посмотреть на содержимое юнита сокета:

systemctl cat ssh.socket

Увидим, что тут указан порт прослушивания:

[Socket]
ListenStream=22

Теперь о том, как быть в таком случае💀

После изменения номера порта в файле sshd_config, например, на 2222 для применения изменений необходимо перечитать конфигурацию системы инициализации и перезапустить юнит(!) сокета:

systemctl daemon-reload

systemctl restart ssh.socket

# проверяем
ss -tln

Порт прослушивания должен измениться:

tcp LISTEN  0  4096  *:2222  *:*

Теперь смотрим конфиг юнита сокета:

systemctl cat ssh.socket

И видим новый порт:

[Socket]
ListenStream=
ListenStream=2222

Готово✔️

Если необходимо вернуться к классической модели работы sshd, то вот шаги, описанные на официальном сайте Ubuntu:

# отключаем сокет
systemctl disable --now ssh.socket

# удаляем конфиги сокета
rm -f /etc/systemd/system/ssh.service.d/00-socket.conf

rm -f /etc/systemd/system/ssh.socket.d/addresses.conf

# перечитываем конфигурацию 
systemctl daemon-reload

# запускаем/активируем сервис
systemctl enable --now ssh.service

Для меня такое поведение оказалось неожиданным. За всем не уследишь🤷‍♂️

Такой вот траблшутинг🤷‍♂️
Не забывайте про нашу телегу📱 и чат💬 там же.
That should be it. If not, check the logs 🙂

Подписаться
Уведомить о
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии