关键排查方法
- 客户端调试: 使用 ssh -v 参数查看详细连接过程
- 服务器日志: 检查 /var/log/secure 或 journalctl -u sshd 获取服务器端错误
- 权限验证: 系统性检查文件和目录权限
- 密钥验证: 使用 ssh-keygen -y 验证密钥对匹配性
预防措施
- 定期备份密钥: 避免密钥丢失导致无法访问
- 使用现代密钥算法: 推荐使用 ED25519 而非 RSA
- 保持权限正确: 使用自动化脚本定期检查关键文件权限
- 启用多种认证方式: 配置密码认证作为备用方案
- 监控 SSH 日志: 及时发现异常登录尝试
常见 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 启用算法 |
| 密钥不匹配 | 认证失败 | 验证并更换正确的密钥对 |
私钥文件权限问题
错误信息:
WARNING: UNPROTECTED PRIVATE KEY FILE!
Permissions 0644 for 'xxxxx.pem' are too open.
问题分析:
- 私钥文件权限为 0644(所有用户可读)
- SSH 安全机制要求私钥文件仅所有者可访问
解决措施:
chmod 400 /home/test/xxxx.pem
密钥匹配性验证
排查步骤:
- 确认正确的私钥文件路径
- 验证私钥与服务器公钥是否匹配
- 验证命令:
# 本地生成公钥指纹
ssh-keygen -y -f /home/test/xxxx.pem
# 服务器端查看授权公钥
cat /home/ec2-user/.ssh/authorized_keys服务器端配置问题定位
查看服务器 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
评论 (0)