公司某台服务器不知为何无法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,出现下图错误提示:

openssh禁用DES算法 关闭openssh服务_重启



 

解决过程:

 



一.查看日志:






查看/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等)。