CentOS SSH突然拒绝连接,排查/var/log/secure五类报错
午饭刚扒两口,手机叮叮狂响,开发群里一排红字:跳板机连不上了。我端着碗冲进书房,笔记本一开,XShell直接弹回“Connection refused”。这台CentOS7机器跑了三年,从没闹过脾气,今天说翻脸就翻脸。别急着重启,先查/var/log/secure,它记了SSH所有翻脸细节。下面把最常被问到的五类报错一次性摆出来,照抄命令就能用,省得你再去论坛翻老帖。

一、Failed password for root from 192.168.x.x port 56322 ssh2
这条几乎每秒刷一行,IP来自海外,明显是暴力撞库。系统没挂,只是被fail2ban或DenyHosts把端口封了。先看防火墙:
iptables -L -n | grep 56322
如果看到DROP动作,说明IP已被拉黑。临时放行自己办公网段:
iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT
再改SSH端口并开密钥登录,省得天天跟脚本小子打太极:

vi /etc/ssh/sshd_config
把Port 22改成Port 2222,重启服务:
systemctl restart sshd
二、User root not allowed because listed in DenyUsers
这条一出,说明sshd_config里有人把root写进了黑名单。翻配置:
grep -i denyusers /etc/ssh/sshd_config

如果返回DenyUsers root,直接注释掉或改成允许你自己的普通账号,再配sudo。改完重启sshd,立刻能进。别图省事留root可登,审计过不去。
三、Authentication refused: bad ownership or modes for directory /home/alex/.ssh
密钥登录突然失效,九成是权限被同事手滑改掉。SSH对.ssh目录比银行还挑剔:用户属主必须是本人,目录755,私钥600,公钥644。一键修复:
chown -R alex:alex /home/alex/.ssh && chmod 700 /home/alex/.ssh && chmod 600 /home/alex/.ssh/ && chmod 644 /home/alex/.ssh/.pub
修完再连,绿色对勾立刻回来。
四、error: Could not load host key: /etc/ssh/sshhostrsa_key
系统被重装过或密钥文件误删,sshd找不到“身份证”,直接拒绝所有握手。重建密钥只要三行:
ssh-keygen -t rsa -f /etc/ssh/sshhostrsa_key -N ""
ssh-keygen -t ecdsa -f /etc/ssh/sshhostecdsa_key -N ""
ssh-keygen -t ed25519 -f /etc/ssh/sshhosted25519_key -N ""
重启服务,客户端第一次会提示指纹变更,确认即可。
五、PAM authentication error: Module is unknown
这条最坑,通常是你装了某安全Agent,它向/etc/pam.d/sshd里塞了自家so文件,后来卸载时没清理,导致PAM找不到模块,登录直接被拍死。临时抢救:
vi /etc/pam.d/sshd
把带unknown.so的那行注释掉,保存退出,sshd立刻复活。之后找厂商要卸载脚本,别手动删so,容易留坑。
排查顺序小结
1. 先确认端口通不通:telnet IP 22,不通就看防火墙、云安全组。
端口通却返回拒绝,立刻tail secure:tail -f /var/log/secure,实时刷日志。
根据关键词匹配上面五类,90%能在十分钟内定位。
改配置前记得cp备份:cp sshdconfig sshdconfig.bak,手残党福音。
修完用另一终端开新会话,别把自己锁门外。
/var/log/secure不会说谎,它说“no”,你就别硬敲密码了,先看清理由再动手,比盲目重启省下半个小时。
