GitHub 회사 계정과 개인 계정 분리하기 SSH Config 완벽 가이드

한 대의 PC에서 회사 GitHub 계정과 개인 계정을 동시에 사용하다 보면, 회사 레포지토리에 개인 계정 커밋 로그가 남거나 SSH 인증이 꼬이는 문제가 발생합니다. 이는 Git의 global 설정과 SSH 키가 단일 계정으로 고정되어 있기 때문입니다. 이 글에서는 SSH Config와 Git Config를 활용해 계정별로 완전히 분리된 환경을 구성하는 방법을 단계별로 제시합니다.


Git SSH Config로 다중 GitHub 계정 관리하기 includeIf 활용법




1. 계정별 SSH 키 생성 및 등록

GitHub 다중 계정 환경의 핵심은 계정마다 별도의 SSH 키 페어를 생성하는 것입니다. 기본 경로(id_rsa)를 공유하면 인증 충돌이 발생하므로, 파일명을 명시적으로 지정해야 합니다.

  • 키 생성: ssh-keygen -t rsa -b 4096 -C "work@company.com" -f ~/.ssh/id_rsa_work
  • 개인 계정도 동일하게 생성: ssh-keygen -t rsa -b 4096 -C "personal@gmail.com" -f ~/.ssh/id_rsa_personal
  • Passphrase는 보안을 위해 설정을 권장하지만, ssh-agent를 활용하면 매번 입력하지 않아도 됩니다.

생성된 공개키를 각 GitHub 계정에 등록합니다:

  1. 공개키 복사: pbcopy < ~/.ssh/id_rsa_work.pub (macOS) 또는 cat ~/.ssh/id_rsa_work.pub (Linux)
  2. GitHub 로그인 → Settings → SSH and GPG keys → New SSH key
  3. 복사한 공개키를 붙여넣고 저장
  4. 개인 계정도 동일하게 진행 (id_rsa_personal.pub)

ssh-agent에 키 추가:

  • eval "$(ssh-agent -s)" (에이전트 실행)
  • ssh-add ~/.ssh/id_rsa_work
  • ssh-add ~/.ssh/id_rsa_personal
  • 확인: ssh-add -l

2. SSH Config 파일 설정

~/.ssh/config 파일을 생성하여 Host alias별로 다른 SSH 키를 자동 매핑하도록 구성합니다. 이 설정이 핵심입니다.

# 회사 계정
Host github.com-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_work

# 개인 계정
Host github.com-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_personal

이제 Git 원격 URL에서 Host alias를 사용하면 자동으로 해당 SSH 키가 적용됩니다:

  • 회사 레포: git remote add origin git@github.com-work:company/repo.git
  • 개인 레포: git remote add origin git@github.com-personal:username/repo.git
  • 기존 URL 변경: git remote set-url origin git@github.com-work:company/repo.git

주의사항: github.com이 아닌 github.com-work, github.com-personal처럼 Host alias를 반드시 사용해야 ~/.ssh/config의 매핑이 동작합니다.

3. Git Config 계정별 분리

SSH 키로 인증 문제는 해결했지만, 커밋 로그에 남는 author 정보는 별도로 설정해야 합니다. Git Config는 local > global > system 순으로 우선순위가 적용되므로, 레포지토리별로 local 설정을 추가하면 됩니다.

방법 1: 레포지토리별 수동 설정

각 레포지토리에서 아래 명령을 실행합니다:

  • 회사 레포: git config user.email "work@company.com"
  • 개인 레포: git config user.email "personal@gmail.com"
  • 이름도 필요시: git config user.name "CompanyName"

설정 확인: git config --get user.email / git config --list --show-origin

방법 2: includeIf를 활용한 자동 분리 (권장)

디렉토리 구조를 ~/work/, ~/personal/로 분리하고, ~/.gitconfig에 조건부 설정을 추가합니다:

# ~/.gitconfig
[user]
  name = PersonalName
  email = personal@gmail.com

[includeIf "gitdir:~/work/"]
  path = ~/.gitconfig-work
# ~/.gitconfig-work
[user]
  name = CompanyName
  email = work@company.com

이제 ~/work/ 하위 디렉토리의 모든 레포지토리는 자동으로 회사 계정 정보를 사용하고, 그 외는 개인 계정으로 동작합니다. 수동 설정 누락 리스크를 제거할 수 있어 실무에서 추천하는 방식입니다.

4. 검증 및 Troubleshooting

설정 후 반드시 아래 단계로 검증하십시오:

  1. SSH 연결 테스트: ssh -T git@github.com-work → "Hi CompanyName!" 메시지 확인
  2. Git Config 확인: 각 레포에서 git config --get user.email 실행
  3. 테스트 커밋: 더미 커밋 후 git log로 author 정보 확인
  4. 원격 URL 확인: git remote -v로 Host alias가 제대로 적용되었는지 체크

자주 발생하는 문제:

  • Permission denied (publickey): ssh-add로 키가 등록되었는지, GitHub에 공개키가 올바르게 등록되었는지 확인
  • 여전히 global 계정으로 커밋됨: git config --list --show-origin으로 어느 설정 파일이 적용되는지 확인. local 설정이 없으면 global이 우선됩니다.
  • VSCode Git extension 오류: 터미널에서 최초 1회 git push 수동 실행 후 extension이 정상 동작하는 경우가 많습니다.

정리 및 Action Item

GitHub 다중 계정 환경은 (1) 계정별 SSH 키 생성 → (2) ~/.ssh/config에 Host alias 매핑 → (3) Git remote URL에 alias 사용 → (4) 레포별 user.email 로컬 설정 또는 includeIf 자동화 순서로 구성됩니다. 특히 includeIf 방식은 디렉토리 구조만 지키면 설정 누락이 없어 실수를 원천 차단할 수 있습니다.

지금 당장 실행할 것: 현재 사용 중인 모든 레포지토리에서 git config --get user.email을 실행해 의도한 계정 정보가 적용되었는지 확인하십시오. 잘못된 계정으로 이미 푸시된 커밋은 히스토리 수정(rebase)이 필요하므로, 사전 검증이 필수입니다.


#함께 읽으면 좋은 글

Git 작업 중 브랜치 이동해야 할 때 git stash 임시 저장 활용법 : 바로보기

댓글