프로젝트를 하다보면 서로 다른 깃허브 계정으로 작업해야 할 때가 있다. 예를 들어, 회사 프로젝트는 회사 깃허브 계정으로 개인 프로젝트는 개인 깃허브 계정으로 사용하는 경우이다. SSH를 이용하면 서로 다른 계정으로 프로젝트를 쉽게 관리할 수 있다.
그 동안은 하나의 깃허브 계정만으로 프로젝트 관리를 해왔는데 외부 프로젝트를 진행하면서 깃허브 계정을 새로 생성하게 되었다. 이번 기회에 SSH를 통해 여러개의 깃허브 계정으로 프로젝트를 관리하는 방법을 정리해보고자 한다. 사실 인터넷에 이미 많은 참고자료가 있지만, 미래의 나를 위해 한 번 더 정리한다.
1. ssh key 생성
2. ssh config 설정
3. git config 설정
4. 테스트
개인 계정과 회사 계정, 두 계정에 대한 ssh key를 만드는 과정을 예시로 하겠다.
/Users/본인닉네임/.ssh
에 들어간다.$ ssh-keygen -t rsa -C "your_email@example.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):id_rsa_me
id_rsa_me
라고 했다.id_rsa_me
, id_rsa_me.pub
파일이 생성된다.같은 방식으로 회사 계정으로도 ssh key를 생성한다.
- 회사 프로젝트를 관리할 깃허브 계정 이메일을 입력한다.
- 회사 계정의 ssh key라면
id_rsa_work
,id_rsa_company
등 자신이 원하는 이름으로 만든다.id_rsa_work
,id_rsa_work.pub
파일이 생성된다.
.pub
이 붙은 파일은 공개키이고 붙지 않은 파일은 비밀키이다. 비밀키는 절대 공개해서는 안 된다. 공개키는 나중에 GitHub에 ssh key를 등록할 때 필요하다.
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa_me
깃허브 설정(settings)에 들어가면 좌측 사이드바 메뉴에 SSH and GPG keys
라는 메뉴가 있다. 여기서 New SSH key
버튼을 클릭해서 위에서 생성한 .pub
파일의 내용을 복사해서 넣으면 된다.
cat /Users/본인닉네임/.ssh/id_rsa_me.pub
위 명령어로 내용을 출력한 뒤 복사하면 된다.
ssh-rsa $#@$**@ your_email@example.com
ssh-rsa부터 깃허브 이메일까지 복사해서 넣어준다.
아래 명령어를 사용하면 간편하게 파일 내용을 복사할 수 있다.
tr -d '\n' < ~/.ssh/id_rsa_me.pub | pbcopy
xclip -sel clip < ~/.ssh/id_rsa_me.pub
cat ~/.ssh/id_rsa_me.pub | clip
회사 계정도 같은 방법으로 ssh key를 등록한다. (id_rsa_work.pub의 내용을 복사해서 등록)
Github에서 각각의 ssh key로 접근할 수 있게 해주기 위해서 설정이 필요하다.
/Users/본인닉네임/.ssh/
에서 config 파일을 직접 만들어줘야 한다.
config파일에 아래와 같이 내용을 입력한다.
# 개인 계정
Host github.com-me
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_me
# 회사 계정
Host github.com-work
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_work
여기서 중요한 건 Host와 IdentityFile 이다.
위 설정은 Host가 github.com-work
일 때 실제 Host는 github.com
를 사용하고 SSH Key 파일은 ~/.ssh/id_rsa_work
를 사용하라는 의미이다.
여기서 Host는 git clone 할 때 지정하는 Host를 말한다. 따라서 클론하거나 리모트 저장소를 등록할 때 Host를 수동으로 변경해줘야 한다. 예를 들어, 원래 주소가 git@github.com:sonypark/repository.git
일 경우 clone 할 때는 git@github.com-work:sonypark/repository.git
으로 해줘야 한다.(github.com
-> github.com-work
)
마지막으로 깃허브 저장소가 있는 폴더로 이동한다.
.git/
경로에 있는 config 파일을 열어보자.
[remote "orgin"]
url = git@github.com:{GithubID}/{RepositoryName}.git
위의 부분을 다음과 같이 변경한다. (여기서 .ssh/config
파일에서 설정한 Host 값이 쓰인다.)
.git/config
파일[remote "orgin"]
url = git@github.com-me:{GithubID}/{RepositoryName}.git
.git/config
파일[remote "orgin"]
url = git@github.com-work:{GithubID}/{RepositoryName}.git
$ ssh -T git@github.com-me
Hi {GithubID}! You've successfully authenticated, but GitHub does not provide shell access.
위와 같이 welcome message가 나오지 않으면 아래 verbose 모드로 트러블슈팅을 해보자.
ssh -Tvvv git@gitlab.example.com
각 계정별 깃허브 저장소에서 Clone or download
버튼을 누르면, 두 가지 방식으로 클론을 할 수 있다.
앞으로는 깃허브 저장소에서 SSH를 이용해 클론을 하면 된다.
ssh config 따라할때 파일명이랑 확장자는 뭐라고 지어줘요?