한 컴퓨터에서 깃허브 계정 분리하여 사용하기
한 컴퓨터에서 여러 개의 깃허브 계정을 사용하는 법을 알아보자.
이 글에서는 편의상 개인용 / 업무용 계정 두 개를 사용한다고 가정하고 진행한다.
SSH 키 생성
1. .ssh 폴더로 이동한다.
$ cd ~/.ssh
2. 개인용 / 업무용 SSH 키 페어를 생성한다.
$ ssh-keygen -t rsa -C "깃허브 이메일 계정" -f "id_rsa_식별자"
ex) ssh-keygen -t rsa -C "cjsrhd94@gmail.com" -f "id_rsa_cjsrhd94"
3. 키 페어를 생성하기 위해 아래와 같이 사용할 비밀번호를 입력하라고 나오는데, 엔터를 눌러 넘어간다.
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
4. 비밀번호를 다시 입력하라고 나오는데, 엔터를 눌러 넘어간다.
Enter same passphrase again:
5. 아래와 같이 나오면 생성이 완료된 것이다.
Your identification has been saved in id_rsa_cjsrhd94
Your public key has been saved in id_rsa_cjsrhd94.pub
The key fingerprint is:
SHA256:L4WUFRowwPsjmK8c23P9X5b8VcDapVkCgbF6PR1j5aE cjsrhd94@gmail.com
The key's randomart image is:
+---[RSA 3072]----+
| ...o.. ++o. ..|
| . . =.. o.o.|
| . + . EB +|
| . . o . = X |
| o . S o + = .|
| o . o + o ..|
| .. . o. . = .|
| . +o . .. o ..|
| +..o .... .|
+----[SHA256]-----+
6. 파일 리스트를 확인하여 키 페어가 잘 생성됐는지 확인한다.
여기서 뒤에 .pub이 붙은 것이 공개키이고, 붙지 않은 것이 개인키이다.
$ ls
id_rsa_cjsrhd94 id_rsa_cjsrhd94.pub
위의 작업을 두 번 반복하여 개인용 SSH 키페어와 업무용 SSH 키페어를 생성한다.
SSH 키 등록
이제 위에서 만든 SSH 키를 ssh-agent에 등록하여 사용할 것이다.
ssh-agent란?
ssh-agent는 개인키의 비밀번호를 암호화하여 기억해두고, 이후 SSH로 원격 서버에 접속할 때 마다 활용하기 위해 사용한다.
ssh-agent 없이 SSH로 원격 서버에 접속하면 접속할 때마다 위에서 생략했던 SSH 키의 비밀번호를 입력해야한다. 이 과정이 귀찮아서 사용한다.
1. ssh-add 명령어로 생성한 SSH 키의 경로를 등록한다.
$ ssh-add "생성한 SSH 키의 경로"
ex) ssh-add ~/.ssh/id_rsa_cjsrhd94
2. 명령어를 실행했을 때 아래와 같이 나오면 정상적으로 추가된 것이다.
Identity added: /Users/kgh/.ssh/id_rsa_cjsrhd94 (cjsrhd94@gmail.com)
3. 만약 아래와 같은 오류가 발생한다면 다음 명령어를 입력하면 된다.
# error
Could not open a connection to your authentication agent.
# you should
$ eval $(ssh-agent)
config 파일 작성
1. vim 명령어로 config 파일을 생성한다.
$ vi ~/.ssh/config
2. 아래와 같이 작성한다.
# private
Host github.com-cjsrhd94
HostName github.com
IdentityFile ~/.ssh/id_rsa_cjsrhd94
User git
# work
Host github.com-work
HostName github.com
IdentityFile ~/.ssh/id_rsa_cjsrhdWork
User git
Host에는 앞으로 SSH로 접속할 때 사용할 suffix를 github.com-"suffix" 형태로 입력한다. (어떻게 사용되는지는 후술할 예정이다.)
IdentityFile은 해당 suffix를 활용한 경로를 통해 원격 서버에 접속할 때 사용할 SSH 키의 경로를 입력해준다.
HostName과 User는 위와 같이 입력하면 된다.
* vim 사용법을 모르시면 자주 사용하는 vim 단축키 내 사용예제를 확인하세요.
GitHub 계정 SSH 설정
1. 깃허브에 접속하여 아래와 같이 Settings - SSH and GPG keys - New SSH key 순서로 클릭하여 SSH 키 등록 페이지로 이동한다.
2. SSH 키를 등록한다.
Title은 깃허브에서 사용할 SSH 키 이름으로 구분할 수 있게 작성한다.
Key는 SSH 공개키의 값이다. cat 명령어로 값을 확인할 수 있으며 이를 복사 붙여넣기 하면 된다.
$cat id_rsa_cjsrhd94.pub
제대로 복사한 것인지 확인하는 방법은 맨 앞에 "ssh-rsa"와 맨 뒤의 "이메일"을 확인하면 된다.
SSH 키가 제대로 등록되었다면 1번 사진처럼 Authentication Keys 아래 목록 형태로 보인다.
개인 계정에는 개인용 키를, 업무용 계정에는 업무용 키를 설정하면 된다.
설정이 제대로 확인되었는지 확인 하기 위해 터미널에서 ssh 명령어를 사용한다.
$ ssh -T git@github.com-"suffix"
ex) ssh -T git@github.com-cjsrhd94
아래의 문구가 나온다면 "yes"를 입력하여 진행하면 된다.
# you can see this, click yes
The authenticity of host 'github.com (15.164.81.167)' can't be established.
RSA key fingerprint is SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
아래의 문구가 보인다면 설정이 잘 된 것이다.
# or
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
Hi cjsrhd94! You've successfully authenticated, but GitHub does not provide shell access.
SSH 키를 활용한 Github Repository 설정
ssh키를 활용하여 깃허브에 접속하기 위해서는 프로젝트 내 깃허브 접속 경로를 수정해야한다.
1. 아래 사진 처럼 레포지토리의 SSH 경로를 복사한다.
2. 복사한 경로를 아래와 같이 지정해둔 "suffix"를 추가하여 사용할 것이다.
git@github.com-"suffix":"레포지토리 주인 이름"/"레포지토리 이름".git
# In my case
ex) git@github.com-cjsrhd94:cjsrhd94/java-algorithm.git
ex) git@github.com-work:cjsrhd94/java-algorithm.git
아래와 같이 경로를 변경하여 사용한다.
# 기존 프로젝트
$ git remote rm origin # 삭제
$ git remote add origin git@github.com-cjsrhd94:cjsrhd94/java-algorithm.git # 등록
# 기존 프로젝트 클론
$ git clone git@github.com-cjsrhd94:cjsrhd94/java-algorithm.git
경로에 따른 git config 설정 변경
위의 과정대로 설정하였음에도 git config가 프로젝트에 따라 자동으로 변경되지 않는 경우가 있다. (나의 경우가 그랬다.) 이런 경우 특정 폴더와 하위 폴더들에 git config를 다르게 적용할 수 있다.
1. vim 명령어를 통해 .gitconfig 파일내 user부분에 아래와 같은 문구를 추가한다.
$ vi ~/.gitconfig
[user]
name = cjsrhd94
email = cjsrhd94@gmail.com
# start
[includeIf "gitdir:'특정 폴더의 경로'"]
path = '특정 경로에 적용할 config 파일'
# fin
# ex)
[includeIf "gitdir:~/Desktop/kgh/"]
path = ~/.gitconfig-work
2. "특정 경로에 적용할 config 파일"을 생성하여 해당 폴더와 하위 폴더에 적용할 git config를 작성한다.
vi "특정 폴더에 적용할 config 파일의 경로"
ex) vi ~/.gitconfig-work
[user]
name = "깃허브 닉네임"
email = "깃허브 이메일 계정"
# ex)
[user]
name = cjsrhdWork
email = cjsrhdWork@gmail.com