회사에서 작업한 코드가 내 개인의 코드와 섞이는 것만큼 불편한 일도 없을 것이다, 내 개인 계정이 회사의 코드에 남게 되는 것도 매우 조심해야할 일이기도 하다.

확실히 구분하려면 그만큼 사용환경도 확실히 분리할 수 있어야하는데 이럴 때 git config와 ssh key를 이용하여 간단히 해결할 수 있다. 아이디어는 다음과 같다.
1. 두 개의 계정모두 git hub에 ssh key로 접근할 수 있도록 설정해둔다.
2. git config로 두 사용자를 저장소별로 설정한다.
3. 나도 모르는 예외 상황을 대비한 전략 준비

  • 만약을 대비해 global 설정은 노출되도 되는 제3의 아이디로 세팅
  • 어떤 예외 상황이던 회사의 아이디로 되도록 global 설정을 회사 아이디로 세팅.

1 github ssh key 셋업

이미 많이 사용하고 있는 설정일 것이라 간략히 기록한다.

1) ssh 키 생성

각 계정에 대해 서로 다른 SSH 키를 생성해야 한다. 키를 생성하려면 Terminal을 열고 아래의 명령어를 입력하자:

ssh-keygen -t rsa -b 4096 -C "coolworker@idealcompany.kr"

키를 저장할 위치를 물어보면 다음과 같이 입력:

/home/mysecretid/.ssh/id_rsa_idealcompany

마찬가지로 두 번째 계정에 대한 SSH 키를 생성한다:

ssh-keygen -t rsa -b 4096 -C "mysecretid@gmail.com"

키를 저장할 위치를 물어보면 다음과 같이 입력:

/home/mysecretid/.ssh/id_rsa_mysecretid

2) ssh 키 git hub에 등록

생성한 각 SSH 키를 해당 GitHub 계정에 추가해야 한다. 먼저 키를 복사하자:

cat ~/.ssh/id_rsa_idealcompany.pub | pbcopy

그리고 GitHub에서 해당 계정으로 로그인하여 Settings > SSH and GPG keys > New SSH key에 키를 붙여넣자. 두 번째 계정에 대해서도 같은 과정을 반복한다.

3) ssh config 파일 설정

이제 SSH 설정 파일(~/.ssh/config)을 만들거나 수정해야 한다. 해당 파일이 없다면 새로 만들어야 한다. 해당 파일에 다음 내용을 추가하자:

# idealcompany account
Host github.com-idealcompany
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_idealcompany

# mysecretid account
Host github.com-mysecretid
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_mysecretid

2 git config

각 로컬 저장소에서 사용할 Git 사용자 이름과 이메일을 설정해야 한다. 이렇게 하려면 VS Code에서 해당 저장소로 이동하고 아래의 명령을 실행하자:

git config user.name "Your Name"
git config user.email "coolworker@idealcompany.kr"

개인 계정을 사용하는 다른 로컬 저장소에서는 다음과 같이 설정하자:

 git config user.name "Your Name"
 git config user.email "mysecretid@gmail.com"

3 테스트

설정이 잘 됐는 지는 아래 명령어로 간단히 볼 수 있다.

 ssh -T git@github.com-idealcompany
 ssh -T git@github.com-mysecretid  

4 사용하기

이제 적절한 호스트 별명을 사용하여 저장소를 복제할 수 있다. 예를 들어, idealcompany 계정에서 저장소를 복제하려면 다음과 같이 실행하자:

git clone git@github.com-idealcompany:organization/repo.git

mysecretid 계정에서는 다음과 같이 실행하자:

git clone git@github.com-mysecretid:username/repo.git

이 과정을 통해 각 저장소가 해당 계정에 알맞게 설정되며, 각 계정은 각각의 SSH 키를 사용하게 된다. 이를 통해 푸시하거나 풀을 할 때, 해당 계정이 알맞게 선택되도록 할 수 있다.

5 global 설정

  • 만약을 대비해 global 설정은 노출되도 되는 제3의 아이디로 세팅
  git config --global user.name "Your Name"
  git config --global user.email "whoami@unknown.ai"
  • 어떤 예외 상황이던 회사의 아이디로 되도록 global 설정을 회사 아이디로 세팅.
git config --global user.name "Your Name"
git config --global user.email "coolworker@idealcompany.ai"



마무리

이렇게 해서 각 폴더별로 나의 리포지토리와 회사의 리파지토리를 분리하여 연결할 수 있어 한 결 수월하게 일을 진행할 수 있게 됐다. UI 툴이나 좀 더 쉽게 눈에 띄는 도구가 있으면 좋을 것 같은데 아마 이런 툴을 찾으면 또 업데이트 할 예정이다.

작업을 하다보면 private key와 public key를 복사해서 사용할 일이 있다. 이럴 때 각 파일의 권한 설정도 중요하다. 다음의 힌트를 참고해서 활용하자.

chmod 400 privatekey
chmod 644 publickey

pbcopy에 대한 설명은 https://velog.io/@damianos/command-line-text-to-clipboard 를 참고

profile
개발하면서 또는 프러덕 관리하면서 겪는 기억해둬야하는 내용을 메모장 삼아 남긴다. Google Keep이나 메모 도구에 남기는 것과는 달리 잘 정리할 수 있어서 언젠가 들춰봐야할 내용들을 담은 글들이 게시된다.

2개의 댓글

comment-user-thumbnail
2023년 7월 19일

정보가 풍부해서 많은 도움이 되었습니다.

1개의 답글