티스토리 뷰
여러개의 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
- pagingView
- RECORDING
- Swift
- database
- ssh
- permission error
- Coordinator
- Realm
- UIBarButtonItem
- IOS
- AVFoundation
- UIControl
- Cleancode
- Closure
- xib
- HLS
- BaseViewController
- NIB
- customAlertView
- AVKit
- http live streaming
- Design Pattern
- CollectionView
- TDD
- UIButton
- testing
- m3u8
- Video
- AssociatedObject
- carousel
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |