SSH 키를 이용한 Github 계정 분리
하나의 개발 환경에서 개인 GitHub 계정과 회사 GitHub 계정을 동시에 사용해야 하는 경우가 많다. 하지만 Git은 기본적으로 같은 호스트명(github.com) 에 대해 하나의 인증 정보만 사용할 수 있기 때문 계정을 섞어 쓰면 인증 충돌이 발생한다.
이 글에서 Git · SSH의 원리 기반으로 계정 충돌이 왜 일어나는지 그리고 SSH config를 사용해 이를 어떻게 해결하는지 간단하게 기록해보자
1. Git은 인증을 직접 하지 않는다
Git은 원격 저장소와 통신할 때 인증을 스스로 처리하지 않는다. 대신 다음 두 가지 방식을 통해 원격 서버(GitHub) 가 인증을 결정한다.
인증 방식 1) HTTPS + Personal Access Token
- git push/pull 시 GitHub가 사용자명/토큰을 요구한다.
- Git은 사용자가 입력한 자격증명을 credential helper에 저장할 수 있다.
- 문제는 이 방식은 하나의 호스트(github.com)당 하나의 credential만 저장한다는 점이다.
즉, 개인 계정으로 로그인된 상태에서 회사 레포를 clone하면 충돌이 발생한다.
인증 방식 2) SSH + Key Pair 인증
SSH는 두 개의 키로 동작한다.
- 비공개키 (private key) : 로컬 컴퓨터에 저장, 절대 외부 공유 금지
- 공개키 (public key) : GitHub 계정에 등록
GitHub는 다음 조건으로 인증을 결정한다.
로컬에서 제시한 비공개키가 GitHub 계정에 등록된 공개키와 한 쌍인지 확인
SSH 방식은 비밀번호 입력이 필요 없고, 여러 키를 생성해 여러 계정에 연결할 수 있다는 장점이 있다.
2. 계정 충돌이 발생하는 이유
SSH 자체는 여러 키를 문제없이 사용할 수 있지만 충돌이 일어나는 이유는 호스트명(github.com) 때문이다.
기본적인 Git 과 SSH 동작은 다음 순서로 이루어진다.
1) Git은 원격 주소의 호스트명을 SSH에게 전달
git@github.com:org/repo.gitGit은 SSH에게 "github.com에 접속해줘"라고 요청한다.
2) SSH는 해당 호스트(github.com)에 어떤 키를 써야 하는지 결정
SSH는 기본적으로 다음 우선순위를 따른다.
- SSH config 파일 (
~/.ssh/config) - 기본키 (
~/.ssh/id_rsa,id_ed25519등)
문제는 대부분의 사용자 환경에서는 개인용 키가 기본키(id_ed25519)로 존재한다는 점이다.
그렇기 때문에 회사 레포라도 Git은 다음과 같이 생각한다.
"github.com? 음… 여기엔 기본 키(id_ed25519)를 쓰면 되겠지."
하지만 이 기본키는 개인 계정용 → 회사 계정 인증 실패.
결국 문제는 github.com이라는 동일 호스트를 개인/회사 계정 모두 사용하기 때문이다.
3. 가짜 호스트(alias) 사용
SSH config는 특정 호스트에 대해 어떤 키를 사용할지 재정의할 수 있다. 이를 이용해 다음 구조를 만든다.
github.com→ 개인 계정용 키 사용github-work→ 회사 계정용 키 사용 (가짜 호스트명)
즉, 실제 GitHub 서버는 동일하지만 SSH에게는 다른 호스트로 보이게 만드는 것이다.
4. SSH 키 생성 및 설정 과정
계정 분리를 위해 필요한 핵심 단계만 기술적으로 재정리한다.
1. 개인용 SSH 키 생성
// 개인용 SSH키 생성
ssh-keygen -t ed25519 -C "개인계정 이메일"
// 개인용 SSH키 확인
cat ~/.ssh/id_ed25519.pub이렇게 생성된 public key를 GitHub 개인 계정에 등록한다.
2. 회사용 SSH 키 생성
// 회사용 SSH키 생성
ssh-keygen -t ed25519 -C "회사 이메일" -f ~/.ssh/id_work
// 회사용 SSH키 확인
cat ~/.ssh/id_work.pub생성된 id_work.pub를 회사 GitHub 계정에 등록한다.

3. SSH config에 계정 분리 규칙 정의
# 개인 계정
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
# 회사 계정
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_work
IdentitiesOnly yes여기서 github-work는 실제 존재하지 않는 가짜 호스트명이며 SSH가 이 이름을 기반으로 특정 키를 사용하도록 유도한다.
IdentitiesOnly yes 옵션은 SSH가 다른 키를 자동으로 시도하는 것을 방지하여, 지정된 키만 사용하도록 강제한다. 이를 통해 의도하지 않은 키가 사용되는 문제를 예방할 수 있다.
5. 계정 분리 후 사용 방식
설정 완료 후 Git은 다음 원리로 작동한다.
github.com사용 → 개인용 SSH 키 적용 → 개인 계정 권한으로 접근github-work사용 → 회사용 SSH 키 적용 → 회사 계정 권한으로 접근
개인 레포 clone
git clone git@github.com:username/repo.git회사 레포 clone
git clone git@github-work:companyOrg/repo.git원격 주소에서 github.com만 github-work로 바꾸면 끝이다.
clone 이후 push, pull, fetch 등 모든 Git 작업은 자동으로 올바른 계정으로 처리된다. Git은 저장소의 remote URL을 그대로 사용하므로 별도의 계정 전환 작업이 필요 없다.
6. 정리
- SSH 키는 계정 수만큼 생성 가능
- SSH config는 호스트명 기반으로 키 선택 가능
- Git은 인증을 직접 처리하지 않고 SSH에게 모든 걸 위임
- 회사/개인 계정 충돌은 같은 호스트명 사용 때문에 발생
- 가짜 호스트명(alias)을 만들어 계정을 완전히 분리하면 충돌이 사라진다
이 방식은 Git의 동작 원리와 SSH 인증 구조에 기반한 해결 방법 중 하나이며 한 번 설정하면 계정 충돌 없이 안정적으로 유지되기 때문에 편하게 사용하고있다.