公司某台服务器不知为何无法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等)。
参考资料:http://www.cnblogs.com/wuling129/p/5072965.html