티스토리 뷰

Git

[Git] permission 에러 해결하기

진태우 2020. 3. 25. 17:42

여러개의 git 계정을 사용하다보면 push/pull을 할 때 충돌하는 경우가 생깁니다.

그럴때마다 아래와 같이 접근권한에 대한 에러 메시지가 나옵니다....

Permission to (repositoryName) denied to (userName)

새 프로젝트를 생성할 때마다 발생되서 잊지 않게 정리하려고 합니다.

해당 내용은 Mac을 기준으로 작성했습니다.

그럼 ssh 프로토콜을 사용해서 인증을 해보겠습니다.

 

1. 키 생성

우선 ssh-key가 없는 경우, 키를 생성해야합니다.

터미널을 열고 아래와 같이 명령어를 작성합니다. 이메일은 자신의 github 주소로 대체해 줍니다!!

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

 

명령을 입력하면 아래와 같이 키 파일을 어디에 어떤 파일명으로 저장할지 물어봅니다.

Enter를 누르면 기본 파일명인 id_rsa로 저장됩니다.

파일명만 적으면 해당 디렉토리에 저장되므로 원하는 디렉토리 경로까지 적어줘야 합니다.

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/Home/.ssh/id_rsa): (원하는 파일 이름)

 

2. 키 추가

이제 생성한 키를 추가할 차례입니다.

우선 아래 명령어로 추가되어 있는 키를 확인할 수 있습니다. 추가된게 없으면 아무것도 안나올 것입니다.

$ ssh-add -l

 

아래와 같이 키를 추가합니다. 다른 이름을 가진 키를 추가할 경우에는 id_rsa 대신 원하는 파일명을 넣어주세요.

$ ssh-add -K ~/.ssh/id_rsa

 

추가하고 잘 추가되었는지 확인해보면 아래와 같이 잘 나오는걸 확인할 수 있습니다.

4096 SHA256:/N7kmA1jZhC17AlNF1qHnkGVGdojgKFU0+Wlp4xgqiM your_email@example.com (RSA)

 

3. github 계정에 ssh 키 추가

github 계정으로 로그인하고, 아래 그림을 따라 ssh 키를 관리하는 화면으로 들어갑니다.

 

 

그럼 ssh 키 관리화면이 나올텐데 키 만들기 버튼을 누르면 아래와 같은 화면이 나올 것입니다.

 

Title에는 키를 식별할 수 있는 텍스트로 입력하고, Key 부분에는 위에서 생성한 ssh 키값을 넣어주는 부분입니다.

아래 명령을 사용해서 public 키값을 복사한 후, Key 란에 넣어주세요.

$ pbcopy < ~/.ssh/id_rsa.pub 

혹시 키를 붙어 넣을 때, 공백이나 줄바꿈이 들어가면 제대로 추가되지 않으니 주의해야 합니다.

 

모든 작업은 끝났습니다!! ;)

repository의 ssh 주소로 remote url을 변경해서 push/pull 해보세요!! 잘될거에요!!

 

...하지만 전 아래와 같은 에러메시지를 접하게 됬습니다.

 

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:taewoojin/repository.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

 

 

작업한 내용을 새 repository에 연결했는데, pull을 하지 않은 상태에서 push를 했기 때문에 pull을 받으라고 하는 상황입니다. 하지만 pull도 되지 않았죠...

 

$ git push -f origin

그래서 그냥 강제로 푸시해서 기존 내용을 덮어버리니 잘 되었습니다.

.gitignore, README 정도만 있는 repository라서 덮어버려도 상관없었지만, 내용이 많다면 이 방법은 사용하면 안될 것 같습니다...

 

 

끝인줄 알았지만 다른 문제에 봉착했습니다....

전 두개의 계정을 사용하기 위해 ssh 키를 등록해서 사용하는건데 하나의 계정만 권한 인증이 잘 되고, 나머지는 똑같이 안되는 것입니다...

바로 이 문제에 대한 해결방안을 알아보겠습니다.

 

아래와 같은 경로에 config 파일을 만들어 줍니다.

$ touch ~/.ssh/config

 

이 파일에는 호스트와 ssh 키값을 매핑해주는 내용이 들어갑니다.

# my account
Host github.com
  HostName github.com
  User taewoojin
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa_qkqnrpa

# company account
Host github.com-company
  HostName github.com
  User company
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa_company

여기서 중요한 부분은 Host와 IdentityFile 입니다.

각 호스트에 ssh 키가 연결되서 인증된다고 생각하면 됩니다.

 

아래 repository url을 보면 어떻게 매핑되는지 좀 이해하기 쉬울 것입니다.

// 나의 repository url
git@github.com:{githubId}/{repositoryName}.git

// 회사 repository url
git@github.com-company:{githubId}/{repositoryName}.git

 

아래 명령어를 사용하면 해당 호스트에 어떤 계정이 연결되어 인증됬는지 확인할 수 있습니다.

$ ssh -T git@github.com
Hi taewoojin! You've successfully authenticated, but GitHub does not provide shell access.

$ ssh -T git@github.com-company
Hi {companyName}! You've successfully authenticated, but GitHub does not provide shell access.

 

이제는 두 계정에서 깔끔하게 push/pull이 될 것입니다!!

 

 

- Reference

 

'Git' 카테고리의 다른 글

homebrew를 이용한 git 설치  (0) 2015.10.09
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함