SSH로 GitHub 계정 두 개 동시에 쓰기 (회사 + 개인)

Doosan published on
4 min, 646 words

Categories: post

GitHub 계정이 두 개(회사용, 개인용)인데 같은 맥에서 쓰려면 HTTPS 방식으로는 한계가 있다. macOS Keychain이 github.com 당 토큰을 하나만 저장하기 때문에, 나중에 로그인한 계정의 토큰으로 항상 덮어씌워진다.

remote: Permission to emptyfridge0900/repo.git denied to bds0900.
fatal: unable to access '...': The requested URL returned error: 403

SSH 키를 계정별로 따로 만들고 ~/.ssh/config로 라우팅하면 이 문제를 깔끔하게 해결할 수 있다.


전체 흐름

1. 기존 SSH 키 확인
2. 파일 이름 규칙 이해
3. 회사 계정용 SSH 키 새로 생성 (ssh-keygen)
4. ~/.ssh/config 에 Host 별칭 등록
5. SSH 에이전트에 키 추가 (ssh-add)
6. 회사 GitHub 에 공개키 등록
7. 연결 테스트 (ssh -T)
8. 기존 repo의 remote URL 을 SSH 방식으로 변경
9. 재부팅 후에도 유지되게 만들기 (AddKeysToAgent)

1. 기존 SSH 키 확인

ls -la ~/.ssh/

id_ed25519id_ed25519.pub 가 있으면 이미 SSH 키가 하나 있는 것이다. 어느 계정에 연결되어 있는지는 공개키 파일 마지막 줄을 보면 알 수 있다.

cat ~/.ssh/id_ed25519.pub
# ssh-ed25519 AAAA... personal@gmail.com

GitHub 에 실제로 연결되는지도 확인한다.

ssh -T git@github.com
# Hi emptyfridge0900! You've successfully authenticated...

ssh -T터미널(shell) 세션 없이 인증만 테스트하는 옵션이다 (-T = no pseudo-terminal).


2. 파일 이름 규칙 이해

SSH 키 파일 이름은 두 부분으로 구성된다.

부분의미
id_"identity"의 약자. SSH가 인증에 쓰는 파일임을 나타내는 표준 접두사
ed25519암호화 알고리즘 이름 (Edwards-curve Digital Signature Algorithm 25519). 현재 가장 권장되는 방식

키를 생성하면 항상 두 파일이 만들어진다.

  • id_ed25519개인키(private key). 절대 외부에 공유하지 않는다.
  • id_ed25519.pub공개키(public key). GitHub 에 등록하는 파일.

3. 회사 계정용 SSH 키 생성

ssh-keygen -t ed25519 -C "work@company.com" -f ~/.ssh/id_ed25519_company -N ""

각 옵션 설명:

옵션의미
-t ed25519알고리즘 타입 지정. ed25519가 현재 표준 (기존의 rsa 보다 짧고 빠르고 안전)
-C "work@company.com"Comment. 공개키 파일 맨 끝에 붙는 라벨. 어떤 계정 키인지 구분하는 용도. 이메일일 필요는 없지만 관례적으로 사용
-f ~/.ssh/id_ed25519_company저장할 파일 경로 지정. 기본값은 ~/.ssh/id_ed25519 인데, 이미 개인용 키가 거기 있으니 이름을 다르게 준다
-N ""패스프레이즈(암호)를 빈 값으로 설정. 입력창이 뜨지 않고 바로 생성된다

실행 후 두 파일이 생긴다.

~/.ssh/id_ed25519_company      # 개인키
~/.ssh/id_ed25519_company.pub  # 공개키

4. ~/.ssh/config 설정

SSH 클라이언트는 연결 시 ~/.ssh/config 를 읽어서 어떤 키를 쓸지 결정한다. 계정별로 Host 별칭을 만들어주면 된다.

# 개인 GitHub (emptyfridge0900)
Host github-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519
  AddKeysToAgent yes

# 회사 GitHub (bds0900)
Host github-company
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_company
  AddKeysToAgent yes

각 지시어 설명:

지시어의미
Host github-personal이 블록에 붙이는 별칭. git@github-personal:... 처럼 쓰면 이 설정이 적용됨
HostName github.com실제 접속할 서버 주소. 별칭이 달라도 실제로는 github.com 에 연결
User gitSSH 로그인할 유저명. GitHub 은 항상 git 유저를 사용 (계정 구분은 키로 함)
IdentityFile이 별칭으로 접속할 때 사용할 개인키 경로
AddKeysToAgent yes처음 사용 시 자동으로 SSH 에이전트에 키를 등록. 재부팅 후에도 ssh-add 를 수동으로 안 해도 됨

