GitHub 다중 계정 관리 완벽 가이드 SSH Config로 회사와 개인 계정 분리하기

회사 계정과 개인 GitHub 계정을 한 PC에서 동시에 사용하려다 매번 인증 충돌로 시간을 낭비하고 있다면, SSH Config 설정으로 이 문제를 근본적으로 해결할 수 있습니다. 이 글에서는 계정별 SSH 키 생성부터 ~/.ssh/config 분리 설정, 레포별 커밋 계정 관리까지 실무에서 바로 적용 가능한 전체 프로세스를 다룹니다. 5분 투자로 향후 수십 시간의 삽질을 방지하십시오.


GitHub 다중 계정 관리 완벽 가이드 SSH Config로 회사와 개인 계정 분리하기



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

첫 단계는 각 GitHub 계정마다 고유한 SSH 키 쌍을 생성하는 것입니다. 기본 파일명(id_rsa)을 그대로 쓰면 덮어쓰기 위험이 있으므로, -f 옵션으로 파일명을 명시적으로 지정해야 합니다.

  • 키 생성 명령어:
cd ~/.ssh
ssh-keygen -t rsa -C "work@company.com" -f id_rsa_company
ssh-keygen -t rsa -C "personal@gmail.com" -f id_rsa_personal
  • Passphrase 입력 프롬프트가 나오면 Enter로 건너뛸 수 있습니다(자동 로그인). 보안이 중요한 환경이라면 패스프레이즈를 설정하고 ssh-agent를 활용하십시오.
  • 생성 후 ls ~/.ssh로 id_rsa_company, id_rsa_company.pub, id_rsa_personal, id_rsa_personal.pub 파일 존재를 확인하십시오.

공개키를 GitHub에 등록:

  1. 공개키 내용 복사: cat ~/.ssh/id_rsa_company.pub (macOS는 pbcopy < ~/.ssh/id_rsa_company.pub 사용 권장)
  2. 해당 GitHub 계정 로그인 → Settings → SSH and GPG keys → New SSH key
  3. Title에 "Company Laptop" 등 구분 가능한 이름 입력, Key 필드에 공개키 전체 붙여넣기 → Add SSH key
  4. 개인 계정도 동일한 방식으로 id_rsa_personal.pub 등록

주의사항: 공개키(.pub)만 GitHub에 올리고, 개인키(id_rsa_*)는 절대 외부에 노출하지 마십시오. 개인키 파일 권한은 chmod 600 ~/.ssh/id_rsa_*로 설정해 소유자만 읽을 수 있도록 해야 합니다.

2. ~/.ssh/config로 Host 별칭 설정

SSH Config 파일에서 각 계정을 Host 별칭으로 구분하면, Git 명령어 실행 시 자동으로 올바른 키를 선택할 수 있습니다. 이 설정이 다중 계정 관리의 핵심입니다.

vi ~/.ssh/config

아래 내용을 추가하십시오:

# Company Account
Host github.com-company
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_company

# Personal Account
Host github.com-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_personal
  • Host: Git 명령어에서 사용할 별칭입니다. 직관적인 이름(github.com-company, github.com-personal)을 사용하십시오.
  • HostName: 실제 접속할 서버 주소(github.com).
  • User: GitHub SSH 접속은 항상 git 사용자입니다.
  • IdentityFile: 해당 Host에서 사용할 개인키 경로를 절대 경로로 지정합니다.

파일 저장 후 chmod 600 ~/.ssh/config로 권한을 설정하십시오. 이제 ssh-agent에 키를 등록하고 연결을 테스트합니다:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa_company
ssh-add ~/.ssh/id_rsa_personal
ssh-add -l  # 등록된 키 목록 확인

연결 테스트:

ssh -T git@github.com-company
ssh -T git@github.com-personal

각 명령어 실행 시 "Hi [username]! You've successfully authenticated..." 메시지가 나오면 정상입니다. 만약 Permission denied가 발생하면 IdentityFile 경로와 GitHub 공개키 등록 상태를 재확인하십시오.

3. 레포지토리 클론 및 원격 URL 설정

이제 실제 프로젝트를 클론할 때 Host 별칭을 사용해야 합니다. github.com 대신 설정한 Host 별칭을 URL에 넣는 것이 핵심입니다.

  • 회사 레포 클론:
