在实际运维过程中需要对linux操作系统的openssh版本进行升级,相关升级方式可参考
Openssh-8.5p1版本tar包方式升级步骤_好好学习之乘风破浪的博客-CSDN博客
但前期升级过程中在执行到最后有如下操作
mv /lib/systemd/system/sshd.service /lib/systemd/system/sshd.service.bak
导致我们sshd的服务开机自启动会启动在sshd.socket 服务上,而实际上我们重启sshd.service服务后会发现服务启动异常,提示报错22端口被占用。以下是之前排查的记录情况:
检查ssh.service 服务提示状态为inactive,开机自启动服务为bad状态
而我们发现sshd.socket服务状态为active,开机自启动服务为enable
而且22端口为systemd所占用
并且发现服务并不影响ssh登录问题
但重启sshd.service服务会提示失败,显示端口被占用了,该报错进而会在/var/log/message日志里面体现,如果有监控检查日志会日志提示该告警
所以如果想启动sshd.service服务需要进行如下操作
1.确认/usr/lib/systemd/system/目录下是否有sshd.service文件,如果不存在需要touch 一个,否则sshd 将不会开机自启
2.将sshd.socket服务关闭,并将开机自启动服务设置成disable
# systemctl stop sshd.socket && systemctl disable sshd.socket
3.将sshd.service服务开启,并设置开机自启动服务
# systemctl start sshd.service && systemctl enable sshd.service
这样就避免后续因sshd.socket服务使用了22端口后运维直接启动sshd.service 服务提示报错造成告警。
另外我们针对版本升级方面,sshd.service服务和sshd.socket服务,做了简单了解
首先旧有的方式 sshd.service 模式会在后台保持一个 sshd 的守护进程,每当有 ssh 连接要建立时,就创建一个新进程,比较适合 SSH 下有大量流量的系统;
新的 sshd.socket 方式也是在每次要建立新的ssh连接时生成一个守护进程的实例,不过监听端口则是交给了 systemd 来完成,意味着没有 ssh 连接的时候,也不会有 sshd 守护进程运行,大部分情况下,使用 sshd.socket 服务更为合适。
通过使用 .socket 文件来管理需要监听端口的服务,可以直接通过 systemctl 来查看一些y网络相关的信息,如监听的端口、目前已经接受的连接数、目前正连接的连接数等。
这两种服务的方式我都在自己的机器上进行了测试,均可进行ssh连接,并且没有问题,主要是看需求使用哪种ssh的监听方式。不管是sshd.service还是sshd.socket 只要有一个启动就可以。