개발자라면 누구나 한 번쯤은 경험했을 법한 상황입니다. 열심히 코드를 작성하고 드디어 git push
를 실행하는 순간, 화면에 나타나는 메시지, Git push 권한 거부 오류: Authentication failed 에러 메시지,
remote: Support for password authentication was removed on August 13, 2021.
fatal: Authentication failed for 'https://github.com/username/repository.git'
“어? 분명히 비밀번호를 제대로 입력했는데?” 하며 당황스러우셨을 텐데요. 사실 이 문제는 여러분만의 문제가 아닙니다. GitHub가 2021년 8월 13일부터 패스워드 인증 방식을 완전히 폐지했기 때문에 발생하는 현상이거든요.
이번 포스트에서는 Git push 인증 실패 에러의 주요 원인을 파악하고, 실제로 도움이 되는 해결책들을 단계별로 정리해드리겠습니다.
1. Git push 권한 오류 원인
GitHub 보안 정책 변경의 배경
GitHub는 보안 강화를 위해 2021년 8월 13일부터 HTTPS Git 작업에서 계정 비밀번호를 통한 인증을 완전히 중단했습니다. 대신 더 안전한 인증 방법인 Personal Access Token(PAT)이나 SSH 키를 사용하도록 정책을 변경했죠.
주요 원인들
1. 패스워드 인증 방식 사용
- 기존에 username/password 조합으로 인증하던 방식이 더 이상 작동하지 않음
- HTTPS URL을 사용하는 경우 PAT이 필수
2. 만료된 Personal Access Token
- 기존에 생성한 토큰이 만료되었거나 취소된 경우
- 토큰의 권한(scope)이 해당 작업에 적절하지 않은 경우
3. SSH 키 설정 문제
- SSH 키가 GitHub 계정에 등록되지 않았거나 잘못 설정된 경우
- SSH 에이전트가 실행되지 않았거나 키가 로드되지 않은 경우
4. 잘못된 Credential 저장
- 시스템에 저장된 오래된 인증 정보가 문제를 일으키는 경우
- Windows Credential Manager, macOS Keychain 등에 저장된 잘못된 정보
5. 자주 발생하는 에러 메시지별 원인
에러 메시지 | 주요 원인 |
---|---|
“Support for password authentication was removed” | GitHub 패스워드 인증 폐지 |
“Permission denied (publickey)” | SSH 키 미등록 또는 미로드 |
“fatal: Could not read from remote repository” | 저장소 접근 권한 없음 |
“Authentication failed for HTTPS” | 잘못된/만료된 PAT |
2. Git push 권한 오류 해결법
해결법 1: Personal Access Token(PAT) 생성 및 설정
Personal Access Token은 GitHub에서 제공하는 안전한 인증 방법으로, 비밀번호 대신 사용할 수 있는 토큰입니다.
Step 1: PAT 생성
- GitHub 로그인 후 우측 상단 프로필 클릭
- “Settings” 메뉴 선택
- 좌측 사이드바에서 “Developer settings” 클릭
- “Personal access tokens” → “Tokens (classic)” 선택
- “Generate new token” 또는 “Generate new token (classic)” 클릭
- 필요시 GitHub 비밀번호 재입력
Step 2: 토큰 설정
항목 | 설정 내용 | 예시 |
---|---|---|
Note | 토큰 용도 설명 | “Local Development Access” |
Expiration | 만료 기간 설정 | 90일 또는 1년 |
Scopes | 필요한 권한 선택 | repo (전체 저장소 접근) |
⚠️ 중요: 생성된 토큰은 페이지를 벗어나면 다시 볼 수 없으니 반드시 안전한 곳에 저장해두세요.
Step 3: PAT 사용 방법
방법 1: 명령어에 직접 포함
git remote set-url origin https://토큰@github.com/username/repository.git
# 또는
git push https://토큰@github.com/username/repository.git
방법 2: 프롬프트에서 입력
git push origin main
Username: your_github_username
Password: your_personal_access_token # 여기에 토큰 입력
방법 3: Credential Helper 설정
# 전역 설정으로 저장
git config --global credential.helper store
해결법 2: SSH 키 설정으로 완전 자동화하기 (권장)
SSH 키를 사용하면 매번 토큰을 입력할 필요 없이 자동으로 인증할 수 있습니다.
Step 1: 기존 SSH 키 확인
먼저 기존에 생성된 SSH 키가 있는지 확인해보세요:
ls -al ~/.ssh
다음과 같은 파일들이 보이면 이미 SSH 키가 존재하는 것입니다:
id_rsa
(개인키)id_rsa.pub
(공개키)id_ed25519
(개인키, 최신 알고리즘)id_ed25519.pub
(공개키, 최신 알고리즘)
Step 2: 새 SSH 키 생성
기존 키가 없거나 새로 생성하고 싶다면:
# ED25519 알고리즘 사용 (권장)
ssh-keygen -t ed25519 -C "your_email@example.com"
# RSA 알고리즘 사용 (구버전 호환성 필요시)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
생성 과정에서:
- 파일 저장 위치: 기본값(Enter) 또는 원하는 경로 입력
- 패스프레이즈: 보안을 위해 설정 권장 (선택사항)
Step 3: SSH 에이전트에 키 추가
macOS의 경우:
# SSH 에이전트 시작
eval "$(ssh-agent -s)"
# 키체인에 추가 (패스프레이즈 저장)
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
Windows의 경우:
# SSH 에이전트 시작
eval "$(ssh-agent -s)"
# 키 추가
ssh-add ~/.ssh/id_ed25519
Step 4: GitHub에 공개키 등록
생성된 공개키를 GitHub 계정에 등록해야 합니다:
공개키 복사:
# macOS
pbcopy < ~/.ssh/id_ed25519.pub
# Windows (Git Bash)
clip < ~/.ssh/id_ed25519.pub
# Linux
cat ~/.ssh/id_ed25519.pub
GitHub에 등록:
- GitHub → Settings → SSH and GPG keys
- “New SSH key” 클릭
- Title: 키를 구분할 수 있는 이름 입력
- Key: 복사한 공개키 붙여넣기
- “Add SSH key” 클릭
Step 5: SSH 연결 테스트
설정이 완료되었다면 연결을 테스트해보세요:
ssh -T git@github.com
성공하면 다음과 같은 메시지가 나타납니다:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
Step 6: Remote URL을 SSH로 변경
기존 HTTPS URL을 SSH로 변경:
# 현재 remote URL 확인
git remote -v
# SSH URL로 변경
git remote set-url origin git@github.com:username/repository.git
해결법 3: Credential Manager 문제 해결
시스템에 저장된 잘못된 인증 정보가 문제를 일으킬 수 있습니다.
Windows Credential Manager
Windows에서 저장된 잘못된 인증 정보가 문제를 일으킬 수 있습니다:
GUI 방법:
- Windows 검색에서 “Credential Manager” 검색
- “Windows 자격 증명” 선택
- GitHub 관련 항목 찾기
- “편집” 또는 “제거” 클릭
명령어 방법:
# Git credential helper 확인
git config --list | grep credential
# credential helper 재설정
git config --global --unset credential.helper
git config --global credential.helper manager-core
macOS Keychain
macOS에서는 Keychain Access를 통해 저장된 인증 정보를 관리할 수 있습니다:
GUI 방법:
- Spotlight 검색에서 “Keychain Access” 실행
- “github.com” 검색
- 해당 항목을 편집하거나 삭제
명령어 방법:
# Keychain에서 GitHub 인증 정보 삭제
git credential-osxkeychain erase
# 프롬프트에서 다음 입력:
# protocol=https
# host=github.com
# [Enter 두 번]
Linux
rm ~/.git-credentials
git config --global --unset credential.helper
해결법 4: Git Credential Manager (GCM) 활용
최신 Git Credential Manager를 사용하면 2FA를 포함한 인증을 자동으로 처리할 수 있습니다:
설치 방법:
macOS (Homebrew):
brew install --cask git-credential-manager-core
Windows:
- Git for Windows와 함께 자동 설치됨
- 또는 공식 릴리스 페이지에서 다운로드
Linux:
# Debian/Ubuntu
curl -LO https://github.com/GitCredentialManager/git-credential-manager/releases/latest/download/gcm-linux_amd64.2.0.877.deb
sudo dpkg -i gcm-linux_amd64.2.0.877.deb
설정:
git config --global credential.credentialStore secretservice
해결법 5: 2단계 인증(2FA) 사용자를 위한 해결책
GitHub에서 2FA를 활성화한 경우 추가 고려사항이 있습니다.
Personal Access Token 사용
2FA가 활성화된 계정에서는 일반 비밀번호 대신 반드시 PAT을 사용해야 합니다:
# Username: GitHub 사용자명
# Password: Personal Access Token (일반 비밀번호 아님!)
GitHub CLI 활용
GitHub CLI를 사용하면 2FA를 포함한 인증을 간편하게 처리할 수 있습니다:
설치:
# macOS
brew install gh
# Windows (Chocolatey)
choco install gh
# Linux (Debian/Ubuntu)
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
sudo apt install gh
인증 설정:
gh auth login
# 프롬프트에 따라 HTTPS 선택 및 브라우저 인증 진행
해결법 6: 자주 발생하는 에러 메시지별 대응법
“Support for password authentication was removed”
해결 방법: Personal Access Token 사용 또는 SSH 키 설정
“Permission denied (publickey)”
해결 방법:
# SSH 키 확인
ssh-add -l
# 키가 없다면 추가
ssh-add ~/.ssh/id_ed25519
# GitHub에 공개키 등록 확인
“fatal: Could not read from remote repository”
해결 방법:
# 저장소 URL 확인
git remote -v
# 권한 확인 (SSH 테스트)
ssh -T git@github.com
“Authentication failed for HTTPS”
해결 방법:
- GitHub에서 토큰 상태 확인
- 새 토큰 생성
- 저장된 credential 삭제 후 재설정
3. 빠른 문제 해결 체크리스트
문제가 발생했을 때 다음 순서로 확인해보세요:
✅ 1단계: 기본 확인사항
- [ ] GitHub 계정 상태 정상 확인
- [ ] 저장소에 대한 push 권한 확인
- [ ] 인터넷 연결 상태 확인
✅ 2단계: 인증 방식 확인
# Remote URL 확인
git remote -v
# HTTPS인 경우 PAT 또는 SSH로 변경 필요
# SSH인 경우 SSH 키 설정 확인 필요
✅ 3단계: 저장된 인증 정보 초기화
# Windows
git config --global --unset credential.helper
rundll32.exe keymgr.dll,KRShowKeyMgr
# macOS
git config --global --unset credential.helper
git credential-osxkeychain erase
# Linux
git config --global --unset credential.helper
rm ~/.git-credentials
✅ 4단계: 새로운 인증 설정
PAT 사용시:
git config --global credential.helper store
git push origin main
# Username과 PAT 입력
SSH 사용시:
# SSH 키 확인
ssh -T git@github.com
# Remote URL 변경
git remote set-url origin git@github.com:username/repository.git
Git push 인증 에러는 처음에는 당황스럽지만, 원인을 파악하고 적절한 해결책을 적용하면 충분히 해결할 수 있는 문제입니다. 특히 GitHub의 보안 정책 변경에 따른 것이니, 오히려 더 안전한 개발 환경을 구축하는 기회로 생각해보시면 어떨까요?
Personal Access Token이나 SSH 키 방식 모두 각각의 장단점이 있으니, 본인의 개발 환경과 보안 요구사항에 맞는 방법을 선택하시기 바랍니다. SSH 키는 한 번 설정하면 자동으로 인증되어 편리하고, PAT은 세밀한 권한 제어가 가능하다는 장점이 있어요.
앞으로는 이런 인증 에러로 개발 흐름이 끊기는 일 없이, 더 안전하고 효율적인 Git 워크플로우를 구축하시길 바랍니다!