깃허브에 푸시할 때 'remote rejected'라고 나오면서 푸시에 실패하는 경우가 있는데 원격 저장소에서 푸시를 거부하는 원인은 여러가지가 있습니다.

이번 게시물에서는 액세스 토큰 권한이 없어서 푸시가 안되는 경우의 해결방법을 알아보겠습니다. 참고로 Windows 10 환경에서 git이 Windows Credential Manager를 사용하는 상황입니다.

github remote rejected 푸시 실패하는 경우 해결방법 개인 액세스 토큰 권한 범위

 

github access token scope 때문에 remote 푸시 실패하는 경우

remote rejected 메시지와 함께 거절되는 푸시

! [remote rejected] master -> master (refusing to allow an OAuth App to create or update workflow `.github/workflows/build.yml` without `workflow` scope)
error: failed to push some refs to 'https://github.com/~~/~~.git'

에러 메시지를 읽어보면 OAuth App이 workflow(워크플로우) scope 없이 workflow를 진행하는 것을 허락하지 않으니 푸시를 거부한다고 나옵니다.

원격 리포지토리에 Github Actions로 workflow가 설정돼있는데, 푸시할때 사용하는 개인 액세스 토큰(PAT, Personal Access Token)의 OAuth 범위(scope)에 workflow가 설정되어 있지 않은 경우 발생하는 오류입니다.

저번에 Github MFA 이용시 토큰 생성 방법이라는 게시물에서 개인 액세스 토큰 발급 방법과 권한 설정방법을 알아봤는데요, 해당되는 액세스 토큰을 찾아서 workflow 권한을 추가해주면 끝입니다.

...그런데 왜 그런지 모르겠지만 토큰의 권한을 변경했는데도 계속 푸시가 안됩니다. 이럴때는 토큰을 지우고 새로 발급받으면 된다고 하네요. 아직도 왜 토큰 권한이 업데이트 안됐는지 잘 모르겠습니다 ;;

git 인증 정보 저장소 설정 확인방법

해당 로컬 git 리포지토리에서 git config -l을 입력했을 때 credential.helper=manager로 나오면 윈도우 내장 자격 증명 관리자(Credential Manager)를 사용중인건데요, 이때 토큰 정보는 자격 증명 관리자에 저장돼있으니 직접 삭제해줘야 합니다.

credential.helper가 설정되어 있지 않거나 cache인 경우는 로컬에 토큰 정보가 저장돼있지 않고, store인 경우는 디스크에 파일로 저장된 토큰 정보를 삭제해주면 됩니다. osxkeychain인 경우 키체인에서 지워주면 됩니다.

자격 증명 관리자

credential.helper=manager인 경우, 토큰을 직접 지워보겠습니다.

'자격 증명 관리자(Credential Manager)'를 검색해 실행시켜줍니다. 제어판(control panel)에 들어있습니다.

windows 자격 증명

여기서 Windows 자격 증명을 선택합니다.

git 자격 증명 삭제

여기는 현재 저장된 자격증명 목록이 쭉 나오는데요, 목록을 쭉 내려가다보면 git:https://github.com 항목이 있습니다. 이걸 제거해주면 됩니다.

그리고 이제 쉘에서 push를 하면 깃허브 로그인창(+MFA)이 나오는데요, 로그인을 하면 자동으로 PAT가 발급됩니다.

발급받은 개인 액세스 토큰 선택

그 다음은 발급된 PAT의 권한을 업데이트 해줍시다. 기본적으로 gist, repo scope만 설정되어 있는데요, 워크플로우를 설정해줍시다.

Settings - Developer settings - Personal access tokens 메뉴로 들어가서 방금 발급받은 토큰을 클릭합니다. 오른쪽에 발급 시간을 보면 어떤 토큰인지 알 수 있습니다. 사진은 권한을 수정한 후라서 토큰 이름 뒤에 workflow가 출력되어 있습니다.

토큰 권한 설정

아래로 쭉 내려서 workflow를 체크한 뒤 Update token을 눌러주면 완료입니다.