Git push 인증 실패 해결: GitHub 비밀번호 인증 오류와 PAT(개인 액세스 토큰) 설정

git push 중 remote: Support for password authentication was removed 또는 Authentication failed 오류로 커밋이 안 올라갈 때가 있습니다. 왜 막혔는지, 어떻게 다시 push할 수 있는지 정리했습니다.
빠른 결론
1) GitHub가 Git 작업에서 계정 비밀번호 인증을 이제 받지 않기 때문입니다.
2) PAT를 발급해 자격 증명으로 등록하면 해결됩니다.
3) 토큰 관리가 번거로우면 SSH 전환도 대안입니다.
2026년 8월 12일 기준, GitHub 공식 문서(docs.github.com)와 공식 변경 이력(github.blog/changelog)을 확인해 작성했습니다.
왜 비밀번호로 push가 안 될까
GitHub는 2021년 8월 13일 09:00(PST)부터 Git 작업(HTTPS 기반 clone/push/pull)에 계정 비밀번호를 받지 않는다고 공식 changelog에서 밝혔습니다. 이후 PAT, OAuth 토큰, SSH 키, GitHub App 설치 토큰만 인증에 쓸 수 있습니다. 예전 비밀번호 자격 증명이 남은 PC에서 이 오류가 뒤늦게 나타날 수 있습니다.
증상별 원인 구분
| 증상 | 가능한 원인 |
|---|---|
| password authentication was removed | 자격 증명 저장소에 예전 비밀번호가 남아 있음 |
| Authentication failed | PAT가 틀렸거나 만료됨 |
| Permission to X denied | 토큰 scope 부족 또는 조직 SSO 미인증 |
| 매번 로그인 창이 뜸 | credential.helper 미설정 |
해결 방법: PAT 발급부터 push까지
1단계. 개인 액세스 토큰(PAT) 발급
Developer settings의 Personal access tokens에서 새 토큰을 생성합니다. GitHub는 두 종류의 PAT를 제공합니다.
| 구분 | Fine-grained | Classic |
|---|---|---|
| 권한 범위 | 저장소/리소스 단위로 세밀 지정 | repo 등 넓은 scope 단위 |
| 생성 개수 | 계정당 최대 50개 | 별도 제한 명시 없음 |
| 권장 상황 | 특정 프로젝트 최소 권한 접근 | 여러 저장소 폭넓게 다룰 때 |
단순 push용이면 fine-grained에서 해당 저장소를 지정해 Contents를 read/write로 설정하거나, classic에서 repo scope를 선택합니다. 만료 기간은 반드시 설정하고, 토큰 문자열은 발급 직후 한 번만 표시되므로 즉시 복사해 둡니다.
2단계. 저장된 자격 증명 갱신
- Windows: 자격 증명 관리자(Credential Manager)에서
git:https://github.com항목을 제거합니다. 이후 push 시 묻는 비밀번호란에 PAT를 입력합니다. - macOS: 키체인 접근(Keychain Access)에서
github.com을 검색해 "인터넷 암호" 항목을 편집·삭제합니다. 명령줄로도 가능합니다.git credential-osxkeychain erase host=github.com protocol=https - 공통: 특정 URL의 저장값은 아래 명령으로도 지울 수 있습니다.
echo url=https://github.com | git credential reject
3단계. push 재시도 및 헬퍼 설정
다시 git push를 실행하면 뜨는 비밀번호 프롬프트에 PAT를 붙여넣습니다. 매번 입력이 번거로우면 헬퍼를 설정합니다.
git config --global credential.helper manager # Windows
git config --global credential.helper osxkeychain # macOS
git config --global credential.helper libsecret # Linux
Git Credential Manager를 쓰면 OS 자격 증명 저장소와 연동돼 토큰을 자동 재사용합니다.
4단계(대안). SSH로 전환
토큰 갱신이 번거로우면 SSH 인증도 대안입니다. 개인 키를 생성해 ssh-agent에 등록하고 공개 키를 GitHub 계정에 등록한 뒤 원격 URL을 SSH 주소로 바꾸면 비밀번호나 토큰 입력 없이 push할 수 있습니다. 단 SAML SSO를 쓰는 조직 저장소는 SSH 키도 별도 SSO 인증이 필요합니다.
주의사항
- PAT는 비밀번호와 동일한 민감 정보입니다. 코드나 공개 저장소에 노출되지 않도록 주의합니다.
- 만료 기간을 설정하면 유출 시 피해를 줄일 수 있습니다. GitHub는 1년간 미사용 PAT를 자동 제거하기도 합니다.
- fine-grained 토큰은 필요한 최소 권한만 부여하는 것이 원칙입니다.
- CI 스크립트는 개인 PAT 대신
GITHUB_TOKEN사용을 우선 검토하는 것이 공식 권장입니다.
해결되지 않을 때 추가 점검
git remote -v로 원격 주소(HTTPS/SSH)가 인증 방식과 맞는지 확인합니다.- 조직 저장소라면 토큰이나 SSH 키가 해당 조직의 SSO(SAML)에 authorize 되어 있는지 확인합니다.
- 토큰 scope가 Contents 쓰기 권한을 포함하고, 만료되지 않았는지 확인합니다.
Q1. 예전 비밀번호는 이제 아무 데도 못 쓰나요?
GitHub changelog에 따르면 2021년 8월 13일부터 Git 작업(HTTPS 인증) 시 계정 비밀번호는 받지 않습니다. push/pull/clone엔 PAT나 SSH 키, OAuth 토큰을 써야 합니다.
Q2. fine-grained와 classic 토큰 중 뭘 써야 하나요?
fine-grained는 저장소 단위로 세밀하게 권한을 지정하며 계정당 최대 50개까지 만들 수 있고, classic은 repo 등 넓은 scope로 동작합니다. 특정 프로젝트만 접근한다면 fine-grained, 여러 저장소를 다룬다면 classic이 간단합니다.
Q3. SSH로 바꾸면 토큰 관리를 안 해도 되나요?
SSH는 로컬 개인 키로 인증하므로 토큰 만료로 인한 push 실패는 줄어듭니다. 다만 키도 안전하게 보관해야 하며, GitHub는 1년간 미사용 SSH 키를 자동 삭제할 수 있습니다.
관련 글
- Docker 포트 충돌 해결: port is already allocated
- PostgreSQL remaining connection slots 오류 해결
- IntelliJ Gradle JVM 버전 오류 해결