首页/安全/取证与溯源速查/主机密钥指纹与变更检测
Linux 取证135 条

主机密钥指纹与变更检测

主机密钥在安装时生成,指纹用于客户端校验;密钥文件时间异常或整套更换,可能意味着重装、中间人或密钥被替换。

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

主机密钥与变更检测

主机密钥在系统安装或首次启动时生成,客户端首次连接会记录其指纹,之后用于校验对端身份。密钥文件的生成时间与指纹因此成为判断依据:整套密钥的时间戳都很新,通常意味着系统重装或密钥被主动重建;只有一个密钥文件被改动而其他文件时间不变,更值得怀疑。把指纹与资产台账中的登记值比对,是最快能发现密钥被替换的做法,也是识别中间人设备的常用手段。

基本信息

文件/etc/ssh/ssh_host_*_key 及对应的 .pub 公钥
指纹命令ssh-keygen -lf <公钥> -E sha256(-E md5 可对照老格式)
时间基线随系统安装生成,可能因重装或升级被重建
权限基线私钥 600,公钥 644

典型使用场景

  • 把指纹与资产台账比对,确认主机未被替换
  • 排查客户端提示主机密钥变更的真实原因
  • 判断主机是否在事件时间窗内发生过重装
  • 核查是否有单个密钥文件被单独替换的痕迹
  • 为报告提供主机身份的可验证记录

查看时间与指纹

查看时间与指纹
ls -l --time-style=long-iso /etc/ssh/ssh_host_*_key*      # 看密钥生成时间是否一致
for f in /etc/ssh/ssh_host_*_key.pub; do ssh-keygen -lf "$f" -E sha256; done
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub -E md5   # 老格式指纹对照
stat -c '%n %y %a' /etc/ssh/ssh_host_ed25519_key          # 私钥时间与权限
grep -i 'host key' /var/log/secure | tail -5              # 日志中与主机密钥相关的提示

指纹输出读法

字段含义判读要点
位长密钥长度位长过短属历史遗留,建议更新
SHA256 指纹公钥摘要,Base64 形式与台账逐字符比对,不看前缀
注释字段通常为 hostname 或安装信息注释可被修改,不能作为依据
密钥算法rsa、ecdsa、ed25519 等整套密钥时间应基本一致
重新安装 openssh 包或重建镜像可能触发密钥重新生成,出现变更时先查包管理日志与系统安装记录,再判断性质。
公钥与私钥要成对核对:仅比对公钥无法确认私钥是否被替换,可用 ssh-keygen -y 从私钥导出公钥做一致性验证。
客户端 known_hosts 中保留了对端主机的历史指纹,把服务端当前指纹与客户端记录对照,可以判断变更大约发生在哪一次连接之后,是定位变更时间点的常用辅助手段。

易错点

  • 只截取指纹前缀做比对,存在差异时无法定位到具体字节
  • 把密钥注释当成主机名依据,注释被改动后结论随之失效
  • 把重装或升级引起的密钥重建直接判为入侵,缺少旁证
  • 忽略私钥文件时间与权限,只看公钥无法发现私钥被替换

数据来源与参考

  • OpenSSH 手册(ssh-keygen 与主机密钥)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