[GitHub] SSH를 이용해 여러개의 깃허브 계정 사용하기

Sony·2019년 11월 28일
14
post-thumbnail

프로젝트를 하다보면 서로 다른 깃허브 계정으로 작업해야 할 때가 있다. 예를 들어, 회사 프로젝트는 회사 깃허브 계정으로 개인 프로젝트는 개인 깃허브 계정으로 사용하는 경우이다. SSH를 이용하면 서로 다른 계정으로 프로젝트를 쉽게 관리할 수 있다.

그 동안은 하나의 깃허브 계정만으로 프로젝트 관리를 해왔는데 외부 프로젝트를 진행하면서 깃허브 계정을 새로 생성하게 되었다. 이번 기회에 SSH를 통해 여러개의 깃허브 계정으로 프로젝트를 관리하는 방법을 정리해보고자 한다. 사실 인터넷에 이미 많은 참고자료가 있지만, 미래의 나를 위해 한 번 더 정리한다.

설정 순서

1. ssh key 생성

2. ssh config 설정

3. git config 설정

4. 테스트

개인 계정과 회사 계정, 두 계정에 대한 ssh key를 만드는 과정을 예시로 하겠다.

1. ssh key 생성

  • /Users/본인닉네임/.ssh 에 들어간다.
$ ssh-keygen -t rsa -C "your_email@example.com"
  • 위 명령어로 ssh key를 생성한다.
  • 이메일은 자신의 깃허브 계정 이메일을 사용하면 된다.
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):id_rsa_me
  • ssh key의 이름을 입력한다.
  • 개인 프로젝트를 관리할 ssh key 이므로 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를 등록할 때 필요하다.

1-1. 생성한 ssh key를 ssh-agent에 등록

eval "$(ssh-agent -s)"
  • ssh agent를 실행한다.
ssh-add ~/.ssh/id_rsa_me
  • ssh key를 추가한다.

1-2. GitHub에 공개키 등록

깃허브 설정(settings)에 들어가면 좌측 사이드바 메뉴에 SSH and GPG keys 라는 메뉴가 있다. 여기서 New SSH key 버튼을 클릭해서 위에서 생성한 .pub파일의 내용을 복사해서 넣으면 된다.

cat /Users/본인닉네임/.ssh/id_rsa_me.pub

위 명령어로 내용을 출력한 뒤 복사하면 된다.

ssh-rsa $#@$**@ your_email@example.com

ssh-rsa부터 깃허브 이메일까지 복사해서 넣어준다.

아래 명령어를 사용하면 간편하게 파일 내용을 복사할 수 있다.

  • macOS:
tr -d '\n' < ~/.ssh/id_rsa_me.pub | pbcopy
  • Linux (requires the xclip package):
xclip -sel clip < ~/.ssh/id_rsa_me.pub
  • Git Bash on Windows:
cat ~/.ssh/id_rsa_me.pub | clip

회사 계정도 같은 방법으로 ssh key를 등록한다. (id_rsa_work.pub의 내용을 복사해서 등록)

2. ssh confing 설정

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

여기서 중요한 건 HostIdentityFile 이다.

  • Host: 이 값은 저장소 주소 불러올 때 쓰인다. 저장소를 구분하는 일종의 Key라고 생각하면 된다.
  • IdentityFile: ssh key의 경로이다. 각 계정의 ssh key의 경로와 이름을 입력해주면 된다.

위 설정은 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)

3. git config 설정

마지막으로 깃허브 저장소가 있는 폴더로 이동한다.
.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

4. 테스트

  • 깃허브 저장소에 연결된 로컬 터미널에서 아래 명령어를 쳐서 SSH key가 잘 동작하는지 확인 할 수 있다.
$ ssh -T git@github.com-me
Hi {GithubID}! You've successfully authenticated, but GitHub does not provide shell access.
  • 위와 같이 나온다면 정상적으로 연결이 된 것이다.
  • git add, commit, push를 통해 정상적으로 반영이 되는지 확인하면 된다.

위와 같이 welcome message가 나오지 않으면 아래 verbose 모드로 트러블슈팅을 해보자.

ssh -Tvvv git@gitlab.example.com

GitHub 저장소 클론

각 계정별 깃허브 저장소에서 Clone or download 버튼을 누르면, 두 가지 방식으로 클론을 할 수 있다.

앞으로는 깃허브 저장소에서 SSH를 이용해 클론을 하면 된다.


참고 링크

profile
개발하며 배운점과 회고를 남기는 공간입니다.

3개의 댓글

comment-user-thumbnail
2020년 7월 13일

ssh config 따라할때 파일명이랑 확장자는 뭐라고 지어줘요?

1개의 답글