Linux服务器,ssh服务突然失效的解决方法

本文记录了一次SSH服务故障排查及修复过程,详细介绍了从检查到最终通过编译方式重装openssh解决无法ssh连接的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司某台服务器不知为何无法ssh连接上,进入现场查看:

1.执行netstat -atnlp|grep ssh,没有找到ssh端口

2.执行ps aux|grep ssh,没找到相关进程

3.执行service sshd start,显示绿色的OK,但用ps和netstat看不到ssh任何信息,echo $?结果为0 

4.执行service sshd status,显示:openssh-daemon is stopped

4.执行service sshd stop,无报错信息,echo $?结果为0

5.执行service sshd restart,出现下图错误提示:

 


 

解决过程:

 

一.查看日志:

 

查看/var/log/messages,和/var/log/secure文件内容

(目的:查看SSH的所有相关日志信息,以便于分析,但发现这两个文件被删掉了)

用touch命令重新建立messages和secure文件,再重启sshd服务,但这两个文件内容依旧为空。(先不管它)

 

二.用yum重新安装(没成功):

 

1.用 rpm -qa | grep openssh 查看有哪些ssh包

    #rpm -qa | grep openssh

    openssh-server-5.3p1-94.el6.x86_64

    openssh-clients-5.3p1-94.el6.x86_64

    openssh-5.3p1-94.el6.x86_64

    openssh-askpass-5.3p1-94.el6.x86_64

 

2.用 yum remove openssh-server 把软件包删掉,其他的openssh包保险起见没删,怕全删了会因依赖关系包被删,进而影响其他业务的运行。

 

3.用yum install openssh-server 重新安装该包,操作完成后,用service sshd start 发现和当初一样,start是OK状态,但服务起不来。

 

三.改用编译方式重装openssh(成功):

 

1.首先用yum remove openssh-server删掉原先的包,在openssh官网下载高版本:

http://www.openssh.com/openbsd.html

(我用的是openssh-7.3p1.tar.gz,在官网没找到,所以在csdn下载了该包)

 

2.编译安装:

tar -xvzf openssh-7.3p1.tar.gz  -C  /opt  &&  cd /opt/openssh-7.3p1

./configure && make && make install

    【编译参数可参考:http://www.2cto.com/os/201703/615376.html

    【 ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-tcp-wrappers --with-ssl-dir=/usr/local/ssl --without-hardening

 

3.拷贝ssh服务文件:

cp ./contrib/redhat/sshd.init /etc/init.d/sshd

chmod +x /etc/init.d/sshd

 

4.修改SSHD服务文件:

vim /etc/init.d/sshd

修改以下内容

SSHD=/usr/sbin/sshd 为 SSHD=/usr/local/sbin/sshd    【25行】

/usr/sbin/ssh-keygen -A 为 /usr/local/bin/ssh-keygen -A    【41行】

保存退出

 

5.加入系统服务:

chkconfig --add sshd

 

查看系统启动服务是否增加改项

    chkconfig --list |grep sshd

    sshd               0:off    1:off    2:on    3:on    4:on    5:on    6:off 

 

6.允许root用户远程登录:

cp sshd_config /etc/ssh/sshd_config

vim /etc/ssh/sshd_config 修改 PermitRootLogin yes,并去掉注释

 

7.配置允许root用户远程登录:

这一操作很重要!很重要!很重要!重要的事情说三遍,因为openssh安装好默认是不执行sshd_config文件的,所以即使在sshd_config中配置允许root用户远程登录,但是不加上这句命令,还是不会生效!

vim /etc/init.d/sshd

在 ‘$SSHD $OPTIONS && success || failure’这一行【51行】上面加上一行 :

OPTIONS="-f /etc/ssh/sshd_config"  

保存退出

 

执行:service sshd start,出现绿色的OK,

执行:service sshd status,此时出现了以下错误信息:

error: sshd dead but subsys locked

解决方法:

rm -rf /dev/null

mknod /dev/null c 1 3

 

再次启动后,出现了sshd is running,端口和进程都出现了:

service sshd start 

service sshd status

       sshd is running......

 

端口和进程都出现了:

ps aux|grep ssh

netstat -atnlp|grep ssh

 

搞定。

 

总结:故障原因未知。用yum方式安装的ssh服务启动不成功,可能是某些与SSH相关联的进程需要通过重启系统才生效(生产环境不允许随便重启系统)。而编译方式安装的ssh,与之前的进程没有关联,所以能启动成功。

至于为何ssh服务会出现故障,暂无法查出原因。编译openssh的时候,可以根据需要添加参数(--with-pam,--with-tcp-wrappers等)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值