Github 아이디 변경으로 인한 권한 문제

문제

GitHub 아이디를 변경하게 되면서 변경한 아이디로 블로그 설정을 변경한 뒤, remote 설정을 다시해 커밋한 내역을 원격 저장소에 푸쉬하려고했더니 다음과 같은 에러가 발생했습니다.

$ git push
remote: Permission to hongsii/hongsii.github.io.git denied to sihong12.
fatal: unable to access 'https://github.com/hongsii/hongsii.github.io.git/': The requested URL returned error: 403

원인

이유는 Git Credential 이였습니다. Git은 원격 저장소에 접근을 위해 SSH 프로토콜을 사용하며, 원격 저장소에서 데이터를 받으려면 사용자명과 비밀번호를 입력해야합니다. 원격 저장소와 데이터를 교환할 때마다 사용자명과 비밀번호를 입력하면 번거롭기 때문에 Git에서는 매번 입력하지 않도록 Credential 기능을 제공합니다. Credential 기능에서 사용할 수 있는 옵션은 아래와 같습니다.

  • 기본적으로 아무 옵션을 설정하지 않는다면 원격 저장소에 접근할 때마다 인증정보를 입력해야 합니다.
  • cache 모드를 사용하면 인증정보를 메모리에 일정시간 저장합니다. 유효기간은 기본 15분이며, 변경 가능합니다.
  • store 모드는 인증정보를 Disk에 텍스트파일로 저장합니다. 사용자의 홈 디렉토리에 일반 텍스트파일로 저장되기 때문에 인증정보가 노출될 위험이 있습니다.
  • Mac을 사용한다면 osxkeychain 모드를 사용할 수 있습니다. 이 옵션은 Mac의 Keychain 시스템을 이용해 인증정보를 저장합니다. store모드처럼 계속해서 인증정보가 유지되지만, 암호화하여 저장되기 때문에 훨씬 안전합니다.
  • Windows에서도 wincred 시스템을 이용해 Mac의 osxkeychain처럼 인증정보를 암호화하여 저장합니다.

모드 설정은 git config 옵션으로 원하는 모드를 설정하면 됩니다. 모든 저장소에서 동일한 설정 사용을 위해 global로 설정합니다.

$ git config --global credential.helper [mode]

저는 Mac을 사용 중이라 설정을 확인해보니 osxkeychain 모드로 설정되어있었습니다. 그렇기 때문에 변경 전 GitHub 아이디의 인증정보로 변경된 아이디의 원격 저장소에 푸쉬하려고 하니 권한이 없어서 에러가 났습니다…
해결하기 위해서 변경된 아이디의 인증정보를 초기화하고 다시 설정하면 됩니다. 초기화를 위해 credential.helper 옵션을 삭제해줍니다.

$ git config --global --unset credential.helper
$ git config --system --unset credential.helper

특정 저장소의 인증정보만 변경하고 싶다면 –local 옵션을 사용하면 됩니다.

osxkeychain모드는 위 명령어로는 인증정보가 초기화되지 않았습니다. 더 찾아보니 삭제 명령어(git credential-osxkeychain erase)를 사용하면 삭제할 수 있다고 하는데 제 맥북에서는 삭제되질 않아서 Keychain Access.app을 실행해 github.com 항목을 삭제해주었습니다. github.com의 위, 아래 항목은 소스트리에서 사용하는 인증정보이기 때문에 추가로 삭제해줬습니다. 키체인 제거

Credential을 초기화해주고 나면 원격 저장소에 접근할 때, 다시 인증정보를 입력받으며 입력한 인증정보가 저장되어서 다음에는 인증정보의 입력없이 접근할 수 있습니다.


참고