
一、SSH登录失败,先分清是"连不上"还是"连上了被拒"
服务器远程维护大多靠SSH(安全加密连接协议)。一旦SSH登录失败,别慌,先看报错类型——"连都没连上"和"连上了但认证不过",排查方向完全是两回事。
常见报错就两类方向:一类是 Connection timed out(超时)、Connection refused(拒绝),说明没建立连接;另一类是 Permission denied (publickey,password)(认证被拒)、Host key verification failed(主机密钥不匹配),说明网络通了但卡在认证或安全校验。下面按"网络→服务→认证→安全策略"四层来排。
二、第一层:网络通不通
先确认是不是网络问题——服务器根本ping不到,或端口不通,就谈不上登录:
ping 服务器IP:不通先查网络/防火墙/云安全组是否放行。telnet 服务器IP 22或nc -vz IP 22:看22端口是否开放。连不上通常是:云服务器安全组没放行22、本地改成非标准端口、或防火墙堵了。- 若你能从"云控制台/带外管理"远程也能连上(说明服务器活着,只是SSH链路问题),就聚焦网络层。
三、第二层:SSH服务在不在、地址对不对
网络通了但 Connection refused,多半是sshd服务没起或监听地址不对:
- 服务器上查
systemctl status sshd(或ssh):确认服务在running。 ss -tlnp | grep 22:看22口是否在监听。若监听在127.0.0.1而不是0.0.0.0,外部就连不上。- 刚改过sshd_config重启失败,也会出现"服务没起来",用
sshd -t检查配置有没有语法错误。
四、第三层:认证失败(最常见的Permission denied)
提示 Permission denied (publickey,password),说明网络、服务都正常,是密钥或密码没通过。按源码排查:
| 原因 | 关键点 | 解决 |
|---|---|---|
| 密码错/被禁用password | sshd_config里PasswordAuthentication no | 改用密钥或临时开密码 |
| 密钥没去服务器注册 | ~/.ssh/authorized_keys缺失 | 把公钥追加进authorized_keys |
| 密钥权限过宽 | 各种文件/目录权限不对拒绝 | chmod 600 ~/.ssh/authorized_keys,目录700 |
| 本地用的私钥不对 | 路径/机型与服务器不匹配 | ssh -i 指定正确的私钥 |
密钥登录被拒最常见的是权限问题:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
如果之前能用,现在突然报 publickey 被拒,很有可能是改了sshd_config或authorized_keys被覆盖了。
五、第四层:安全策略拦了
网络和认证都正常仍失败,或表现是"偶发连不上、换个IP能连",就要看安全策略:
- fail2ban锁了IP:多次输错被自动封禁,报 unexpected eof 或 refused。查
fail2ban-client status sshd,发现的IP用fail2ban-client unban IP解封。 - AllowUsers/DenyUsers限制:sshd_config里限制了可登录用户,你的账号不在白名单。
- 来源IP仅限白名单(云安全组/firewalld):只允许特定IP接入22口。
- Host key verification failed:服务器系统重装或还原后密钥变了,本地known_hosts存的是旧指纹。解决办法是清掉旧记录重新认证:
ssh-keygen -R 服务器IP。
六、SSH加固建议(治本)
排查完之后,顺手把SSH安全做扎实,能省掉以后大量麻烦:
- 改默认端口并限制仅公钥登录(关掉root直接密码登录),配合fail2ban防爆破。
- 只开放需要管理的来源IP,减少暴露面。
- 定期备份 ~/.ssh/authorized_keys,避免误删密钥把自己锁在外面;同时在云控制台保持一个能用的备用登录通道。
一句话:SSH失败按"网络→服务→认证→策略"四层走,九成能在前三层解决。真到了密钥全废、密码又忘的极端情况,还能靠云控制台的VNC/带外管理先登进服务器,密码再重置,不会彻底进不去。建议日常就把密钥和带外登录通道都备好,SSH这类问题就不会变成停机事故。
延伸阅读:

