Забавная ситуация с SSH в Ubuntu 24
Забавная ситуация с SSH в Ubuntu 24. После того как человек поменял в файле /etc/ssh/sshd_config порт с 22 на 2222 и сделал systemctl restart ssh — ничего не произошло.
По-прежнему слушался порт 22.
Всё оказалось проще, чем казалось. В новых версиях дистрибутива SSH-демон стал использовать сокетовую модель для подключения клиентов.
Если подключиться к консоли дистрибутива (не по SSH), то можно заметить, что никакой ssh.service не запущен. Однако если выполнить:
ss -tlnто увидим:
tcp LISTEN 0 4096 *:22 *:*
И вот в чём дело: для SSH используется не ssh.service, а ssh.socket. А юниты с типом socket не держат процесс постоянно запущенным. Они просто слушают порт, а когда приходит запрос, запускают ssh.service.
Если открыть файл ssh.socket, то увидим примерно такое:
[Unit]
Description=OpenBSD Secure Shell server socket
Before=sockets.target ssh.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
[Socket]
ListenStream=0.0.0.0:22
ListenStream=[::]:22
BindIPv6Only=ipv6-only
Accept=no
FreeBind=yes
[Install]
WantedBy=sockets.target
RequiredBy=ssh.service
Вот именно здесь указан порт 22.
Что делать?
После правки конфига /etc/ssh/sshd_config нужно выполнить:
systemctl daemon-reload
systemctl restart ssh.socket
Перезапускаем именно юнит сокета. После этого порт изменится, и в ssh.socket будет, например:
[Socket]ListenStream=0.0.0.0:2222ListenStream=[::]:2222Если хочется по-старому
Можно полностью отключить сокетную модель и вернуться к привычной схеме:
systemctl disable --now ssh.socketrm -f /etc/systemd/system/ssh.service.d/00-socket.confrm -f /etc/systemd/system/ssh.socket.d/addresses.confsystemctl daemon-reloadsystemctl enable --now ssh.service