最近安装了 Ubuntu 23.04 Desktop,但是发现根据常规方法修改 sshd_config 无效,所以记录本次的可行方案。
适用前提:Ubuntu 22.10 以上
原因
As of version 1:9.0p1-1ubuntu1 of openssh-server in Kinetic Kudu (Ubuntu 22.10),
OpenSSH in Ubuntu is configured by default to use systemd socket activation.
从Kinetic Kudu (ubuntu 22.10)中openssh-server的版本1:9.0p1-1ubuntu1开始,
Ubuntu中的openssh默认配置为使用systemd socket激活。
https://discourse.ubuntu.com/t/sshd-now-uses-socket-based-activation-ubuntu-22-10-and-later/30189
分析
因此,sshd 的监听任务就转交给了 ssh socket,修改 sshd_config 中的 Port 项自然无效(意思是其他的配置项还有用)。
注意:此版本后,sshd的服务名变成了ssh。(程序名没变)
方案
对此,提供的两种解决方案是:
一、还原 sshd 的功能,让 sshd 自己监听端口
但是这样做会比系统托管的socket端口监听稍微更消耗一点内存(参考文章的第一段)
# 修改你的sshd配置
sed -i /etc/ssh/sshd_config -e 's/.*\bPort\b\s\+[0-9]\+.*/Port 22666/'
# 或者
vi /etc/ssh/sshd_config
# “注释” 掉 sshd 对 socket 的依赖
mv /etc/systemd/system/ssh.service.d/ /etc/systemd/system/ssh.service.d.disabed/
# 分别启用和禁用 sshd 和 socket,重启 sshd
systemctl disable --now ssh.socket
systemctl enable --now ssh.service
systemctl reload ssh.service
# 测试
ssh $USER@localhost -p 22666
对于此方案的恢复操作我也贴出来吧:
# 取消 “注释”
mv /etc/systemd/system/ssh.service.d.disabed/ /etc/systemd/system/ssh.service.d/
systemctl daemon-reload
# 分别启用和禁用,重启 socket
systemctl enable --now ssh.socket
systemctl disable --now ssh.service
systemctl restart ssh.socket
# 测试
ssh $USER@localhost -p 22
二、直接修改新的监听侧的配置文件
这个相对无痕,但更容易忘,而且到时候忘了就又不会改了~~
# 执行下面的命令,修改 ListenStream= 后面的端口号。
vi /usr/lib/systemd/system/ssh.socket
# 重载配置
systemctl daemon-reload
# 重启 socket
systemctl restart ssh.socket
# 测试
ssh $USER@localhost -p 22666
感谢阅读,转载请注明来源~~