飘在云端

东西南北,海角天涯

· Linux · · 22次浏览

SSH(D) 配置修改不生效

系统是 Ubuntu 24.04.1 LTS

更新了下系统,然后 SSH 服务莫名其妙挂了,当时是没挂的,隔天才发现
顺便发现不知道什么时候把服务名从 SSHD 改回去了 SSH,直接 systemctl restat sshd 直接找不到服务

连不上各种排查,云上防火墙、本机防火墙什么的都没动过,但还是再次检查
端口公网扫描测试 SSH 监听的端口全部关闭状态
服务器自查发现监听地址是 :::0,也没问题,监听了也是之前的端口,排除防火墙问题,依然是关闭,并且修改 ssh 监听端口重启服务也没生效,此时怀疑 SSH 服务异常,重装了一遍没效果

最后发现是 SSH 有个新的启动方式,systemd socket,而不是传统的 sshd.service
验证了下果然是这个原因

systemctl list-units --type=socket | grep ssh

输出如下

ssh.socket    loaded active listening OpenBSD Secure Shell server socket

把它改回去传统的

systemctl stop ssh.socket
systemctl disable ssh.socket
systemctl restart ssh

这种新的 socket 启动方式允许 systemd 在有连接请求时动态启动 SSH 进程,而不是让 sshd 持续运行,也就是说,在没有 SSH 连接请求的情况下,ssh.socket 不会消耗任何 CPU 和内存资源
systemd 自动处理启动、停止和重启 SSH 服务。systemd 会在收到客户端请求时自动启动 sshd,当连接断开后,它会停止 SSH 服务

ssh.socket 的配置文件在 /lib/systemd/system/ssh.socket,而不是之前的 sshd 的配置文件所在路径
如果需要使用 socket 方式管理 SSH 服务,修改 socket 配置文件后(端口就是这里面定义的),重启 SSH 服务命令需要修改为 socket 方式的命令

systemctl daemon-reload
systemctl restart ssh.socket

奇怪的是可能是更新系统后变更了启动方式或其他原因,但即使是改用了新的启动方式,我也曾本地客户端连过修改前不生效的端口、修改过的端口,也依然是无法脸上,客户端报错是 timeout,nmap 扫描也是返回closed
最后还是改回去了传统的服务管理方式,不缺这点系统资源

评论 (0条)