
GitHub 다중 계정을 사용할 때 다른 계정에서 이미 등록한 ssh키를 또 등록할 수 없어 2개 이상의 ssh key를 사용해야하는 경우가 있다. 혹은 의도적으로 프로젝트마다 다른 키를 사용해야하는 상황도 있다.
간단한 .ssh/config 설정만으로 할 수 있는데 방법을 정리해본다.
기존의 키가 아래와 같이 있다고 가정한다.
~/.ssh/id_rsa
~/.ssh/id_rsa.pub
Or 요즘에는 기본적으로 아래 파일명으로 생성됨:
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub
그럼 아래와 같은 SSH URL로 클론을 시도할 때 아무런 설정이 없다면 위 키를 사용하여 인증을 한다.
git clone git@github.com:org1/project1.git
문제는 아래와 같이 다른 GitHub 계정이 권한을 가진 다른 프로젝트를 clone 할 때도 계속 기본 키를 사용 시도해서 클론이 안된다.
git clone git@github.com:org2/project2.git
secondgithub 이라는 이름으로 Host 설정을 추가하자.
Host secondgithub
HostName github.com
User git
IdentityFile ~/.ssh/secondgithub
secondgithub을 원하는 이름으로 변경해도되며, 짧으면 타이핑하기 좋다.
IdentityFile 에는 secondgithub 에서 사용하는 키 경로를 입력한다. 키가 없다면 아래의 명령어로 새로 만들어도 된다.
cd ~/.ssh
ssh-keygen -f secondgithub
키를 아직 secondgithub 쪽에 등록 안했다면 키 등록 페이지에서 .pub 파일 내용을 등록 한다.
설정은 끝났다. secondgithub키를 사용하고 싶은 Git 프로젝트에서는 원격 저장소 이름의 git@github.com: 부분을 .ssh/config 에 추가한 host로 변경해주면 된다.
기본 키 사용 할 때:
git clone git@github.com:org1/project1.git
secondgithub 키 사용 할 때:
git clone secondgithub:org2/project2.git
이미 클론을 해서 사용하고 있는 경우:
remote url을 변경해주면 된다. origin이라는 이름으로 사용하고 있을 때,
git remote set-url origin secondgithub:org2/project2.git
전역 gitconfig 설정 파일을 적당한 이름으로 추가하자. 글에서는 ~/.gitconfig-secondgithub 로 추가한 것으로 가정.
[user]
# 두번째 계정 이름, 이메일
name = MySecondName
email = my-second-email@example.com
그리고 기본 전역 gitconfig 설정 파일인 ~/.gitconfig 파일에 remote 저장소 주소를 보고 위에 설정 파일을 사용하는 설정을 추가한다.
[user]
# 기본 이름, 이메일
name = Alfred
email = b6pzeusbc54tvhw5jgpyw8pwz2x6gs@gmail.com
[includeIf "hasconfig:remote.*.url:secondgithub:*/**"]
path = .gitconfig-secondgithub