뒤로가기

SSH를 활용한 Git 다중 계정 관리 가이드

git

Git을 사용하다 보면 여러 계정으로 작업해야 할 때가 있습니다. 예를 들어, 개인 프로젝트는 개인 GitHub 계정으로 관리하고, 회사 프로젝트는 회사 계정으로 관리해야 하는 상황이 있을 수 있습니다. SSH를 사용하면 별도의 라이브러리 설치 없이 로컬 환경에서 여러 계정을 손쉽게 관리할 수 있습니다.

1. SSH 키 생성

먼저, 각각의 계정에 대해 별도의 SSH 키를 생성해야 합니다. SSH 키는 암호화된 형태로 자격 증명을 대체하며, 안전하게 Git 서버와의 통신을 가능하게 합니다.

# 첫 번째 계정용 SSH 키 생성
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/github_user1_ed25519
 
# 두 번째 계정용 SSH 키 생성
ssh-keygen -t ed25519 -C "your_other_email@example.com" -f ~/.ssh/github_user2_ed25519

위 명령어를 실행하면 ~/.ssh/ 디렉토리에 각각 github_user1_ed25519github_user2_ed25519라는 이름의 SSH 키 쌍(공개 키와 개인 키)이 생성됩니다.

ED25519 vs RSA

ed25519는 최신 암호화 알고리즘으로, 기존의 RSA 방식보다 다음과 같은 장점을 제공합니다:

  • 보안성: 같은 키 길이에서 더 강력한 보안을 제공합니다.
  • 성능: 키 생성과 서명 검증이 더 빠릅니다.
  • 간결성: 더 짧은 키 길이로 동일한 보안 수준을 달성합니다.

2. 공개 키 등록

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

# 공개 키 내용 확인
cat ~/.ssh/github_user1_ed25519.pub
cat ~/.ssh/github_user2_ed25519.pub

각 계정의 GitHub Settings > SSH and GPG keys에서 New SSH key를 클릭하여 공개 키를 등록합니다.

3. SSH 설정 파일 구성

SSH 설정 파일(~/.ssh/config)을 통해 각 SSH 키가 어떤 GitHub 계정과 연결될지를 설정합니다. 이 설정 파일을 사용하면 특정 호스트명에 대해 지정된 SSH 키를 사용하도록 지정할 수 있습니다.

# 첫 번째 계정 설정
Host github-user1
  HostName github.com
  User git
  IdentityFile ~/.ssh/github_user1_ed25519
 
# 두 번째 계정 설정
Host github-user2
  HostName github.com
  User git
  IdentityFile ~/.ssh/github_user2_ed25519

위와 같이 설정하면 github-user1github-user2라는 호스트명이 각각의 SSH 키와 연결됩니다.

설정 파일 구조 설명

  • Host: 사용할 별칭입니다. 이 이름을 사용하여 각 계정을 구분합니다.
  • HostName: 실제 Git 서버 주소입니다.
  • User: SSH 접속 사용자명으로, GitHub의 경우 항상 git입니다.
  • IdentityFile: 사용할 SSH 개인 키 파일의 경로입니다.

4. Git 리포지토리 클론 및 사용

이제 각각의 SSH 설정을 이용해 Git 리포지토리를 클론하거나, 푸시/풀 작업을 수행할 수 있습니다.

리포지토리 클론

# user1 계정으로 클론
git clone git@github-user1:user1/repository.git
 
# user2 계정으로 클론
git clone git@github-user2:user2/repository.git

기존 리포지토리의 remote URL 변경

이미 클론한 리포지토리의 계정을 변경하려면 remote URL을 수정합니다:

# 현재 remote URL 확인
git remote -v
 
# remote URL 변경
git remote set-url origin git@github-user1:user1/repository.git

Git 사용자 정보 설정

각 리포지토리에서 올바른 사용자 정보를 사용하도록 설정합니다:

# 리포지토리별 사용자 정보 설정
cd /path/to/user1/repository
git config user.name "User 1"
git config user.email "user1@example.com"
 
cd /path/to/user2/repository
git config user.name "User 2"
git config user.email "user2@example.com"

5. SSH 키 파일 권한 설정

SSH 키 파일의 권한을 적절히 설정해야 합니다. Git은 개인 키 파일의 권한이 올바르게 설정되지 않은 경우 보안을 위해 경고 메시지를 출력하며, 연결을 거부할 수 있습니다.

# 개인 키 파일 권한을 600으로 설정 (소유자만 읽기/쓰기 가능)
chmod 600 ~/.ssh/github_user1_ed25519
chmod 600 ~/.ssh/github_user2_ed25519
 
# 공개 키 파일 권한을 644로 설정 (권장)
chmod 644 ~/.ssh/github_user1_ed25519.pub
chmod 644 ~/.ssh/github_user2_ed25519.pub

6. SSH 연결 테스트

설정이 올바르게 되었는지 테스트합니다:

# user1 계정 테스트
ssh -T git@github-user1
 
# user2 계정 테스트
ssh -T git@github-user2

성공하면 다음과 같은 메시지가 표시됩니다:

Hi username! You've successfully authenticated, but GitHub does not provide shell access.

고급 설정: 디렉토리별 자동 계정 전환

특정 디렉토리에서 자동으로 특정 Git 계정을 사용하도록 설정할 수 있습니다.

Conditional Includes 사용

~/.gitconfig에 다음과 같이 설정합니다:

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

각각의 설정 파일을 생성합니다:

~/.gitconfig-personal:

[user]
  name = Personal Name
  email = personal@example.com

~/.gitconfig-work:

[user]
  name = Work Name
  email = work@company.com

이제 ~/personal/ 디렉토리에서는 자동으로 개인 계정이, ~/work/ 디렉토리에서는 회사 계정이 사용됩니다.

문제 해결

Permission denied (publickey) 오류

# SSH 에이전트에 키 추가
ssh-add ~/.ssh/github_user1_ed25519
ssh-add ~/.ssh/github_user2_ed25519
 
# 등록된 키 확인
ssh-add -l

잘못된 계정으로 커밋한 경우

마지막 커밋의 작성자 정보를 수정합니다:

git commit --amend --author="Correct Name <correct@email.com>"

결론

SSH를 활용하면 별도의 도구 없이 여러 Git 계정을 효율적으로 관리할 수 있습니다. SSH 설정 파일을 통해 각 계정에 대한 별칭을 지정하고, 적절한 키를 사용하도록 구성함으로써 안전하고 편리한 다중 계정 관리가 가능합니다.

디렉토리별 자동 계정 전환 설정을 추가하면 개인 프로젝트와 업무 프로젝트를 더욱 명확히 분리하여 관리할 수 있습니다.