5. SSH 에이전트에 키 추가

ssh-add ~/.ssh/id_ed25519
ssh-add ~/.ssh/id_ed25519_company

SSH 에이전트(ssh-agent) 란 개인키를 메모리에 올려두고 필요할 때 꺼내주는 백그라운드 프로세스다. 키를 에이전트에 등록하면 매번 키 파일 경로를 지정하지 않아도 된다.

ssh-add 주요 옵션:

옵션의미
~/.ssh/id_ed25519등록할 개인키 파일 경로
-l현재 에이전트에 등록된 키 목록 확인 (list)
-d ~/.ssh/id_ed25519에이전트에서 특정 키 제거 (delete)
-D에이전트의 모든 키 제거

등록 확인:

ssh-add -l
# 256 SHA256:xxx personal@gmail.com (ED25519)
# 256 SHA256:yyy work@company.com (ED25519)

ssh-add 로 추가한 키는 재부팅하면 사라진다. AddKeysToAgent yes 를 config 에 넣으면 첫 사용 시 자동 재등록된다.


6. 회사 GitHub 에 공개키 등록

공개키를 클립보드에 복사한다.

cat ~/.ssh/id_ed25519_company.pub | pbcopy

GitHub → SettingsSSH and GPG keysNew SSH key 에서 붙여넣기 후 저장.


7. 연결 테스트

ssh -T git@github-personal
# Hi emptyfridge0900! You've successfully authenticated...

ssh -T git@github-company
# Hi bds0900! You've successfully authenticated...

github-personal / github-company~/.ssh/config 에서 만든 별칭이다. 실제로는 둘 다 github.com 에 접속하지만, 서로 다른 키를 쓴다.


8. Remote URL 변경

기존 repo (HTTPS → SSH)

git remote set-url origin git@github-personal:emptyfridge0900/repo-name.git

git remote -v 로 확인:

origin  git@github-personal:emptyfridge0900/repo-name.git (fetch)
origin  git@github-personal:emptyfridge0900/repo-name.git (push)

회사 repo

git remote set-url origin git@github-company:bds0900/repo-name.git

새 repo 클론 시

# 개인 계정 repo
git clone git@github-personal:emptyfridge0900/repo-name.git

# 회사 계정 repo
git clone git@github-company:bds0900/repo-name.git

URL 구조: git@<Host별칭>:<GitHub유저명>/<저장소이름>.git


9. 재부팅 후에도 유지되게 만들기

ssh-add 로 에이전트에 등록한 키는 재부팅하면 사라진다. 터미널 세션이 닫히면 메모리에서 내려가기 때문이다.

~/.ssh/configAddKeysToAgent yes 를 넣으면 해결된다.

Host github-personal
  ...
  AddKeysToAgent yes   # ← 이 줄

Host github-company
  ...
  AddKeysToAgent yes   # ← 이 줄

AddKeysToAgent yes 가 하는 일:

  • 재부팅 후 처음으로 git pushgit pull 을 실행하면 SSH가 ~/.ssh/config 를 읽는다.
  • 해당 Host 에 AddKeysToAgent yes 가 있으면, SSH가 자동으로 ssh-add 를 대신 실행해서 에이전트에 키를 올린다.
  • 그 이후부터는 같은 세션에서 다시 물어보지 않는다.

즉, 재부팅 후 수동으로 ssh-add 를 칠 필요가 없다. 첫 git 명령 한 번이면 자동으로 로드된다.

macOS 에서 ~/.ssh/config 파일 자체는 영구적이다. 재부팅해도 설정은 그대로 남는다. 휘발되는 건 에이전트 메모리(ssh-add 결과) 뿐이고, AddKeysToAgent yes 가 그걸 자동으로 채워준다.


최종 구성 요약

계정Host 별칭키 파일
emptyfridge0900 (개인)git@github-personal~/.ssh/id_ed25519
bds0900 (회사)git@github-company~/.ssh/id_ed25519_company

이제 git push / git pull 할 때 GitHub 계정을 의식하지 않아도 된다. repo 의 remote URL 에 붙인 Host 별칭이 알아서 맞는 키를 골라 쓴다.