대상: 내 GitHub 계정에 2단계 인증(2FA: 비밀번호에 더해 앱이나 키로 본인임을 증명하는 것)을 추가하고 싶은 사람, GitHub의 "2FA를 켜라"는 알림을 받은 사람, 휴대폰을 바꾸거나 잃어버려 코드를 받을 수 없게 된 사람. 이 가이드는 GitHub의 공식 문서인 GitHub Docs를 바탕으로 하며, 버튼 이름은 GitHub 화면에 나오는 영어 표기를 그대로 쓴다(GitHub 화면은 영어로 표시된다).
GitHub에서 2FA를 써야 하는 사람
GitHub는 2023년 3월부터 GitHub.com에 코드를 기여하는 사용자에게 그룹별로 2FA 의무화를 확대하고 있다. GitHub Docs는 다음 조건을 든다.
- 다른 사람을 위한 앱이나 액션을 공개한다
- 리포지토리의 릴리스를 만든다
- 특정 중요 리포지토리(Open Source Security Foundation이 추적하는 프로젝트 등)에 기여하거나, 그 관리자나 기여자다
- 리포지토리나 다른 사용자를 포함하는 조직의 소유자다
- 하나 이상의 패키지를 공개한 리포지토리의 관리자나 기여자다
- 엔터프라이즈 관리자다
GitHub는 이 기준이 바뀔 수 있다고 밝힌다. 내 그룹이 선정되면 알림 이메일이 오고, 45일의 등록 기간이 시작되며, GitHub.com에 배너가 표시된다. 이메일을 받은 적이 없다면 의무 대상 그룹이 아니지만, GitHub는 그래도 2FA를 켜라고 강하게 권장한다.
7일의 유예 기간이 지나면 2FA를 켤 때까지 GitHub.com에 접근할 수 없다. 자동화가 멈추지 않도록, 기존 개인 액세스 토큰(API 토큰)과 OAuth 토큰은 계속 동작한다. 하지만 잠긴 계정은 새 앱을 승인하거나 새 토큰을 만들 수 없다.
이메일 인증은 2FA가 아니다
2FA가 없는 계정은 새 기기를 이메일로 받은 코드로 확인하라는 요청을 받을 수 있다. GitHub Docs는 이 이메일 확인이 2FA가 아니라고 분명히 밝힌다.
이유는 이렇다. 받은편지함을 장악한 사람은 비밀번호 재설정과 이메일 확인을 둘 다 통과할 수 있다. 두 번째 요소는 인증 앱이나 패스키처럼 이메일과 분리된 것이어야 한다.
어떤 방법을 쓸까
GitHub는 다섯 가지 2FA 방법을 지원한다. GitHub Docs는 TOTP 인증 앱을 주 방법으로, 패스키나 보안 키를 백업으로 권장한다. 둘 다 없다면 GitHub Mobile을 좋은 백업으로 제안한다.
| 방법 | 첫 번째 방법이 될 수 있나 | GitHub Docs의 입장 | 참고 |
|---|---|---|---|
| 인증 앱(TOTP) | 가능 | 권장하는 주 방법 | GitHub는 클라우드 백업이 있는 앱을 권장 |
| SMS(문자 메시지) | 가능 | 권장하지 않음 | 가로챌 수 있고 피싱에 강하지 않다. 모든 국가에서 쓸 수 있지는 않다 |
| 패스키 | 불가(TOTP나 SMS 뒤에) | 권장하는 백업 | 비밀번호와 2FA를 한 번에 충족 |
| 보안 키 | 불가(TOTP나 SMS 뒤에) | 권장하는 백업 | 비밀번호와 함께 쓰는 두 번째 요소로만 인정 |
| GitHub Mobile | 불가(TOTP나 SMS 뒤에) | 패스키나 키가 없을 때의 백업 | 앱에서 푸시 알림을 승인 |
TOTP(시간 기반 일회용 비밀번호)는 30초마다 새 6자리 숫자를 보여 주는 앱을 말한다. GitHub는 특정 앱을 가리지 않으므로 Google Authenticator, Microsoft Authenticator, 1Password 등 어떤 TOTP 앱이든 쓸 수 있다.
GitHub Docs에 따르면 패스키와 보안 키는 잃어버리기 쉽고, 지금으로서는 동기화되는 기기의 범위가 너무 좁아 첫 번째 방법이 될 수 없다. 그래서 순서는 인증 앱으로 2FA를 켠 뒤 패스키를 추가하는 것이다.
주 방법: 인증 앱
휴대폰의 TOTP 앱. 클라우드 백업을 켜 둔다
백업: 패스키 또는 보안 키
컴퓨터의 패스키나 하드웨어 키. 휴대폰을 잃어도 잠기지 않도록
최후의 수단: 복구 코드
16개의 코드. 비밀번호 관리자처럼 휴대폰과 떨어진 곳에 저장
설정 순서(인증 앱부터)
인증 앱을 설치한다
휴대폰이나 컴퓨터에 TOTP 앱을 설치한다. GitHub Docs는 코드를 클라우드에 백업하는 앱을 권장한다. 휴대폰을 바꾸거나 잃어버린 뒤에도 새 기기에서 같은 코드를 만들 수 있기 때문이다.
Password and authentication을 연다
GitHub 아무 페이지에서나 오른쪽 위의 프로필 사진을 클릭하고 Settings(설정)를 클릭한다. 사이드바의 Access 섹션에서 Password and authentication(비밀번호와 인증)을 클릭한다.
2FA를 켜고 QR 코드를 스캔한다
Two-factor authentication 섹션에서 Enable two-factor authentication을 클릭한다. 앱으로 QR 코드를 스캔하고, "Verify the code from the app"(앱의 코드 확인) 아래 입력란에 6자리 코드를 입력한다.
스캔할 수 없다면 setup key를 클릭해 앱에 직접 입력할 코드를 표시한다.
복구 코드를 저장하고 마친다
"Save your recovery codes"(복구 코드 저장) 아래의 Download를 클릭한다. 저장했으면 I have saved my recovery codes를 클릭해 2FA를 켠다. 보관할 곳은 다음 절에서 다룬다.
두 번째 방법으로 패스키를 추가한다
같은 페이지의 "Passkeys" 아래에서 Add a passkey를 클릭하고, 비밀번호나 다른 방법으로 확인한 뒤 안내를 따른다. Windows Hello, Face ID, Touch ID 같은 플랫폼 인증기를 패스키로 등록할 수 있다.
하드웨어 보안 키라면 "Security keys" 옆의 Add를 클릭한 뒤 Register new security key를 클릭한다. GitHub Mobile은 앱에 로그인하고 푸시 알림을 허용하면 그 기기를 2FA에 쓸 수 있게 된다.
28일 안에 2FA로 로그인한다
2FA를 켜면 계정은 28일의 점검 기간에 들어간다. 그 기간에 2FA 로그인에 한 번 성공하면 끝난다. 한 번도 하지 않은 채 28일째가 되면 GitHub가 2FA를 요구하며, 실패하면 2FA 설정을 다시 해야 한다.
복구 코드 보관
복구 코드는 모든 2FA 방법을 쓸 수 없을 때 계정에 다시 들어가게 해 주는 일회용 코드다. 16개가 있으며, 각각 한 번 쓰면 더 이상 동작하지 않는다.
좋은 보관 장소
- 비밀번호 관리자(GitHub Docs가 권장)
- 집 안의 정해진 곳에 둔 인쇄본
- 암호화된 외장 저장소
피해야 할 장소
- 인증 앱과 같은 휴대폰에만(휴대폰을 잃으면 둘 다 잃는다)
- 다운로드 폴더에 방치(기본 이름 github-recovery-codes.txt)
- 채팅이나 이메일로 누군가에게 보내기
나중에 다시 보려면 Password and authentication 페이지의 "Recovery codes" 옆에서 View를 클릭하고, Download, Print, Copy 중 하나를 쓴다. 새 복구 코드를 만들면 이전에 만든 코드는 모두 무효가 되므로, 새 코드는 바로 저장한다.
GitHub Docs는 SSH 키와 개인 액세스 토큰도 복구 방법으로 든다. GitHub.com의 쿠키를 지우지 말고 두라고도 권한다. 브라우저가 매일 쿠키를 지우면, 그 기기를 전에 썼다는 것을 증명하는 _device_id 쿠키가 남지 않아 복구에 쓸 확인된 기기가 생기지 않는다.
휴대폰을 잃어버렸거나 바꿨다면
아직 가진 것에 따라 바로 다시 들어갈지, 검토를 기다릴지가 정해진다. 다음 순서로 시도한다.
| 아직 가진 것 | 할 일 | 걸리는 시간 |
|---|---|---|
| 복구 코드 | 로그인 화면에서 More options → 2FA recovery code | 즉시 |
| 패스키나 보안 키 | 그것으로 로그인 | 즉시 |
| 인증 앱의 백업 | 새 휴대폰에서 앱을 복원 | 즉시 |
| 비밀번호 + 이전에 쓴 기기, SSH 키, 개인 액세스 토큰 중 하나 | More options → Begin account or email recovery | GitHub Support 검토에 최대 영업일 3일 |
| 위의 어느 것도 없음 | 계정은 복구할 수 없다. 이메일 연결을 끊고 새 계정에서 쓴다 | — |
먼저 복구 코드나 패스키를 시도한다
https://github.com/login 으로 가서 사용자 이름과 비밀번호를 입력하고, 2FA를 요구받으면 "More options"(다른 옵션)를 연다. 2FA recovery code를 골라 코드 하나를 입력하거나, 패스키를 쓴다. 들어갔다면 바로 새 휴대폰에서 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에서 인증 앱으로 옮기기
이미 SMS를 쓰고 있다면 2FA를 끄지 않고도 방법을 추가하거나 바꿀 수 있다. 2FA가 켜진 채로 있으므로 복구 코드와, 2FA를 요구하는 조직의 멤버십도 유지된다.
인증 앱을 추가한다
Password and authentication의 "Two-factor methods"(2단계 인증 방법)에서 인증 앱(TOTP) 방법 옆의 Add를 클릭한다. QR 코드를 스캔하고 6자리 코드를 입력한 뒤 Save를 클릭한다.
선호하는 방법으로 정한다
"Two-factor authentication" 아래의 "Preferred 2FA method"(선호하는 2FA 방법) 드롭다운에서 인증 앱을 고른다. 로그인할 때 가장 먼저 표시되는 방법이 된다.
필요 없으면 SMS를 제거한다
"Two-factor methods" 목록에서 SMS 옆의 메뉴로 제거한다. GitHub Docs는 안전하지 않은 방법을 막는 조직의 멤버에게, 안전한 방법을 설정한 뒤 SMS를 제거하라고 안내한다. 제거하기 전에 앱으로 로그인할 수 있는지 확인한다.
SMS를 쓰는 멤버를 막는 조직도 있다
조직 소유자는 "Only allow secure two-factor methods"(안전한 2단계 인증 방법만 허용)를 켤 수 있다. GitHub Docs는 안전한 방법을 패스키, 보안 키, 인증 앱, GitHub Mobile로 정의한다. 그런 조직에서는 SMS 방법이 하나라도 설정된 멤버는 조직의 리소스에 접근할 수 없다.
그 김에 확인할 다른 설정
2FA는 로그인을 지킨다. 이미 발급한 토큰과 키, 이미 승인한 앱은 계정으로 들어가는 별개의 경로로 남는다. 같은 날 점검하면 몇 분이면 된다.
- 패스키 추가
- 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일의 활동이 나열된다
classic보다 fine-grained 토큰을
개인 액세스 토큰(PAT: API나 git 작업에서 비밀번호 대신 쓰는 문자열)에는 classic과 fine-grained 두 종류가 있다. classic 토큰은 접근할 수 있는 조직의 모든 리포지토리와 개인 계정의 모든 리포지토리에 닿기 때문에, GitHub는 가능하면 fine-grained 토큰을 쓰라고 권한다.
GitHub는 1년 동안 쓰이지 않은 토큰을 자동으로 제거하지만, 그래도 만료일을 정하라고 강하게 권장한다. 명령줄에서만 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"(조직의 모든 사람에게 2단계 인증 요구)을 선택하고 Save를 클릭한다. GitHub Free와 GitHub Team 요금제에서 쓸 수 있다. "Only allow secure two-factor methods"를 더하면 SMS를 쓰는 멤버도 막는다.
켜면 2FA가 없는 멤버는 조직 리소스에 접근할 수 없게 되고, 2FA가 없는 외부 협업자는 제거된다. 봇과 서비스 계정도 포함되므로, 미리 알리고 People 페이지에서 누가 이미 2FA를 쓰는지 확인한 뒤 전환한다.
체크리스트
| 할 일 | 위치 | 시간 |
|---|---|---|
| 인증 앱으로 2FA 켜기 | Settings → Password and authentication | 5분 |
| 복구 코드를 비밀번호 관리자에 저장 | 같은 페이지의 Recovery codes → View | 2분 |
| 패스키나 보안 키 추가 | 같은 페이지의 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"
다음으로 읽기
- 방법 고르기: 다중 인증을 제대로 고르는 법: '피싱 저항'의 의미와 SMS가 약한 이유 / 용어집: 2단계 인증이란? / 패스키란?
- 토큰이 유출됐을 때: GitHub에 공개된 자격 증명 543,699건이 여전히 유효했다(2026년 연구)
- 커밋 전에 비밀 정보 막기: gitleaks로 커밋 전에 비밀 정보 막기
- 키 권한 좁히기: SSH 키 최소 권한
- 어디에 호스팅할까: 자체 호스팅 Git vs GitHub: 어느 쪽이 실제로 더 안전한가?
FAQ
QGitHub에서 2단계 인증은 어디서 켜나요?
오른쪽 위의 프로필 사진을 클릭하고 Settings를 선택한 뒤, 사이드바의 Access 섹션에서 Password and authentication을 클릭합니다. Two-factor authentication 섹션에서 Enable two-factor authentication을 클릭하고, 인증 앱(TOTP)이나 SMS로 설정합니다. 패스키, 보안 키, GitHub Mobile은 TOTP나 SMS를 설정한 뒤에 추가할 수 있습니다.
QGitHub에서 2FA는 의무인가요?
GitHub는 2023년 3월부터 GitHub.com에 코드를 기여하는 사용자에게 그룹별로 2FA를 의무화하고 있습니다. 릴리스 생성, 앱이나 액션 공개, 패키지를 공개한 리포지토리의 관리자나 기여자, 조직 소유자 등이 대상이 되는 조건입니다. 대상이 되면 이메일이 오고 45일의 등록 기간과 7일의 유예 기간이 주어지며, 그 뒤에는 2FA를 켤 때까지 GitHub.com을 쓸 수 없습니다. 알림을 받지 않은 사용자는 의무가 아니지만, GitHub는 강하게 권장합니다.
QGitHub 2FA에 SMS를 쓸 수 있나요?
지원되는 국가에서는 쓸 수 있으며, GitHub가 목록을 공개하고 있습니다. 하지만 GitHub Docs는 SMS가 가로채기에 취약하고 피싱에 강하지 않으며 신뢰성도 낮다는 이유로 TOTP 인증 앱을 강하게 권장합니다. SMS 2FA를 설정한 멤버를 차단하는 조직도 있습니다.
Q휴대폰을 잃어버리거나 바꿔서 GitHub 2FA 코드를 받을 수 없습니다. 어떻게 하나요?
먼저 복구 코드(기본 파일 이름은 github-recovery-codes.txt)를 찾아, 로그인 화면의 More options에서 2FA recovery code를 골라 하나를 입력하세요. 등록한 패스키나 보안 키로도 들어갈 수 있습니다. 아무것도 없다면 Begin account or email recovery를 선택해 이메일 일회용 비밀번호를 확인하고, 이전에 쓴 기기, SSH 키, 개인 액세스 토큰 중 하나로 본인임을 증명합니다. GitHub Support가 요청을 검토해 영업일 3일 이내에 이메일로 연락합니다.
Q복구 코드도 잃어버렸습니다. GitHub Support가 계정을 복구해 줄 수 있나요?
아닙니다. GitHub Docs는 보안상의 이유로, 2FA 수단과 복구 방법을 잃어버리면 GitHub Support가 2FA가 켜진 계정의 접근을 복구할 수 없다고 밝힙니다. 그 시점에서 계정은 잃은 것이며, 할 수 있는 일은 잠긴 계정에서 이메일 주소의 연결을 끊고 새 계정에서 쓰는 것입니다.
QSMS에서 인증 앱으로 바꾸려면 어떻게 하나요?
Password and authentication의 Two-factor methods에서 인증 앱(TOTP) 방법 옆의 Add를 클릭하고, QR 코드를 스캔해 6자리 코드를 입력한 뒤 Save를 클릭합니다. 그런 다음 Preferred 2FA method에서 앱을 선택하고, 더 이상 필요 없으면 SMS를 제거합니다. 2FA를 끌 필요가 없으므로 복구 코드는 계속 유효합니다.