私钥与公钥的一致性核对
ssh-keygen -y 可以从私钥导出对应的公钥,把它与 .pub 文件比对就能确认私钥是否被替换过;只比对公钥无法做到这一点,因为公钥被换掉后仍可能是「自洽」的。另一条线索是密钥文件的权限:私钥正常为 600、.ssh 目录为 700,权限过宽意味着同机其他用户可能读到私钥,OpenSSH 本身也会直接拒绝使用权限过宽的私钥。两件事合起来看,才对密钥文件的完整性给出可靠结论。
基本信息
| 核对命令 | ssh-keygen -y -f <私钥>,与 .pub 内容比对 |
|---|---|
| 权限基线 | 私钥 600,.ssh 目录 700,authorized_keys 600 |
| 限制条件 | 私钥带口令时导出会提示输入口令,取证阶段不一定可获得 |
| 注意 | authorized_keys 中的公钥要单独核对指纹 |
典型使用场景
- 确认主机上的私钥是否与公钥文件配套
- 检查是否存在私钥被替换后仍能正常登录的情况
- 排查密钥文件权限过宽导致登录失败的问题
- 比对 authorized_keys 中的公钥与登录日志里的指纹
- 评估密钥是否在事件时间窗内被改动过
核对与权限检查
核对与权限检查
ssh-keygen -y -f ~/.ssh/id_ed25519 2>/dev/null \
| diff - <(cut -d' ' -f1,2 ~/.ssh/id_ed25519.pub) # 私钥导出与公钥比对
stat -c '%a %U:%G %n' ~/.ssh ~/.ssh/* 2>/dev/null # 目录与文件权限
ssh-keygen -lf ~/.ssh/id_ed25519.pub -E sha256 # 公钥指纹
find ~/.ssh -type f -newermt '-30 days' 2>/dev/null # 近期被改动的密钥文件
ls -l ~/.ssh/authorized_keys 2>/dev/null # 授权公钥文件状态权限与文件读法
| 对象 | 基线权限 | 异常含义 |
|---|---|---|
| 私钥文件 | 600 | 过大权限会被 ssh 拒绝使用或泄露风险 |
| 私钥目录 | 700 | 目录可写意味着可被替换 |
| authorized_keys | 600 | 过宽权限同样会被 sshd 忽略 |
| known_hosts | 644 或 600 | 被改动可能反映主机密钥更换 |
私钥带口令时导出会在提示处等待输入,取证阶段无法提供口令就得不到比对结果,此时可改用公钥指纹与登录日志中的记录做间接核对。
authorized_keys 中的公钥与登录日志中的指纹是两条不同的证据线:前者说明允许谁登录,后者说明实际用了哪把密钥,报告里要分别说明再合并结论。
在不受控环境执行导出会把密钥材料带入现场之外的系统,比对应在受控分析机上进行,导出结果也不要粘贴到即时通讯工具里。