適合誰閱讀:想在自己的 GitHub 帳號加上雙重驗證(2FA:除了密碼,再用 App 或金鑰證明是你本人)的人、收到 GitHub「請開啟 2FA」通知的人,以及換了手機或手機遺失、拿不到驗證碼的人。本指南依據 GitHub 的官方文件 GitHub Docs 撰寫,按鈕名稱一律沿用畫面上的英文標示。
誰必須在 GitHub 上使用 2FA
自 2023 年 3 月起,GitHub 一次一批地對在 GitHub.com 上貢獻程式碼的使用者推行強制 2FA。GitHub Docs 列出了以下觸發條件:
- 為他人發布 App 或 action
- 為自己的儲存庫建立 release
- 為特定的高重要性儲存庫貢獻程式碼(例如 Open Source Security Foundation 追蹤的專案),或身為其管理員或貢獻者
- 身為包含儲存庫或其他使用者的組織的擁有者
- 身為曾發布一個以上套件的儲存庫的管理員或貢獻者
- 身為企業管理員
GitHub 指出這些條件可能會隨時間變更。你所在的群組被選中後,會收到通知郵件,45 天的啟用期隨即開始,GitHub.com 上也會出現橫幅提示。如果從未收到這封郵件,你就不在強制的群組中,但 GitHub 仍強烈建議開啟 2FA。
7 天寬限期過後,在開啟 2FA 之前你都無法存取 GitHub.com。既有的個人存取權杖(API 權杖)與 OAuth 權杖會繼續有效,以免自動化作業中斷。不過,被鎖住的帳號無法授權新的 App,也無法建立新的權杖。
電子郵件驗證不算 2FA
沒有開啟 2FA 的帳號,可能會被要求用寄到電子郵件的驗證碼確認新裝置。GitHub Docs 明確表示,這種電子郵件確認並不是 2FA。
原因是:掌控你信箱的人,既能重設你的密碼,也能通過電子郵件確認。第二個要素必須是和電子郵件分開的東西,例如驗證器 App 或 passkey。
該用哪種方式
GitHub 支援五種 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 並掃描 QR 碼
在「Two-factor authentication」區段點選「Enable two-factor authentication」。用 App 掃描 QR 碼,並在「Verify the code from the app」下方的欄位輸入 6 位數驗證碼。
如果無法掃描,點選「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 審查最多三個工作天 |
| 以上皆無 | 帳號無法復原;解除電子郵件的連結,改用在新帳號上 | — |
先試復原碼或 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 到 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」。掃描 QR 碼,輸入 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 保護的是登入。你已經發出的權杖與金鑰、已經授權的 App,仍然是進入你帳號的其他途徑。在同一天檢查,只要多花幾分鐘。
- 新增 passkey
- 「Password and authentication」的「Passkeys」下,「Add a passkey」。可作為 2FA 備援,也能省略密碼
- 使用有期限的權杖
- 「Settings」→「Developer settings」→「Personal access tokens」→「Fine-grained tokens」→「Generate new token」。選擇「Expiration」並限制儲存庫存取範圍
- 清理已授權的 App
- 「Settings」→「Applications」的「Authorized OAuth Apps」與「Authorized GitHub Apps」分頁。撤銷不認得或不再使用的項目
- 檢查 SSH 金鑰
- 「Settings」→「SSH and GPG keys」。刪除不認得或老舊的金鑰
- 個人的 push protection
- 「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 組憑證仍然有效。
secret scanning 與 push protection 的適用範圍
secret scanning(自動偵測程式碼中的 API 金鑰等機密)會在公開儲存庫上免費自動執行。儲存庫的 push protection,要在該儲存庫的「Settings」→「Advanced Security」中,先開啟「Secret Protection」,再開啟「Push protection」。
組織擁有的私人儲存庫需要付費的 GitHub Secret Protection。一般個人帳號的私人儲存庫則不在涵蓋範圍內。對於這些儲存庫,可以用 gitleaks 這類本機的提交前檢查補上缺口。
給組織擁有者:要求成員開啟 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 的外部協作者會被移除。bot 和服務帳號也包括在內,所以切換前請先通知大家,並在「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 分鐘 |
| 清理已授權的 App 與 SSH 金鑰 | 「Settings」→「Applications」/「SSH and GPG keys」 | 5 分鐘 |
| 確認 push protection 與 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」
- App 與 SSH 金鑰:GitHub Docs「Reviewing your authorized OAuth apps」 / 「Reviewing and revoking authorization of GitHub Apps」 / 「Reviewing your SSH keys」 / 「Reviewing your security log」
- secret scanning 與 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、發布 App 或 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 會審查申請,並在三個工作天內以電子郵件回覆。
Q連復原碼也遺失了,GitHub Support 能恢復我的帳號嗎?
不能。GitHub Docs 明確表示,基於安全理由,如果你遺失了 2FA 憑證和復原方式,GitHub Support 無法恢復已開啟 2FA 的帳號的存取權。到了這一步帳號就救不回來了;你能做的是把電子郵件地址從被鎖住的帳號解除連結,改用在新帳號上。
Q如何從 SMS 改用驗證器 App?
在「Password and authentication」的「Two-factor methods」下,點選驗證器 App(TOTP)方式旁的「Add」,掃描 QR 碼,輸入 6 位數驗證碼並點選「Save」。接著在「Preferred 2FA method」選擇該 App,如果不再需要 SMS 就把它移除。不需要停用 2FA,所以你的復原碼仍然有效。