GENERAL · General

로컬에서 여러 GitHub 계정 관리하기

· 3min read

여러 GitHub 계정 관리: SSH 키 충돌 해결하기

문제 상황

2개의 GitHub 계정을 각각 다른 Workspace에서 사용하다 보면, git push 시 권한 관련 에러가 발생하곤 합니다. 대표적인 에러 메시지는 다음과 같습니다:

ERROR: Permission to user2/repo.git denied to user1.
fatal: Could not read from remote repository.

이는 Git의 global 설정과 local 설정이 충돌하여 발생하는 문제입니다. Git이 잘못된 SSH 키를 사용하거나, 잘못된 사용자 정보로 인증을 시도하기 때문입니다.

원인 분석

Git은 기본적으로 다음 우선순위로 설정을 읽어옵니다:

  1. local (특정 저장소)
  2. global (사용자 전체)
  3. system (시스템 전체)

여러 계정을 사용할 경우, global 설정이 특정 프로젝트에 맞지 않아 인증 실패가 발생합니다.

해결 방법

1. 현재 설정 확인

먼저 문제가 되는 저장소의 설정을 확인합니다:

# 현재 저장소의 설정 확인
git config --local --list

# global 설정 확인
git config --global --list

# 원격 저장소 확인
git remote -v

2. 로컬 저장소에 맞는 SSH 키 지정

해당 저장소에서만 사용할 SSH 키를 명시적으로 지정합니다:

git config --local core.sshCommand "ssh -i ~/.ssh/<내_ssh_키>"

예시:

git config --local core.sshCommand "ssh -i ~/.ssh/id_rsa_work"

3. 원격 저장소 재설정

기존에 잘못 설정된 원격 저장소를 제거하고 올바르게 다시 추가합니다:

# 기존 origin 제거
git remote remove origin

# 올바른 저장소로 재등록
git remote add origin git@github.com:<계정>/<저장소>.git

예시:

git remote remove origin
git remote add origin git@github.com:joshuawork/my-project.git

4. 사용자 정보 로컬 설정 (선택사항)

커밋 author 정보도 프로젝트별로 다르게 설정하고 싶다면:

git config --local user.name "Your Name"
git config --local user.email "your.email@example.com"

5. 설정 검증

# SSH 연결 테스트
ssh -T git@github.com

# 설정 확인
git config --local --list

# push 테스트
git push -u origin main

더 나은 해결책: SSH Config 활용

매번 프로젝트마다 설정하기 번거롭다면, ~/.ssh/config 파일을 활용하는 방법도 있습니다:

# ~/.ssh/config

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

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

이후 원격 저장소를 추가할 때 Host 별칭을 사용:

# 개인 프로젝트
git remote add origin git@personal:personal-account/repo.git

# 회사 프로젝트
git remote add origin git@work:work-account/repo.git

정리

다중 GitHub 계정을 사용할 때는:

  1. 각 프로젝트에 맞는 SSH 키를 local 설정으로 지정
  2. 올바른 원격 저장소 URL 사용
  3. 필요시 사용자 정보도 프로젝트별로 설정
  4. SSH config를 활용하면 더욱 편리한 관리 가능

이렇게 설정하면 프로젝트 간 권한 충돌 없이 안정적으로 작업할 수 있습니다!


참고 자료: