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

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

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

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

BASH
systemctl restart ssh
Нажмите, чтобы развернуть и увидеть больше

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

BASH
ss -tln
Нажмите, чтобы развернуть и увидеть больше

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

BASH
tcp  LISTEN  0  4096  *:22  *:*
Нажмите, чтобы развернуть и увидеть больше

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

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

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

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

BASH
pgrep -af ssh
Нажмите, чтобы развернуть и увидеть больше

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

BASH
tcp  LISTEN  0  4096  *:22  *:*
Нажмите, чтобы развернуть и увидеть больше

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

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

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

BASH
systemctl cat ssh.socket
Нажмите, чтобы развернуть и увидеть больше

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

PLAINTEXT
[Socket]
ListenStream=22
Нажмите, чтобы развернуть и увидеть больше

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

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

BASH
systemctl daemon-reload

systemctl restart ssh.socket

# проверяем
ss -tln
Нажмите, чтобы развернуть и увидеть больше

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

BASH
tcp LISTEN  0  4096  *:2222  *:*
Нажмите, чтобы развернуть и увидеть больше

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

BASH
systemctl cat ssh.socket
Нажмите, чтобы развернуть и увидеть больше

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

PLAINTEXT
[Socket]
ListenStream=
ListenStream=2222
Нажмите, чтобы развернуть и увидеть больше

Готово✔️

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

BASH
# отключаем сокет
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
Нажмите, чтобы развернуть и увидеть больше

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

Авторские права

Автор: Иван Чёрный

Ссылка: https://r4ven.me/networking/ne-menyaetsya-port-sshd-posle-pravki-fajla-sshd_config-v-ubuntu/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша