SSH 连接失败排障
按超时、拒绝连接、认证失败和指纹变化分支排查,不绕过主机身份校验。
适用范围与前提
OpenSSH 客户端与 Linux sshd;需要服务器控制台时联系管理员。
- 替换 user@example.com 和身份文件路径,仅连接获授权的主机。
- 调试输出可能包含用户名、地址和文件路径;不要分享私钥。
- 服务端排查通过已有可信会话或控制台进行,保留可回退的登录通道。
命令仅供手动复制到获授权的环境执行。站点不会连接服务器;涉及网络的诊断可能产生请求或登录审计记录。
1. 用有限超时区分失败阶段
ssh -vvv -o ConnectTimeout=10 user@example.com预期现象:会发起实际连接。区分连接超时、拒绝连接、Permission denied 与 REMOTE HOST IDENTIFICATION HAS CHANGED。
- 连接超时或拒绝连接 → 通过控制台检查服务与监听
- 认证失败 → 检查实际配置与本地文件权限
- 主机指纹变化 → 独立核验服务端主机指纹
2. 通过控制台检查服务与监听
sudo ss -ltnp
systemctl status sshd --no-pager
sudo journalctl -u sshd -n 100 --no-pager预期现象:部分发行版服务名为 ssh。确认端口、监听地址、路由与访问策略;超时不一定由 sshd 引起。
- 服务、端口或策略不符预期 → 修复建议(需人工确认)
- 无法访问控制台或网络路径不明 → 升级求助前收集
3. 检查实际配置与本地文件权限
ssh -G user@example.com
ls -ld ~/.ssh
ls -l ~/.ssh/config ~/.ssh/id_ed25519预期现象:确认 user、hostname、port、identityfile;检查属主和权限。服务端由管理员核对 authorized_keys、账号状态及认证日志,不盲目修改权限。
- 用户、密钥路径或权限配置不正确 → 修复建议(需人工确认)
- 配置正确仍被拒绝 → 升级求助前收集
4. 独立核验服务端主机指纹
sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub预期现象:在服务端可信控制台执行,算法应与客户端提示一致。通过独立可信渠道对照指纹,变化可能源自合法重建,也可能是中间人风险。
- 管理员确认合法变更且指纹一致 → 修复建议(需人工确认)
- 无法确认或指纹不符:停止连接 → 升级求助前收集
修复建议(需人工确认)
- 由管理员核对服务、路由和最小必要访问策略,不关闭防火墙或 SELinux 绕过问题。
- 修复用户、密钥路径、属主或权限前先备份配置并确认影响,不开启 agent forwarding 作为通用修复。
- 仅在独立确认合法主机密钥变更后,备份 known_hosts 并人工更新对应记录;不得禁用 StrictHostKeyChecking。
验证恢复
- 使用正常主机身份校验重新登录,确认用户名与目标主机身份。
- 需要修改 sshd 时先检查语法并保留原会话,由管理员在新会话验证恢复后再结束旧会话。
升级求助前收集
- 脱敏连接阶段错误、目标端口、服务日志、独立核验的公开主机指纹及近期变更。