首页/安全/取证与溯源速查/SSH 私钥与公钥一致性核对
Linux 取证135 条

SSH 私钥与公钥一致性核对

用 ssh-keygen -y 从私钥导出公钥并与 .pub 比对,可确认私钥是否被替换;密钥文件权限异常宽松也是重要信号。

取证与溯源速查安全更新于 2026-10-13

私钥与公钥的一致性核对

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_keys600过宽权限同样会被 sshd 忽略
known_hosts644 或 600被改动可能反映主机密钥更换
私钥带口令时导出会在提示处等待输入,取证阶段无法提供口令就得不到比对结果,此时可改用公钥指纹与登录日志中的记录做间接核对。
authorized_keys 中的公钥与登录日志中的指纹是两条不同的证据线:前者说明允许谁登录,后者说明实际用了哪把密钥,报告里要分别说明再合并结论。
在不受控环境执行导出会把密钥材料带入现场之外的系统,比对应在受控分析机上进行,导出结果也不要粘贴到即时通讯工具里。

易错点

  • 只比对公钥文件,无法发现私钥被单独替换
  • 在权限过宽的场景下反复排查登录失败,忽略 ssh 主动拒绝
  • 把 authorized_keys 的允许记录当成实际登录证据
  • 在个人电脑上导出私钥做比对,密钥材料发生二次扩散

数据来源与参考

  • OpenSSH 手册(ssh-keygen -y)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