2022년 7월 작성, 2026년 10월 보완. 지금 GitHub는 저장소와 권한을 좁게 지정할 수 있는 fine-grained 토큰을 권장한다. 발급 순서를 fine-grained 기준으로 다시 썼다. 토큰을 매번 입력하기 번거로우면 credential.helper 설정을, 토큰 대신 SSH를 쓰려면 GitHub SSH 키 등록을 참고한다.
목차
문제 상황
GitHub 저장소를 clone·pull·push·fetch하려고 하면 아래 오류가 나면서 동작하지 않았다.
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for ~
원인
GitHub는 2021년 8월 13일부터 Git 작업에서 계정 비밀번호로 인증하는 방식을 막았다. 터미널이나 외부 프로그램에서 HTTPS로 접근할 때는 비밀번호 대신 personal access token(PAT)을 써야 한다.
해결 방법: fine-grained 토큰 발급
- GitHub 오른쪽 위 프로필 → Settings → 왼쪽 맨 아래 Developer settings 로 이동한다.
- Personal access tokens → Fine-grained tokens → Generate new token 을 누른다.
- 토큰 이름과 만료일(Expiration) 을 정한다. 만료일은 꼭 설정한다.
- Repository access 에서 토큰을 쓸 저장소만 고른다(Only select repositories).
- Permissions 의 저장소 권한에서 Contents 를 Read and write 로 바꾼다. push까지 하려면 이 권한이 필요하다.
- Generate token 을 누르고, 화면에 나온 토큰을 바로 복사한다. 페이지를 벗어나면 다시 볼 수 없다.
- Git이 비밀번호를 물을 때 비밀번호 대신 이 토큰을 붙여 넣는다.
여러 저장소에 한꺼번에 접근해야 하거나 fine-grained 토큰이 지원하지 않는 기능이 필요하면, 같은 화면의 Tokens (classic) 에서 repo 권한으로 classic 토큰을 만들 수도 있다. classic 토큰은 접근할 수 있는 모든 저장소에 권한이 생기니 만료일을 짧게 잡는다.
보안 주의점
- 토큰은 비밀번호와 같다. 코드나 저장소에 커밋하지 않는다.
https://토큰@github.com/...처럼 원격 주소에 토큰을 넣으면.git/config와 셸 기록에 그대로 남는다. 이렇게 쓰지 않는다.- 토큰이 유출됐다고 생각되면 바로 Settings에서 삭제(Revoke)하고 새로 만든다.
정리
- GitHub 밖(터미널, 외부 프로그램)에서 HTTPS로 인증할 때는 비밀번호 대신 personal access token을 쓴다.
- 가능하면 fine-grained 토큰으로 저장소와 권한을 좁게 주고, 만료일을 설정한다.