SSH 登录指纹与密钥比对
sshd 在登录成功时会把所用密钥的指纹写进日志:公钥认证成功的记录里带有密钥类型与 SHA256 指纹。把日志中的指纹与服务器上授权文件里各条密钥逐一计算出的指纹做对照,就能确定这次登录究竟用了哪一把密钥,而不只是知道“用了密钥登录”。
基本信息
| 日志特征 | Accepted publickey for <用户> from <地址> port <端口> ssh2: <类型> SHA256:<指纹> |
|---|---|
| 计算指纹 | ssh-keygen -lf <文件> -E sha256 |
| 对照对象 | 目标账号的 authorized_keys,包含其中的选项与备注 |
| 来源限定 | 密钥前的 from= 等选项可能限制允许登录的地址 |
| 例外情况 | 证书认证记录的是证书标识,不是密钥指纹 |
典型使用场景
- 判断某次成功登录使用的是哪一把密钥
- 排查是否有未登记的密钥被加入授权列表
- 核对密钥的来源限制选项是否被放宽或移除
- 清理离职人员与历史遗留的授权密钥
- 结合账号归属,判断这次登录行为是否异常
比对指纹
比对指纹
grep 'Accepted publickey' /var/log/auth.log | tail -5 # 日志中记录的指纹
ssh-keygen -lf ~/.ssh/authorized_keys -E sha256 # 逐条计算本地指纹
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub -E sha256 # 主机密钥指纹,用于确认服务端
ls -l --time-style=long-iso ~/.ssh/authorized_keys # 授权文件的改动时间
awk '{print $1, $NF}' ~/.ssh/authorized_keys | head # 查看密钥类型与备注要素读法
| 要素 | 含义 | 解读要点 |
|---|---|---|
| 密钥类型 | 标记密钥所用算法 | 与授权文件中的条目对应 |
| SHA256 指纹 | 密钥的唯一标识 | 与本地计算结果逐字比对 |
| 来源地址 | 本次登录的对端地址 | 与密钥的来源限制一起看 |
| 证书标识 | 使用证书时的记录形式 | 需回到签发配置核对,而非比对密钥 |
密钥登录成功只能说明使用了某把密钥,不能证明操作者就是密钥所有者:密钥可能被复制、共享或窃取。判断责任时还要结合来源地址、登录时段与会话行为一起看。
不同平台与工具输出的指纹在大小写、是否带分隔符上略有差异,比对前先统一格式,否则会把同一把密钥判成两个不同结果,进而得出错误结论。