对象:想给自己的 GitHub 账户加上双因素认证(2FA:在密码之外,再用 App 或密钥证明是你本人)的人,收到 GitHub「请开启 2FA」通知的人,以及换了或丢了手机、再也拿不到验证码的人。本指南依据 GitHub 的官方文档 GitHub Docs,按钮名称与文档中的原文一致(GitHub 界面为英文)。
哪些人必须在 GitHub 上使用 2FA
自 2023 年 3 月起,GitHub 一批一批地向在 GitHub.com 上贡献代码的用户推行强制 2FA。GitHub Docs 列出了以下触发条件:
- 发布供他人使用的应用或 action
- 为自己的仓库创建 release
- 为特定的高重要性仓库(例如 Open Source Security Foundation 跟踪的项目)做贡献,或担任其管理员或贡献者
- 拥有包含仓库或其他用户的组织
- 担任发布过一个或多个软件包的仓库的管理员或贡献者
- 担任企业管理员
GitHub 指出这些条件可能会随时间变化。你所在的批次被选中后,会收到通知邮件,45 天的启用期开始计算,GitHub.com 上也会出现横幅提示。如果从未收到邮件,说明你不在必须开启的群体中,但 GitHub 仍强烈建议开启 2FA。
7 天宽限期过后,在开启 2FA 之前无法访问 GitHub.com。已有的个人访问令牌(API 令牌)和 OAuth 令牌会继续有效,以免自动化流程中断。但被锁的账户无法授权新应用,也无法创建新令牌。
邮件验证不算 2FA
没有开启 2FA 的账户,在新设备上登录时可能会被要求输入邮件发来的验证码。GitHub Docs 明确说明,这种邮件验证不是 2FA。
原因是:控制了你邮箱的人,既能重置你的密码,也能通过邮件验证。第二要素必须是独立于邮箱的东西,例如验证器 App 或 passkey。
该用哪种方式
GitHub 支持 5 种 2FA 方式。GitHub Docs 建议以 TOTP 验证器 App 为主要方式,以 passkey 或安全密钥作为备用。如果两者都没有,它建议把 GitHub Mobile 作为不错的备用。
| 方式 | 能否作为第一种方式 | GitHub Docs 的定位 | 备注 |
|---|---|---|---|
| 验证器 App(TOTP) | 能 | 推荐的主要方式 | GitHub 推荐带云备份的 App |
| SMS(短信) | 能 | 不推荐 | 可被拦截,不具备抗钓鱼能力;并非所有国家都可用 |
| passkey | 不能(在 TOTP 或 SMS 之后) | 推荐的备用方式 | 一步同时满足密码和 2FA |
| 安全密钥 | 不能(在 TOTP 或 SMS 之后) | 推荐的备用方式 | 只作为第二要素,与密码一起使用 |
| GitHub Mobile | 不能(在 TOTP 或 SMS 之后) | 没有 passkey 或密钥时的备用 | 在 App 中批准推送通知 |
TOTP(基于时间的一次性密码)指的是每 30 秒显示一个新的 6 位数字的 App。GitHub 不限定 App,所以 Google Authenticator、Microsoft Authenticator、1Password 或其他任何 TOTP App 都可以。
passkey 和安全密钥不能作为第一种方式,根据 GitHub Docs 的说明,是因为它们容易丢失,而且目前能同步的设备范围太窄。所以顺序是:先用验证器 App 开启 2FA,再添加 passkey。
主要:验证器 App
手机上的 TOTP App,并开启它的云备份
备用:passkey 或安全密钥
电脑上的 passkey 或硬件密钥,丢了手机也不会被锁在门外
最后手段:恢复码
16 个码,保存在手机以外的地方,例如密码管理器
设置步骤(从验证器 App 开始)
安装验证器 App
在手机或电脑上安装 TOTP App。GitHub Docs 推荐能把验证码备份到云端的 App,这样换手机或丢手机后,新设备也能生成同样的验证码。
打开「Password and authentication」
在任意 GitHub 页面点击右上角的头像,再点击「Settings」。在侧边栏的「Access」部分,点击「Password and authentication」(密码和身份验证)。
开启 2FA 并扫描二维码
在「Two-factor authentication」部分,点击「Enable two-factor authentication」。用 App 扫描二维码,把 6 位验证码填入「Verify the code from the app」下方的输入框。
如果无法扫描,点击「setup key」,会显示一串可以手动输入到 App 中的代码。
保存恢复码并完成
在「Save your recovery codes」下点击「Download」。保存好之后,点击「I have saved my recovery codes」开启 2FA。保存在哪里,见下一节。
添加 passkey 作为第二种方式
在同一页面的「Passkeys」下点击「Add a passkey」,用密码或其他方式确认后按提示操作。Windows Hello、Face ID、Touch ID 等平台验证器都可以登记为 passkey。
如果是硬件安全密钥,点击「Security keys」旁的「Add」,再点击「Register new security key」。如果是 GitHub Mobile,在 App 中登录并允许推送通知,该设备就能用于 2FA。
在 28 天内用 2FA 登录一次
开启 2FA 后,账户会进入 28 天的确认检查期。在此期间成功用 2FA 登录一次,检查期即结束。如果到第 28 天还没有登录过,GitHub 会要求你执行 2FA;如果失败,就必须重新配置 2FA 设置。
保存恢复码
恢复码是所有 2FA 方式都无法使用时,让你重新进入账户的一次性代码。一共 16 个,每个用过一次就失效。
合适的地方
- 密码管理器(GitHub Docs 推荐)
- 打印出来,放在家里固定的地方
- 加密的外部存储
应避免的地方
- 只存在装着验证器 App 的同一部手机里(手机丢了,两者一起丢)
- 一直留在「下载」文件夹里(默认文件名 github-recovery-codes.txt)
- 通过聊天或邮件发给别人
之后想再次查看,在「Password and authentication」页面点击「Recovery codes」旁的「View」,然后使用「Download」「Print」或「Copy」。生成新的恢复码会让之前生成的所有恢复码失效,所以请立即保存新的一组。
GitHub Docs 还把 SSH 密钥和个人访问令牌列为恢复手段。它建议保留 GitHub.com 的 Cookie:如果浏览器每天清除 Cookie,你就永远不会有可用于恢复的已验证设备,因为证明你以前用过这台设备的正是 _device_id 这个 Cookie。
手机丢了或换了
你手上还剩什么,决定了是能立刻进去,还是要等待审核。请按顺序尝试。
| 还剩下的 | 怎么做 | 需要多久 |
|---|---|---|
| 恢复码 | 在登录界面选择「More options」→「2FA recovery code」 | 立即 |
| passkey 或安全密钥 | 用它登录 | 立即 |
| 验证器 App 的备份 | 在新手机上恢复 App | 立即 |
| 密码,加上以前用过的设备、SSH 密钥或个人访问令牌 | 「More options」→「Begin account or email recovery」 | GitHub Support 审核,最长 3 个工作日 |
| 以上都没有 | 账户无法找回;解除邮箱关联,用于新账户 | — |
先试恢复码或 passkey
打开 https://github.com/login,输入用户名和密码,在要求 2FA 时打开「More options」。选择「2FA recovery code」并输入一个码,或使用 passkey。进去之后,立刻在新手机上重新设置 2FA。
什么都没有时,申请账户恢复
在「More options」下点击「Begin account or email recovery」,输入发到你邮箱的一次性密码。然后选择一个恢复验证要素:「Verify with this device」(以前在这个账户上用过的设备)、SSH 密钥或个人访问令牌。
GitHub Support 的工作人员会审核请求,并在 3 个工作日内通过邮件回复。在此期间重复提交的请求不会被审核。如果在 3 到 5 天的等待期内找到了恢复码或其他 2FA 方式,随时都可以使用。
有些账户连 GitHub Support 也无法恢复
GitHub Docs 明确写道,出于安全原因,如果你同时丢失了 2FA 凭据和恢复手段,GitHub Support 不会恢复已开启 2FA 的账户的访问权限。SSH 密钥在一段时间不活动后也会从账户中删除,所以旧密钥可能不算数。
这种情况下,唯一的办法是把邮箱地址从被锁的账户解除关联,再关联到新账户或已有账户。请在开启 2FA 的当天就设置好备用方式并保存恢复码。
从 SMS 切换到验证器 App
如果已经在用 SMS,可以在不关闭 2FA 的情况下添加或更换方式。因为 2FA 一直开着,你的恢复码和要求 2FA 的组织的成员资格都会保留。
添加验证器 App
在「Password and authentication」的「Two-factor methods」下,点击验证器 App(TOTP)方式旁的「Add」。扫描二维码,输入 6 位验证码,点击「Save」。
设为首选方式
在「Two-factor authentication」的「Preferred 2FA method」下拉菜单中选择验证器 App。登录时就会首先显示这种方式。
不再需要 SMS 时将其删除
在「Two-factor methods」列表中,从 SMS 旁的菜单里删除它。GitHub Docs 提示,所在组织禁止不安全方式的成员,应先设置安全的方式,再删除 SMS。删除前,请确认能用 App 登录。
有些组织会把使用 SMS 的成员挡在门外
组织所有者可以开启「Only allow secure two-factor methods」(只允许安全的双因素方式)。GitHub Docs 把 passkey、安全密钥、验证器 App 和 GitHub Mobile 定义为安全方式。在这样的组织里,设置了任何 SMS 方式的成员都无法访问组织资源。
顺便检查的其他设置
2FA 保护的是登录。你已经签发的令牌和密钥、已经授权的应用,仍然是进入账户的独立入口。在同一天一起检查,只需多花几分钟。
- 添加 passkey
- 「Password and authentication」→「Passkeys」→「Add a passkey」。可作为 2FA 备用,还能省去输入密码
- 使用有有效期的令牌
- 「Settings」→「Developer settings」→「Personal access tokens」→「Fine-grained tokens」→「Generate new token」。选择「Expiration」(有效期)并限制仓库访问范围
- 清理已授权的应用
- 「Settings」→「Applications」的「Authorized OAuth Apps」和「Authorized GitHub Apps」标签页。撤销不认识或不再使用的应用
- 检查 SSH 密钥
- 「Settings」→「SSH and GPG keys」。删除不认识或过旧的密钥
- 个人推送保护
- 「Settings」→「Code security」→「Push protection for yourself」。阻止把包含秘密信息的内容推送到公开仓库(默认开启)
- Dependabot 警报
- 「Settings」→「Code security」→「Dependabot alerts」→「Enable all」。也可以设置为对新仓库自动开启
- 安全日志
- 「Settings」→「Security log」(在「Archives」部分)。列出最近 90 天的操作
优先使用 fine-grained 令牌,而不是 classic 令牌
个人访问令牌(PAT:在 API 和 git 操作中代替密码使用的字符串)有 classic 和 fine-grained 两种。GitHub 建议尽可能使用 fine-grained 令牌,因为 classic 令牌能访问你有权访问的所有组织中的所有仓库,以及你个人账户中的所有仓库。
GitHub 会自动删除一年未使用的令牌,但仍强烈建议设置有效期。如果只是在命令行里使用 GitHub,用 GitHub CLI 或 Git Credential Manager 就完全不需要创建令牌。为什么从仓库里删除泄露的令牌还不够,见 GitHub 上公开的 543,699 个凭据仍然有效(英文)。
秘密扫描和推送保护适用于哪里
秘密扫描(自动检测代码中的 API 密钥等秘密信息)在公开仓库上免费且自动运行。仓库的推送保护,在仓库的「Settings」→「Advanced Security」中先开启「Secret Protection」,再开启「Push protection」。
组织拥有的私有仓库需要付费的 GitHub Secret Protection。普通个人账户中的私有仓库不在覆盖范围内。对于这些仓库,可以用 gitleaks 这类本地 pre-commit 检查来补上。
组织所有者:要求成员开启 2FA
在组织的「Settings」中,于「Authentication security」下勾选「Require two-factor authentication for everyone in your organization」并点击「Save」。GitHub Free 和 GitHub Team 方案都可以使用。再加上「Only allow secure two-factor methods」,还能把使用 SMS 的成员挡在外面。
开启后,没有 2FA 的成员会失去对组织资源的访问权限,没有 2FA 的外部协作者会被移除。机器人和服务账户也算在内,所以切换前请提前通知,并在「People」页面确认谁已经在用 2FA。
检查清单
| 任务 | 位置 | 时间 |
|---|---|---|
| 用验证器 App 开启 2FA | 「Settings」→「Password and authentication」 | 5 分钟 |
| 把恢复码保存到密码管理器 | 同一页面「Recovery codes」→「View」 | 2 分钟 |
| 添加 passkey 或安全密钥 | 同一页面「Passkeys」/「Security keys」 | 3 分钟 |
| 在 28 天内用 2FA 登录一次 | — | — |
| 把 classic 令牌换成有有效期的 fine-grained 令牌 | 「Settings」→「Developer settings」 | 每个令牌 5 分钟 |
| 清理已授权的应用和 SSH 密钥 | 「Settings」→「Applications」/「SSH and GPG keys」 | 5 分钟 |
| 检查推送保护和 Dependabot 警报 | 「Settings」→「Code security」 | 2 分钟 |
| 如果你是组织所有者,要求成员开启 2FA | 组织「Settings」→「Authentication security」 | 包括提前通知在内需要几天 |
出处(公开信息)
本指南中的步骤、期限和行为,已于 2026 年 10 月 6 日对照 GitHub Docs 及其他官方页面核实。GitHub 的界面和条件会变化,操作前请查看原始页面。
- 设置 2FA:GitHub Docs「Configuring two-factor authentication」 / 「Changing your two-factor authentication method」 / 「Countries where SMS authentication is supported」
- 强制 2FA:GitHub Docs「About mandatory two-factor authentication」 / GitHub Blog「Raising the bar for software security: next steps for GitHub.com 2FA」(2022 年 12 月 14 日)
- 恢复:GitHub Docs「Configuring two-factor authentication recovery methods」 / 「Recovering your account if you lose your 2FA credentials」
- 令牌:GitHub Docs「Managing your personal access tokens」
- 应用和 SSH 密钥:GitHub Docs「Reviewing your authorized OAuth apps」 / 「Reviewing and revoking authorization of GitHub Apps」 / 「Reviewing your SSH keys」 / 「Reviewing your security log」
- 秘密扫描和 Dependabot:GitHub Docs「About secret scanning」 / 「Managing push protection for users」 / 「Enabling push protection for your repository」 / 「Configuring Dependabot alerts」
- 组织 2FA:GitHub Docs「Requiring two-factor authentication in your organization」
接下来阅读
- 选择方式:双因素认证(MFA)如何正确选择:「抗钓鱼」是什么,为什么 SMS 弱 / 术语:什么是 2FA? / 什么是 passkey?
- 令牌泄露时:GitHub 上公开的 543,699 个凭据仍然有效(2026 年研究)(英文)
- 在提交前拦住秘密:用 gitleaks 在提交前拦住秘密信息
- 收窄密钥权限:SSH 密钥的最小权限
- 托管在哪里:自建 Git 与 GitHub,哪个更安全?
FAQ
Q在 GitHub 的哪里开启双因素认证?
点击右上角的头像,选择「Settings」(设置),在侧边栏的「Access」(访问)部分点击「Password and authentication」(密码和身份验证)。在「Two-factor authentication」部分点击「Enable two-factor authentication」,用验证器 App(TOTP)或 SMS 完成设置。passkey、安全密钥和 GitHub Mobile 可以在设置好 TOTP 或 SMS 之后添加。
QGitHub 的 2FA 是强制的吗?
自 2023 年 3 月起,GitHub 分批要求在 GitHub.com 上贡献代码的用户开启 2FA。触发条件包括创建 release、发布应用或 action、担任发布过软件包的仓库的管理员或贡献者、拥有组织等。被选中的用户会收到邮件,并有 45 天的启用期和 7 天的宽限期;之后在开启 2FA 之前无法使用 GitHub.com。没有收到通知的用户不是必须开启,但 GitHub 强烈建议开启。
QGitHub 的 2FA 可以用 SMS 吗?
在支持的国家可以,GitHub 公布了国家列表。但 GitHub Docs 强烈建议改用 TOTP 验证器 App,因为 SMS 容易被拦截、不具备抗钓鱼能力,可靠性也较低。有些组织会阻止设置了 SMS 2FA 的成员访问。
Q手机丢了或换了,收不到 GitHub 的 2FA 验证码,怎么办?
先找恢复码(默认文件名为 github-recovery-codes.txt),在登录界面依次选择「More options」→「2FA recovery code」并输入一个。已登记的 passkey 或安全密钥也可以用。如果这些都没有,选择「Begin account or email recovery」,验证邮件里的一次性密码,再用以前用过的设备、SSH 密钥或个人访问令牌证明身份。GitHub Support 审核请求后,会在 3 个工作日内通过邮件回复。
Q恢复码也丢了,GitHub Support 能恢复我的账户吗?
不能。GitHub Docs 明确写道,出于安全原因,如果你丢失了 2FA 凭据和恢复手段,GitHub Support 无法恢复已开启 2FA 的账户的访问权限。到了这一步账户就无法找回了;你能做的,是把邮箱地址从被锁的账户解除关联,用于新账户。
Q怎样从 SMS 切换到验证器 App?
在「Password and authentication」的「Two-factor methods」下,点击验证器 App(TOTP)方式旁的「Add」,扫描二维码,输入 6 位验证码并点击「Save」。然后在「Preferred 2FA method」中选择这个 App,如果不再需要 SMS,就将其删除。不需要关闭 2FA,所以恢复码依然有效。