在 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 服务对性能的影响并不是很大。
所以,直接禁用套接字激活机制可能是更方便的解决方案。