SSH 连不上怎么分流排查
SSH 连不上时,报错文本已经把问题分成两条路径:连接被拒绝(refused)说明网络可达但端口上没有服务或访问被明确拒绝,方向是查服务状态、端口与监听地址;连接超时(timeout)说明报文被丢弃或链路不通,方向是查网络连通性、防火墙与安全组。先把两类情况分开,再谈具体修复,能省下大量来回试错的时间。
基本信息
| 客户端详查 | ssh -vvv 输出握手过程与失败点 |
|---|---|
| 服务端检查 | ss -lntp 看监听,systemctl status 看服务状态 |
| 端口变更 | 改过端口时需同步放行新端口 |
| 监听地址 | ListenAddress 只绑内网时外部无法连接 |
| 两端记录 | 服务端认证与连接日志可对照 |
典型使用场景
- 远程登录失败,需要快速区分是服务问题还是网络问题
- 服务器重启后 SSH 未自动启动,导致无法远程管理
- 修改端口后忘记更新防火墙规则,连接被拒或超时
- 云主机安全组未放行导致连接一直卡住
- 批量终端无法登录排查,对比可登录与不可登录机器的差异
- 排障前评估自身通道风险,避免把管理通道也改坏
- 为带外管理与串口备路做准备,作为远程通道不可用时的兜底
按报错分流
按报错分流
ssh -vvv user@host 2>&1 | tail -20 # 客户端详细过程
# 服务端侧检查:
ss -lntp | grep sshd # 端口与监听地址
systemctl status sshd --no-pager | head # 服务是否运行
systemctl enable sshd # 设置为开机自启
firewall-cmd --list-all 2>/dev/null | grep -A3 ssh # 防火墙规则
# 改过端口的场景:firewall-cmd --add-port=2222/tcp --permanent
# firewall-cmd --reload
# 从其它机器测试端口可达性:
# nc -vz <服务器IP> 22
tail -50 /var/log/secure 2>/dev/null | grep -iE 'fail|refus|denied'两类报错对照
| 报错 | 含义 | 排查方向 |
|---|---|---|
| Connection refused | 端口可达但无服务或明确拒绝 | 服务状态、端口、监听地址 |
| Connection timed out | 报文被丢弃或链路不通 | 网络连通性、防火墙、安全组 |
| No route to host | 路由或地址层问题 | 地址配置、网段与网关 |
| Permission denied | 认证失败 | 账号、密钥、认证方式与权限 |
| Network is unreachable | 本机网络未就绪 | 本机网卡与路由表 |
远程修改 sshd 配置前保留一个已登录会话,改完先做配置语法校验再重载:一旦改错又没有备用通道,就只能依赖带外管理或串口恢复。
云安全组与系统防火墙是两层独立防护,只查其中一层很容易得出错误结论;排查清单里应把两层都列出来逐条确认。