SSH 连接故障处理报告
故障概述
- 故障时间: 2025年11月28日 15:12 - 15:27
- 故障服务器: x.x.x.x
- 故障现象: 无法通过 SSH 密钥认证登录 ec2-user 账户
- 错误信息:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
故障排查过程
第一阶段:私钥文件权限问题 (15:12-15:14)
初始错误:
WARNING: UNPROTECTED PRIVATE KEY FILE!
Permissions 0644 for 'xxxxx.pem' are too open.问题分析:
- 私钥文件权限为 0644(所有用户可读)
- SSH 安全机制要求私钥文件仅所有者可访问
解决措施:
chmod 400 /home/test/xxxx.pem结果: 权限警告消失,但认证仍然失败
第二阶段:密钥匹配性验证 (15:15-15:18)
排查步骤:
- 确认正确的私钥文件路径
- 验证私钥与服务器公钥是否匹配
验证命令:
# 本地生成公钥指纹
ssh-keygen -y -f /home/test/xxxx.pem
# 服务器端查看授权公钥
cat /home/ec2-user/.ssh/authorized_keys验证结果: 公钥完全匹配,确认私钥正确
第三阶段:服务器端配置问题定位 (15:18-15:25)
关键发现:
通过查看服务器 SSH 日志 (/var/log/secure),发现两个关键错误:
- 目录权限错误:
Authentication refused: bad ownership or modes for directory /home/ec2-user- 密钥算法不支持:
userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]根本原因分析
原因1:用户主目录权限配置错误
问题详情:
/home/ec2-user目录的所有权或权限不符合 SSH 安全要求- SSH 要求用户主目录及
.ssh目录必须有严格的权限控制
SSH 权限要求:
- 用户主目录: 755 权限,所有者为用户本人
.ssh目录: 700 权限,所有者为用户本人authorized_keys文件: 600 权限,所有者为用户本人
原因2:SSH 服务器禁用了 RSA 算法
问题详情:
- 服务器 SSH 配置中未包含
ssh-rsa算法 - 客户端使用的是 RSA 类型的密钥
- 新版本 OpenSSH (8.8+) 默认禁用了 SHA-1 相关的 RSA 算法
解决方案
完整修复命令
在服务器端以 root 用户执行:
# 1. 修复 ec2-user 主目录权限
chown ec2-user:ec2-user /home/ec2-user
chmod 755 /home/ec2-user
# 2. 修复 .ssh 目录权限
chmod 700 /home/ec2-user/.ssh
chmod 600 /home/ec2-user/.ssh/authorized_keys
chown -R ec2-user:ec2-user /home/ec2-user/.ssh
# 3. 启用 ssh-rsa 算法支持
echo "PubkeyAcceptedAlgorithms +ssh-rsa" >> /etc/ssh/sshd_config
# 4. 重启 SSH 服务
systemctl restart sshd验证结果
修复后成功连接:
ssh -o IdentitiesOnly=yes -i xxxx.pem ec2-user@x.x.x.x连接成功,问题完全解决。
经验总结
关键排查方法
- 客户端调试: 使用
ssh -v参数查看详细连接过程 - 服务器日志: 检查
/var/log/secure或journalctl -u sshd获取服务器端错误 - 权限验证: 系统性检查文件和目录权限
- 密钥验证: 使用
ssh-keygen -y验证密钥对匹配性
常见 SSH 认证失败原因
| 问题类型 | 症状 | 解决方法 |
|---|---|---|
| 私钥权限过开放 | UNPROTECTED PRIVATE KEY FILE | chmod 400 私钥文件 |
| 主目录权限错误 | bad ownership or modes | chmod 755 ~ + chown user:user ~ |
| .ssh 目录权限错误 | Authentication refused | chmod 700 ~/.ssh |
| authorized_keys 权限错误 | 认证失败无明确提示 | chmod 600 ~/.ssh/authorized_keys |
| 密钥算法不支持 | key type not in PubkeyAcceptedAlgorithms | 修改 sshd_config 启用算法 |
| 密钥不匹配 | 认证失败 | 验证并更换正确的密钥对 |
预防措施
- 定期备份密钥: 避免密钥丢失导致无法访问
- 使用现代密钥算法: 推荐使用 ED25519 而非 RSA
- 保持权限正确: 使用自动化脚本定期检查关键文件权限
- 启用多种认证方式: 配置密码认证作为备用方案
- 监控 SSH 日志: 及时发现异常登录尝试
安全建议
- 修复完成后,建议生成新的 ED25519 密钥对:
ssh-keygen -t ed25519 -C "your_email@example.com"- 考虑移除
PubkeyAcceptedAlgorithms +ssh-rsa配置,改用更安全的密钥类型 - 定期审计
authorized_keys文件,移除不再使用的公钥
附录:相关配置文件
SSH 客户端配置 (~/.ssh/config)
Host aliyun-server
HostName x.x.x.x
Port xx
User ec2-user
IdentityFile xxxxxx.pem
IdentitiesOnly yesSSH 服务器关键配置 (/etc/ssh/sshd_config)
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PubkeyAcceptedAlgorithms +ssh-rsa
StrictModes yes报告生成时间: 2025年11月28日 15:27
故障解决时长: 15分钟
故障级别: P2 (服务不可用)
处理状态: 已解决