真正会把 GitHub 账号用稳的人,不是把 2FA 打开就结束,而是把 passkey、恢复材料、PAT、SSH key 和离职交接一起整理成能恢复、能轮换、能撤销的组合。
- 01先读摘要,判断是否与你的场景相关。
- 02再看来源,保留继续查证的路径。
- 03最后看步骤、风险和可复用动作。
GitHub 账号安全最常见的误区,是把“开了 2FA”误当成“已经稳了”。真正会在紧急时刻救命的,往往不是那个日常最常用的登录方式,而是你有没有第二种认证方法、恢复码是不是还找得到、PAT 有没有最小权限、SSH key 到底是登录用还是只拿来签名。只要这些材料没有分层,仓库越多、自动化越多,账号出问题时恢复越慢。
适用场景
- 你长期在本机、远程主机、CI 或脚本里访问 GitHub。
- 你手里有多个 PAT、SSH key 或历史设备,已经开始分不清哪些还在用。
- 你依赖 GitHub 账号管理仓库、Actions、Packages 或 Copilot 配置。
- 你准备做一次账号交接、设备更换或安全体检。
不适用场景
- 你几乎不用 GitHub,也没有仓库、脚本或自动化接入。
- 你打算把经典 PAT 无限期放在多台机器上当默认做法,这和最小权限思路相反。
- 你没有地方安全存恢复材料,却想先生成更多凭证让自己更难管理。
- 你希望用一把共享 SSH key 解决团队所有机器登录,这会把责任边界打烂。
先把 GitHub 当前官方建议对齐
GitHub 当前安全文档给了几个很实用的原则。第一,passkey 本身就能同时满足密码和 2FA 要求,而且具备强抗钓鱼特性;如果你已经有可升级的 security key,还可以把它升级成 passkey。第二,GitHub 明确建议至少配置两种认证方式,并把 recovery codes 安全存放。第三,PAT 方面,官方明确推荐 fine-grained tokens 优先于 classic tokens;如果能用 GitHub App、GITHUB_TOKEN 或 GitHub CLI,就不要随手再造一个长寿命 PAT。
恢复方式这一节尤其值得照抄进自己的 runbook:除了 recovery codes,GitHub 还建议把 SSH keys、PATs 和 verified devices 作为恢复材料的一部分。也就是说,账号安全不是“一个最强主方案”,而是“几种互相补位的方案”。
准备材料
- 一张账号凭证清单:passkeys、2FA 方法、PAT、SSH key、登录设备、用途说明。
- 安全保存位置:密码管理器、离线介质或受控文档。
- 当前仍在使用的脚本、CI、服务器和本地终端清单。
- 一段维护窗口,能让你在轮换 PAT 或 SSH key 后立刻验证业务不中断。
- 明确谁负责审核、谁负责执行、谁负责保管恢复材料。
步骤一:先给账号补足两层以上恢复路径
最先该做的不是清 PAT,而是保证你失去主认证方法后还能回来。GitHub 文档直接建议配置两种或以上认证方式,并妥善保存 recovery codes。更稳的做法是:主登录走 passkey,辅登录保留另一种认证路径,恢复材料再单独离线保存。
- 确认账号是否已启用 passkey;没有就先加一枚你能稳定访问的 authenticator。
- 如果 passkey 只存在一台手机或一套同步体系,再补第二条恢复路径。
- 打开 Password and authentication,查看 Recovery codes 是否已下载并妥善保存。
- 如果 recovery codes 已经被用过很多次或去向不明,就立即生成新的一组。
步骤二:把 passkey 当主入口,但别把希望全押在单一设备上
Passkey 的价值在于它把密码和 2FA 合成一步,而且对钓鱼站更稳。但 passkey 也分 synced 和 device-bound。对日常主力账号,更实用的是“一个高频主入口 + 一个异地或异设备备份”。如果你只在一台设备上有 passkey,设备出问题时恢复仍会很痛。
- 主用设备适合放 synced passkey,方便跨设备登录。
- 关键账号可以再准备一把硬件安全密钥或另一套独立 authenticator。
- 记录哪一个 passkey 依赖哪种同步体系,避免以为“多设备可用”其实全绑在同一生态里。
- 每次新增设备后做一次实际登录测试,不要只看设置页。
步骤三:recovery codes 不是截图收藏夹,而是一次性材料
GitHub recovery codes 一旦用掉就不能复用,用完 16 个要重新生成。很多人把它截图丢在相册或聊天里,等于把最后兜底材料暴露给了最不该长期保存敏感信息的地方。更稳的做法是:保存到密码管理器或离线介质,同时写明生成日期和上次刷新日期。
- 从 Settings → Password and authentication → Recovery codes 进入查看。
- 下载、打印或复制到受控密码管理器,三者选一到两种,不要到处散落副本。
- 在凭证台账中记录生成日期和保管位置。
- 一旦怀疑泄露或找不到,就生成新的一组,旧的直接作废。
步骤四:PAT 先分用途,再决定 fine-grained 还是 classic
PAT 最容易失控,因为它看起来最省事。GitHub 现在明确推荐 fine-grained PAT:单一 resource owner、可选具体仓库、可按权限细分,而且组织还能要求审批。只有在 fine-grained 还做不到的场景,才退回 classic。也正因此,先问“这个脚本到底要什么权限”,再决定 token 类型,比先点 Generate token 安全得多。
- 命令行能用 GitHub CLI 或 credential manager 的,先不用 PAT。
- Actions 工作流里优先评估 GITHUB_TOKEN,别把个人 PAT 当默认胶水。
- 要跨多个组织、或触发 fine-grained 尚不支持的能力时,才考虑 classic。
- 每个 PAT 都写清 resource owner、仓库范围、权限、过期时间和保管位置。
步骤五:SSH key 既能做恢复材料,也要写清用途类型
GitHub 的 2FA recovery 文档提到,SSH keys 也可以配置为恢复材料,但前提是添加时要选对 key type。很多人仓库里躺着几把 SSH key,却没人知道哪把用于认证、哪把用于签名、哪把属于旧电脑。安全体检时,务必把用途写清并删掉孤儿 key。
- 列出账号下所有 SSH keys,按设备、用途、最后确认时间重新整理。
- 恢复用 SSH key 单独标记,不和签名 key 混在一起。
- 旧电脑、旧服务器、已经报废的机器对应 key 直接撤销。
- 轮换后马上在真实终端执行一次拉取或推送,确认没有把自己锁在门外。
可复制整理模板
GitHub 账号安全台账
账号:
主负责人:
复查日期:
Passkeys:
- 名称 / 设备 / 同步体系 / 是否主用 / 最近测试日期
2FA 备用方式:
- 类型 / 所在设备 / 最近测试日期
Recovery codes:
- 生成日期 / 保存位置 / 是否已刷新
PAT:
- 名称 / fine-grained 还是 classic / 资源范围 / 权限 / 过期日 / 保管位置
SSH keys:
- 设备 / 用途(authentication / signing) / 最近确认日期 / 是否需要撤销
离职或换机动作:
- 需要撤销的 PAT:
- 需要撤销的 SSH key:
- 需要移除的设备:
实际例子:把“三个旧 token + 两把不明 SSH key”收成可维护状态
一个独立开发者维护个人仓库、两台远程机和几条自动化脚本。原本他手里有三个看不清用途的 classic PAT、两把不知道是否还在用的 SSH key,以及一份不记得存哪的 recovery codes。整理时先补 passkey 和备用认证,再按脚本用途重建两个 fine-grained PAT,把 classic 只留给暂时替代不了的场景;SSH key 则按设备与用途重标,一次清掉了旧电脑遗留项。后面再做换机或脚本迁移时,风险和解释成本都小很多。
验收清单
- 账号至少有两条可用认证或恢复路径。
- recovery codes 可定位、可确认生成时间,且没有散落在聊天或相册。
- PAT 已按用途分层,能用 fine-grained 的不再滥用 classic。
- SSH keys 都有明确设备与用途说明,没有不明遗留项。
- 旧设备、旧 token、旧 key 的撤销动作已执行。
常见坑
- 只配了一个主用 passkey,以为自己已经足够安全。
- recovery codes 截图存手机,手机丢了就连同恢复材料一起丢。
- classic PAT 长期不过期,权限比实际需求大很多。
- 把签名 key、认证 key、恢复用 key 全混在一起。
- 新 key 或新 token 创建后不做真实验证,等出故障才发现用不了。
排错路径
- 忘记主认证设备:先走 recovery codes 或第二认证路径,再重建主 passkey。
- 脚本因 token 失效报错:看台账确认用途与过期日,优先换 fine-grained PAT。
- SSH 登录异常:先确认当前 key 是否仍在账号中,再检查本地 agent 与远端用途。
- 不知道哪些凭证还能删:从最近 30 天真实使用链路反推,没映射到任何系统的先停用后观察。
- 组织要求更严 token 政策:优先改用 fine-grained PAT、GITHUB_TOKEN 或 GitHub App。
后续维护建议
更新日期:2026-07-27。建议把 GitHub 账号安全体检并入季度维护:每季度复查一次 passkey 和 recovery codes,每次换机或离职就复查 SSH key 与 PAT。账号安全做得稳,不在于凭证越多越好,而在于每一种凭证都有清楚用途、可验证恢复路径和明确撤销时机。