排查公钥授权
写入 authorized_keys 是最常见的持久化手段之一:无需口令、不会产生口令错误日志,还可以只对特定来源地址生效。排查不能只找默认路径,因为 sshd 的 AuthorizedKeysFile 可以改到任意位置,容器与镜像挂载目录下同样可能藏着密钥文件。
基本信息
| 搜索目标 | authorized_keys 以及其它公钥文件 |
|---|---|
| 默认位置 | /root/.ssh 与 /home/<用户>/.ssh |
| 可配置项 | sshd_config 中的 AuthorizedKeysFile |
| 扩展搜索 | .ssh 目录、id_*.pub 以及非默认路径 |
| 记录方式 | 对每份文件计算哈希,记录密钥条数与注释 |
| 权限要求 | 读取其它用户家目录需要 root |
典型使用场景
- 确认是否存在未授权的密钥登录途径
- 核对密钥注释与来源是否符合运维规范
- 分析新增密钥的时间与所属账号
- 与认证日志中的密钥登录记录对照
- 清除时按流程逐条评估影响
最小示例
最小示例
find / -xdev \( -name authorized_keys -o -name 'id_*.pub' \) 2>/dev/null | head -30
find / -xdev -type d -name .ssh 2>/dev/null | head # 所有 .ssh 目录
sshd -T 2>/dev/null | grep -i authorizedkeysfile # 确认实际搜索路径
ls -l --time-style=long-iso /root/.ssh/ 2>/dev/null
sha256sum /root/.ssh/authorized_keys 2>/dev/null
awk '{print $1, $3}' /root/.ssh/authorized_keys 2>/dev/null | head # 类型与注释观察项与要点
| 观察项 | 含义 | 注意 |
|---|---|---|
| 文件位置 | 授权文件所在路径 | 非默认路径更值得警惕 |
| 密钥类型 | ssh-ed25519、ssh-rsa 等 | 老旧类型需评估合规性 |
| 注释字段 | 通常含生成者信息 | 应与实际人员核对 |
| 文件时间戳 | mtime 与 ctime | 新增密钥的时间线索 |
| 行首选项 | command、from 等限制 | 会改变登录行为,需单独看 |
对每份 authorized_keys 计算哈希并记录条数与注释,便于后续对比与说明改动范围。
搜索单个文件系统要用 -xdev,否则会跨挂载点;多分区主机需要对每个挂载点分别执行。
容器与镜像挂载目录下同样可能存在密钥文件,排查范围要覆盖这些路径,不要只扫根文件系统。
密钥注释里常带主机名或工单号,可与变更记录交叉核对;注释为空或内容异常的密钥应优先处理。
删除密钥前先在报告中固化内容与哈希并保留副本:直接删除会改写时间戳,后续比对将失去依据。