한 기기에서 여러 GitHub 계정 SSH 인증 설정
얼마 전 GitHub 의 비밀번호 인증 방식이 중지되었다. 이제는 pull, push 등 GitHub 에 인증이 필요한 액션을 할 때 비밀번호가 아닌 다른 인증 방식을 설정해야 한다.
Instead, token-based authentication (for example, personal access, OAuth, SSH Key, or GitHub App installation token) will be required for all authenticated Git operations.
그나마 익숙한 것이 무엇인가 살펴보았더니 SSH인 것 같았다. 그래서 SSH로 인증을 설정하기로 했다.
(이 글은 Mac 기준으로 작성되었다.)
1. 하나의 계정에 대한 SSH 인증 설정
한 계정에 대한 설정 방법은 GitHub 공식 문서에 매우 잘 설명되어 있다. 영어가 불편하지 않다면 공식 문서를 보자.
일단 ssh-keygen
을 사용해 인증서를 생성하자.
ssh-keygen -t ed25519 -C "your_email@example.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/default/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
경로를 지정하고 싶다면 -f
옵션을 주자
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/myCompany/ed25519
생성된 인증서를 key agent 에 등록시켜야 한다. ssh-agent 를 백그라운드에서 실행하자.
eval "$(ssh-agent -s)"
설정에는 ~/.ssh/config
파일이 필요한데, 맥의 경우 자동 생성되지 않았을 수 있다. 그 경우 파일을 직접 생성해서 아래와 같은 내용을 넣어야 한다.
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
~/.ssh/config
파일도 확인했으면 이제 아래 명령어를 통해 인증서를 ssh-agent 에 추가하자.
ssh-add -K ~/.ssh/id_ed25519
GitHub에 인증서를 등록하려면 아래 명령어를 통해 공개키를 클립보드로 복사해서 사용하면 된다.
pbcopy < ~/.ssh/id_ed25519.pub
복사한 공개키는 GitHub [Settings] - [SSH and GPG keys] - [New SSH key] 를 통해 등록하자.
여기까지 하면 이제 리파지토리의 SSH 주소를 remote 로 사용해 코드를 push/pull 할 수 있다.
git remote set-url origin git@github.com:ME/MY_REPOSITORY.git
2. 여러 계정의 SSH 설정을 한 기기에서 같이 하기
한 사람이 GitHub 계정을 여러 개 가지고 있을 수도 있다. 예를 들면 개인 계정과 회사 계정을 분리한 경우가 있을 수 있다. 그리고 사람 일이 늘 그렇듯, 한 기기에서 개인 일과 회사 일을 다 해야 하는 경우가 생길 수도 있다. 그럴 경우에는 어떻게 설정해주면 될까?
거의 모든 과정이 1번과 동일하다. 다른 것은 키가 저장될 위치, ~/.ssh/config
, 그리고 로컬 리파지토리의 remote 주소이다.
2.1. 키가 저장될 위치
키가 저장될 위치가 다른 것은 당연하다. 다른 두 파일을 하나의 위치에 같이 저장할 수는 없으니까. 일단 처음에 저장된 것은 기본 위치에 두고, 추후 추가되는 것을 다른 위치에 저장해보자.
# 처음에 저장된 SSH 키의 위치. (기본값)
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub
# 이후 추가한 SSH 키의 위치.
# 당연하지만 다른 디렉토리의 다른 파일명으로 저장해도 무방하다.
~/.ssh/myCompany/id_ed25519
~/.ssh/myCompany/id_ed25519.pub