无法识别的 SSH 密钥究竟意味着什么
GitHub 账号上列出的 SSH 密钥是一种能以该账号身份通过认证的凭据。看到不认识的密钥是调查的理由,而非结论。该密钥可能属于你遗忘的设备、前团队成员的配置、旧笔记本电脑,或你未授权的某样东西。安全的做法是在删除任何内容之前先确认所有者与用途,因为移除正常流程正在使用的密钥会中断该流程。
GitHub 将几种事物视为独立的访问路径。个人 SSH 密钥、附加到仓库的部署密钥以及已授权的 OAuth 应用是不同机制,作用范围也不同。审计其中一项并不等于审计其他项。
GitHub 建议将 SSH 密钥、部署密钥和已授权应用作为独立的访问路径分别审计。来源
操作前后清单
将此作为工作清单使用。“操作前”列用于收集事实;“操作后”列用于确认结果。
| 阶段 | 检查项 | 为何重要 |
|---|---|---|
| 操作前 | 列出账号上显示的所有 SSH 密钥,包括其标题及任何可见的指纹或创建详情 | 在决定哪个条目未知之前,你需要完整的情况 |
| 操作前 | 将每个密钥匹配到你能指名的设备或人员 | 无法命名的密钥正是需要质疑的那个 |
| 操作前 | 询问当前是否有任何工作流程依赖该密钥(构建、部署、共享机器) | 删除正在使用的密钥会中断该工作流程 |
| 操作前 | 检查是否通过部署密钥或已授权应用授予了相同的访问权限 | 这些是独立路径,需要单独审查 |
| 操作前 | 决定处置方式:保留、替换或删除 | 已过期的密钥可能需要替换而非简单移除 |
| 操作后 | 确认该密钥不再出现在账号的 SSH 密钥列表中 | 可见列表是你的第一重确认 |
| 操作后 | 确认受影响的工作流程仍可运行,或你已有替代路径 | 移除不应让正常流程陷入困境 |
| 操作后 | 记录你移除了什么以及何时移除,但不要记录密钥材料本身 | 记录有助于未来的审计 |
移除账号 SSH 密钥
移除操作本身在账号设置中进行。GitHub 文档记录的路径是“设置”,然后是“SSH 和 GPG 密钥”,你可以在那里查看账号 SSH 密钥并删除无法识别或已过期的密钥。
在“设置”的“SSH 和 GPG 密钥”中,查看账号 SSH 密钥并删除无法识别或已过期的密钥。来源
保持范围狭窄。此步骤移除的是账号 SSH 密钥。它不会移除部署密钥、撤销已授权应用或更改仓库内容。如果你的审计在这些领域发现了问题,请将它们作为独立任务处理。
删除前需考虑的正常工作流程
并非每个不熟悉的密钥都是恶意的。行动前请考虑以下常见情况:
- 你不再使用的设备。 旧笔记本电脑或工作机器可能仍注册有密钥。如果你仍持有该设备,可以确认匹配;如果没有,删除通常是正确的选择。
- 共享或团队机器。 其他人可能出于正当目的添加了密钥。移除前请与所有者确认。
- 部署或自动化设置。 如果某个计划流程使用该密钥,删除它可能会停止该流程。请先确定依赖关系。
- 你创建后遗忘的密钥。 标题和创建日期通常能唤起记忆。如果你能将其匹配到自己过去的设置,可以选择保留或替换,而非删除。
如有疑问,更安全的顺序是:先识别,然后用你控制的密钥替换,最后移除旧条目。这样在关闭未知路径的同时,保持了一条可用的路径。
此流程不做什么
移除 SSH 密钥是一项针对性操作,而非完整的账号清理。它不会:
- 撤销 OAuth 应用或其他已授权的集成;
- 从仓库中移除部署密钥;
- 证明谁创建了密钥以及为何创建;
- 确认不存在其他访问路径。
将上述每一项视为单独的检查。审计是一组小型、可验证的步骤,而非一个开关。
用户名查询的适用与不适用之处
公开的用户名搜索可以帮助你查看某个已知用户名在公开平台上似乎与哪些内容关联。当你试图了解一个身份或网络足迹时,这是有用的背景信息。它不能用于检查 GitHub 账号设置,也无法告诉你谁拥有某个 SSH 密钥。TruthsSeek 所介绍的 TraceSeek 应用可在 3,000+ 个平台上检查已知的公开用户名,并在 20–30 秒内返回首次扫描结果,首次扫描免费。它不操作 GitHub 设置,公开匹配结果是线索,而非所有权证明。
安全处理凭据
切勿在聊天、问题、截图或论坛帖子中发布私钥、令牌或完整凭据。如果你需要帮助识别密钥,只分享非机密细节,例如其标题或可见指纹,并且只与你信任的人分享。如果你怀疑密钥已泄露,从账号中移除它是其中一步;轮换任何依赖它的内容是一个单独的决定,应慎重做出。