git clone git@github.com-company:company-org/project.git
  • 개인 레포 클론:
git clone git@github.com-personal:myusername/my-repo.git

기존 레포의 원격 URL을 변경해야 한다면:

cd existing-repo
git remote set-url origin git@github.com-company:company-org/project.git
git remote -v  # 변경 확인

실무 팁: 회사 프로젝트 디렉토리와 개인 프로젝트 디렉토리를 ~/work, ~/personal처럼 물리적으로 분리해두면 관리가 훨씬 편합니다. 클론 시 Host 별칭을 잘못 입력하면 인증 실패가 발생하므로, 최초 클론 직후 반드시 git remote -v로 URL을 검증하십시오.

4. 레포별 커밋 계정(user.email) 설정

SSH 키만 분리해도 push/pull은 가능하지만, 커밋 기록에 올바른 이메일을 남기려면 레포별로 user.email을 설정해야 합니다. 전역(--global) 설정은 기본값일 뿐, 회사 레포에서 개인 이메일로 커밋이 남으면 이력 관리에 혼란이 생깁니다.

각 레포지토리 루트에서 다음 명령어를 실행하십시오:

# 회사 레포
cd ~/work/company-project
git config user.name "YourName"
git config user.email "work@company.com"

# 개인 레포
cd ~/personal/my-repo
git config user.name "YourName"
git config user.email "personal@gmail.com"

설정 확인:

git config --list --local
# 또는
git config --show-origin user.email

고급 설정: 프로젝트가 많다면 ~/.gitconfig에 조건부 include를 사용해 디렉토리별로 자동 전환할 수 있습니다:

# ~/.gitconfig
[includeIf "gitdir:~/work/"]
  path = ~/.gitconfig-work

[includeIf "gitdir:~/personal/"]
  path = ~/.gitconfig-personal

그리고 각 파일에 user 정보를 분리 기록:

# ~/.gitconfig-work
[user]
  name = YourName
  email = work@company.com

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

이 방식은 신규 레포 생성 시에도 디렉토리 위치만으로 자동 적용되므로, 휴먼 에러를 원천 차단할 수 있습니다.

5. 트러블슈팅 체크리스트

설정 후에도 인증 실패가 발생한다면 아래 항목을 순서대로 점검하십시오:

  • SSH 연결 테스트: ssh -T git@github.com-company 실행 시 성공 메시지가 나오는가?
  • 원격 URL 확인: git remote -v로 origin URL이 Host 별칭을 사용하는가? (예: git@github.com-company:org/repo.git)
  • ssh-agent 키 등록: ssh-add -l로 필요한 키가 모두 등록되어 있는가?
  • 파일 권한: ls -la ~/.ssh로 개인키 파일이 600, config 파일이 600인가?
  • 공개키 등록: GitHub 계정의 SSH keys 페이지에서 해당 공개키가 등록되어 있고, 최근 사용 기록(Last used)이 표시되는가?

자주 발생하는 실수:

  1. 클론 시 Host 별칭 대신 github.com을 그대로 사용 → 기본 키로 인증 시도하여 실패
  2. config 파일에서 IdentityFile 경로 오타 → "Permission denied (publickey)" 에러
  3. 레포별 user.email 미설정 → 커밋은 성공하나 잘못된 계정으로 기록됨

문제 발생 시 ssh -vT git@github.com-company로 상세 로그를 확인하면 어느 단계에서 실패했는지 파악할 수 있습니다.

요약 및 Action Item

다중 GitHub 계정 관리는 (1) 계정별 SSH 키 생성 및 등록, (2) ~/.ssh/config에 Host 별칭 설정, (3) 클론/원격 URL에 Host 별칭 사용, (4) 레포별 user.email 설정의 4단계로 완성됩니다. 이 구조를 한 번 구축해두면 계정 전환 없이 프로젝트별로 자동 인증되므로, 생산성이 크게 향상됩니다.

당장 실행할 Action Item: 현재 사용 중인 모든 레포지토리의 루트에서 git config user.email을 실행해 설정 상태를 점검하고, 누락된 레포는 즉시 올바른 이메일로 설정하십시오. 이미 잘못된 이메일로 커밋한 이력이 있다면, git rebasegit filter-branch로 이력을 수정할 수 있으나 협업 레포에서는 신중히 진행해야 합니다.


#함께 읽으면 좋은 글

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

댓글