在 Ubuntu 24.04 版本中,如果你尝试过修改 SSH 监听端口,可能会发现传统的修改 /etc/ssh/sshd_config 配置文件并重启 SSH 服务的方式失效了。
问题所在
在 Ubuntu 24 版本,为了优化性能,SSH 服务默认采用了 systemd 的套接字激活机制。
对于SSH,这里的套接字激活机制是指,使sshd.socket始终监听端口,sshd.service不监听端口,当有连接请求传入时,systemd会激活sshd.service服务。
相比传统的sshd.service常驻监听端口的方式,套接字激活机制可以减少sshd.service的资源占用。
解决方案
在 Ubuntu 24.04 中要修改 SSH 监听端口,可以通过修改新引入的sshd.socket,也可以设置禁用这一新增的 SSH 套接字激活机制。
法一 修改Port同时配置Socket
先按照传统方式修改/etc/ssh/sshd_config配置文件,修改Port配置项,然后修改/lib/systemd/system/ssh.socket文件,将ListenStream配置项的端口修改为你修改的Port端口。详细步骤如下:
修改 SSH 配置文件:
sudo vim /etc/ssh/sshd_config修改或新增
Port配置项:Port 2222修改 SSH Socket 配置文件:
sudo vim /lib/systemd/system/sshd.socket修改
ListenStream配置项:ListenStream=0.0.0.0:2222 ListenStream=[::]:2222 # IPv6重启 SSH 服务:
sudo systemctl daemon-reload sudo systemctl restart ssh.socket
然后可以通过sudo ss -tuln | grep 2222检查 SSH 是否已经监听在新端口上,检查修改是否生效。
法二 禁用套接字激活机制
也可以直接禁用sshd.socket来恢复传统的sshd.service监听端口的方式。
sudo systemctl disable ssh.socket
sudo systemctl stop ssh.socket
然后重启 SSH 服务:
sudo systemctl restart ssh
这样就可以恢复传统的sshd.service监听端口的方式。
结语
虽然 systemd 对 SSH 的套接字激活机制可以优化性能,但是对于开发测试环境或者一些特殊场景,有时候并不太方便,况且 SSH 服务对性能的影响并不是很大。
所以,直接禁用套接字激活机制可能是更方便的解决方案。