본문 바로가기

테크 노트/소소한 개발 팁

github, 여러 repository에 대해 ssh 설정 하기

github 인증을 http로 하면 별 문제가 없습니다만 ssh 인증으로 사용할 때, 만약 자신의 ssh key를 여러 repository에 등록하려고 하면 어떻게 될까요?

아마도 위와 같은 상황이 연출될 것입니다.
이미 해당 ssh key가 다른 repository에 이미 등록되어 이 키를 재활용 할 수가 없는것이죠.


해결방법 

방법은 간단합니다. 특정 repository 마다 ssh key를 각각에 맞게 여러개 만들어서
github repository 설정에서 맞게 등록해주면 됩니다.

우선 ssh-keygen 명령을 통해 필요한 ssh key들을 만들어 봅시다.
(참고 https://git-scm.com/book/ko/v2/Git-서버-SSH-공개키-만들기)

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/자신의/홈패스/.ssh/id_rsa):
Created directory '/자신의/홈패스/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /자신의/홈패스/.ssh/id_rsa.
Your public key has been saved in /자신의/홈패스/.ssh/id_rsa.pub.
The key fingerprint is:

이처럼 파일명을 지정해 주지 않으면 id_rsa.pub , id_rsa로 파일이 생성됩니다.
필요한 만큼 ssh key 생성을 하도록 합시다.

그 다음은 특정 repository 마다 ssh key를 지정합시다.

1
2
3
4
5
6
7
8
9
$ vi ~/.ssh/config
 
Host project1.github.com
  Hostname github.com
  IdentityFile ~/.ssh/id_rsa1
 
Host project2.github.com
  Hostname github.com
  IdentityFile ~/.ssh/id_rsa2
cs

Host 뒤에는 내가 식별하기 쉬운 가상의 path를 알아보기 쉽게 넣어주세요.
Hostname은 실제 github 주소를 입력합니다.
IdentityFile은 각 repository에 사용할 ssh key 파일의 패스를 정확히 입력해주세요.

이제 본인 로컬에 있는 git 프로젝트의 remote를 위에서 설정한 Host로 바꿔주세요.

1
2
3
4
5
6
$ git remote -v
 
origin  git@github.com:user/project1.git (fetch)
origin  git@github.com:user/project1.git (push)
 
$ git remote set-url origin git@project1.github.com:user/project1.git
cs

project2 도 같은 방법으로 바꿔주도록 합시다.


마치며 

http로 하면 되지 뭐하러 이렇게 하느냐고 하실 수 있지만
한 서버에서 여러 프로젝트로 deploy key를 설정할때는 위 방법을 사용하면 되겠습니다.
(서버에서 내 아이디 / 패스워드를 넣을순 없으니까요)