Git과 GitHub를 사용하다 보면 다음과 같은 에러 메시지를 마주치게 되는 경우가 있습니다:
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/username/repository.git/'
이 글에서는 이러한 인증 문제가 발생하는 원인과 해결 방법에 대해 상세히 알아보겠습니다.
왜 패스워드 인증이 더 이상 작동하지 않는가?
2021년 8월 13일부터 GitHub은 HTTPS를 통한 Git 작업에서 패스워드 인증 방식을 제거했습니다. 이는 보안 강화를 위한 조치로, 더 안전한 인증 방식을 사용하도록 유도하기 위함입니다. 패스워드만으로는 계정 탈취 위험이 상대적으로 높기 때문입니다.
현대적인 GitHub 인증 방식
현재 GitHub에서 권장하는 인증 방식은 크게 세 가지입니다:
- 개인 액세스 토큰(Personal Access Token, PAT)
- SSH 키 인증
- GitHub CLI를 통한 인증
각 방식에 대해 상세히 알아보겠습니다.
1. 개인 액세스 토큰(PAT) 사용하기
PAT는 GitHub 계정의 패스워드 대신 사용할 수 있는 토큰입니다. 특정 권한만 부여할 수 있어 보안 측면에서 더 안전합니다.
PAT 생성 방법
- GitHub에 로그인 후 오른쪽 상단의 프로필 아이콘을 클릭하고 ‘Settings’로 이동
- 왼쪽 사이드바 하단의 ‘Developer settings’를 클릭
- ‘Personal access tokens’ → ‘Tokens (classic)’ 선택
- ‘Generate new token’ 클릭
- 토큰 이름 설정 및 유효기간 선택
- 필요한 권한(scopes) 선택 (최소한 ‘repo’ 권한은 필요)
- ‘Generate token’ 버튼 클릭
- 생성된 토큰을 안전한 곳에 저장 (토큰은 한 번만 표시됨)
PAT를 사용한 Git 작업
# 저장소 클론하기
git clone https://github.com/username/repository.git
# 사용자 이름 입력 후 비밀번호 대신 PAT 입력
# 또는 URL에 사용자 이름과 토큰을 포함시킬 수 있습니다
git clone https://username:your_token@github.com/username/repository.git
PAT의 장점과 단점
장점:
- 특정 권한만 부여 가능
- 필요시 쉽게 폐기 가능
- 만료 기간 설정 가능
단점:
- 토큰을 안전하게 관리해야 함
- 매번 입력해야 하는 번거로움 (자격 증명 관리자 사용으로 해결 가능)
2. SSH 키 인증 방식
SSH 키 인증은 공개키/개인키 쌍을 사용하는 방식으로, 많은 개발자들이 선호하는 방법입니다.
SSH 키 생성 및 설정 방법
- SSH 키 생성하기
ssh-keygen -t ed25519 -C "your_email@example.com" # 또는 더 널리 호환되는 RSA 방식 사용 ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- SSH 에이전트 시작 및 키 추가
# ssh-agent 시작 eval "$(ssh-agent -s)" # 개인키 추가 ssh-add ~/.ssh/id_ed25519 # 또는 id_rsa
- 공개키를 GitHub 계정에 추가
- 공개키 복사:
cat ~/.ssh/id_ed25519.pub | pbcopy
(Mac) 또는cat ~/.ssh/id_ed25519.pub | clip
(Windows) 또는cat ~/.ssh/id_ed25519.pub
- GitHub → Settings → SSH and GPG keys → New SSH key
- 키 제목 입력 및 복사한 공개키 붙여넣기 → Add SSH key 클릭
- 공개키 복사:
- 연결 테스트
ssh -T git@github.com
SSH를 사용한 Git 작업
# SSH URL을 사용하여 저장소 클론
git clone git@github.com:username/repository.git
# 기존 HTTPS 원격 저장소를 SSH로 변경
git remote set-url origin git@github.com:username/repository.git
SSH 키 인증의 장점과 단점
장점:
- 한 번 설정하면 재인증 필요 없음
- 높은 보안성
- 여러 시스템에서 동일한 키 사용 가능
단점:
- 초기 설정이 상대적으로 복잡
- 다른 컴퓨터에서 작업 시 추가 설정 필요
- 일부 제한적인 네트워크 환경에서는 SSH 포트(22)가 차단되어 있을 수 있음
3. GitHub CLI를 통한 인증
GitHub CLI(Command Line Interface)는 GitHub의 공식 커맨드라인 도구로, 터미널에서 GitHub의 다양한 기능을 사용할 수 있게 해줍니다.
GitHub CLI 설치 및 인증
- GitHub CLI 설치
- macOS:
brew install gh
- Windows:
winget install GitHub.cli
또는 scoop, chocolatey 사용 - Linux: 배포판에 따른 패키지 관리자 사용
- macOS:
- GitHub 계정으로 인증
gh auth login # 프롬프트에 따라 인증 방식 선택 (HTTPS/SSH) # 브라우저에서 GitHub 로그인 또는 인증 코드 입력
GitHub CLI를 사용한 저장소 작업
# 저장소 클론
gh repo clone username/repository
# Pull Request 작업
gh pr create
gh pr checkout
gh pr view
# 이슈 관리
gh issue create
gh issue list
GitHub CLI의 장점과 단점
장점:
- 간편한 인증 프로세스
- Git 외에도 다양한 GitHub 기능 사용 가능
- 자동 완성 및 도움말 기능
단점:
- 추가 도구 설치 필요
- GitHub 외의 Git 호스팅 서비스에서는 사용 불가
자격 증명 도우미(Credential Helper) 설정
PAT를 사용할 때 매번 입력하는 번거로움을 피하기 위해 자격 증명 도우미를 설정할 수 있습니다.
운영체제별 설정 방법
Windows:
git config --global credential.helper wincred
macOS:
git config --global credential.helper osxkeychain
Linux:
git config --global credential.helper cache
# 캐시 타임아웃 설정 (기본값: 15분)
git config --global credential.helper 'cache --timeout=3600'
또는 Git 자체 저장 방식 사용:
git config --global credential.helper store
# 주의: 비밀번호가 평문으로 저장됨
권한 문제 해결하기
GitHub 인증 외에도 로컬 시스템에서의 권한 문제로 Git 작업이 실패할 수 있습니다. 특히 /var/www
같은 시스템 디렉토리에서 작업할 때 자주 발생합니다.
주요 해결 방법
- 디렉토리 소유권 변경
sudo chown -R username:usergroup /path/to/directory
- 디렉토리 권한 변경
sudo chmod -R 755 /path/to/directory
- 다른 위치에 클론 후 이동
git clone [repository_url] ~/temp_repo sudo mv ~/temp_repo /desired/location
보안 모범 사례
GitHub 인증 작업을 더 안전하게 수행하기 위한 몇 가지 모범 사례를 소개합니다:
- 정기적인 PAT 갱신: 개인 액세스 토큰은 정기적으로 갱신하여 보안 위험을 최소화합니다.
- 최소 권한 원칙: PAT에 필요한 최소한의 권한만 부여합니다.
- SSH 키 암호 설정: SSH 키 생성 시 암호(passphrase)를 설정하여 키 파일이 유출되더라도 추가 보호 계층을 확보합니다.
- 2단계 인증(2FA) 활성화: GitHub 계정에 2FA를 설정하여 보안을 강화합니다.
- Git 환경에서 토큰 노출 주의: 커밋 메시지나 코드에 토큰이 포함되지 않도록 주의합니다.
결론
GitHub의 패스워드 인증 제거는 초기에는 불편함을 줄 수 있지만, 장기적으로는 더 안전한 개발 환경을 위한 중요한 변화입니다. 개인 액세스 토큰(PAT), SSH 키, 또는 GitHub CLI 중 자신의 작업 환경과 선호도에 맞는 방식을 선택하여 사용하면 됩니다.
각 인증 방식에는 장단점이 있으므로, 본인의 작업 환경과 보안 요구사항에 가장 적합한 방식을 선택하는 것이 중요합니다. 특히 팀 프로젝트나 공개 저장소 작업시에는 보안에 더욱 신경 쓸 필요가 있습니다.
현대적인 GitHub 인증 방식을 사용하면 더 안전하고 효율적인 개발 환경을 구축할 수 있습니다.
답글 남기기