项目场景:
业务侧升级openssh导致主机失联,无法远程访问。
问题描述:
查看sshd服务进程显示正在运行中,但是Loaded 路径无效,
[root@ansible ~]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (ERROR)
Active: active (running) since Thu 2022-07-07 14:01:23 CST; 4 days ago Docs: man:sshd(8)
man:sshd_config(5)
重启sshd服务提示
[root@AnQuanGuanLi-2019-11 ~]# systemctl restart sshd
Unit sshd.service could not be found.
关闭sshd服务在启动提示
[root@AnQuanGuanLi-2019-11 ~]# systemctl start sshd
Unit sshd.service could not be found.
原因分析
根据故障现象,进行了逐一排查,发现业务侧升级openssh服务导致路径与系统默认识别不符。
第一、可能openssh服务安装异常。检查openssh安装程序。检查发现当前有安装openssh服务
[root@AnQuanGuanLi-2019-11 ~]# rpm -qa | grep openssh
openssh-clients-7.4p1-16.el7.x86_64
openssh-server-7.4p1-16.el7.x86_64
openssh-7.4p1-16.el7.x86_64
第二、检查当前系统运行SSH版本
[root@AnQuanGuanLi-2019-11 /]# ssh -V
OpenSSH_8.5p1, OpenSSL 1.1.1j 16 Feb 2021
第三、检索当前运行ssh服务安装路径
[root@AnQuanGuanLi-2019-11 /]# find / -iname openssh-8.5p1
/usr/local/openssh-8.5p1
/usr/openssh-8.5p1
处理步骤
使用命令启动/usr/openssh-8.5p1下的sshd服务
[root@AnQuanGuanLi-2019-11 ~]# /usr/bin/sshd
查看ssh服务是否启动,查看发现sshd服务已启动
[root@AnQuanGuanLi-2019-11 ~]# netstat -ntlp | grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 169409/sshd: /usr/b
openssh服务默认禁止root远程登陆
需要进入当前运行的sshd服务里修改sshd_config文件
[root@AnQuanGuanLi-2019-11 ~]# vim /usr/openssh-8.5p1/sshd_config
#PermitRootLogin prohibit-password 将默认的配置复制一条
PermitRootLogin yes 修改为允许登陆
找到当前运行的sshd服务,使用kill -9 杀掉行程,重新启动,使配置生效。
[root@AnQuanGuanLi-2019-11 ~]# kill -9 169409
使用命令启动/usr/openssh-8.5p1下的sshd服务
[root@AnQuanGuanLi-2019-11 ~]# /usr/bin/sshd
查看ssh服务是否启动,查看发现sshd服务已启动
[root@AnQuanGuanLi-2019-11 ~]# netstat -ntlp | grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 169409/sshd: /usr/b
结果验证
使用CRT 相关远程登陆远程测试。
知识拓展
linux中service *** start与直接运行/usr/bin/***的区别
在linux想要运行启动一个服务有两种方法:
1,运行/etc/init.d/目录下的shell脚本,还可以有快捷方式,service *** start/ stop/restart /status,
2,直接运行/usr/bin目录下的服务文件;
第一种方法启动的程序可以通过service命令来管理,比如说查看状态 service --status-all
查看/etc/init.d目录,发现下面都是shell脚本,脚本里面运行的程序最终还是指向了/usr/bin下面的程序,只不过在shell脚本中可能直接对程序的一些运行参数继续进行了设置;
第二种方法,直接运行/usr/bin/****,如果运行时有配置文件的话,需要加上 --config *****,用这种方法启动程序后,不能用service命令查看状态;