여러 개의 GitHub 계정을 사용하는 경우 각 계정에 대해 별도의 SSH 키를 생성해야 합니다. 아래는 간단한 단계로 두 개의 GitHub 계정을 위한 SSH 키를 생성하는 방법입니다.
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
/Users/you/.ssh/id_rsa
를 변경하여 각 계정에 맞게 지정할 수 있습니다. 예를 들어, 두 번째 계정의 키는 /Users/you/.ssh/id_rsa_second
와 같이 지정할 수 있습니다.eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_second
ssh-add -l //로 확인
cat ~/.ssh/id_rsa.pub
명령어를 사용하여 공개 키의 내용을 확인합니다.
ssh -T git@github.com
명령을 실행할 때, GitHub는 현재 시스템에서 사용 중인 SSH 키를 통해 사용자를 식별합니다. 이때 어떤 계정으로 인식되는지에 대한 기준은 사용 중인 SSH 키입니다.
만약 여러 개의 계정에 대한 SSH 키를 생성하고 GitHub에 등록했다면, GitHub은 해당 SSH 키에 연결된 계정으로 식별합니다. 따라서 키 관리가 중요하며, 특정 명령을 실행할 때 사용되는 키에 따라 해당 계정으로 인식됩니다.
GitHub에 등록된 SSH 키를 관리하고 싶다면, ~/.ssh/config 파일을 사용하여 호스트와 키를 매핑하는 방법을 고려할 수 있습니다. 이를 통해 특정 호스트에 대한 키를 선택적으로 설정할 수 있습니다.
~/.ssh/config
파일을 열거나 없으면 만든다#~/.ssh/config 파일예제
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_personal
AddKeysToAgent yes
ForwardAgent yes
UseKeychain yes
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_work
AddKeysToAgent yes
ForwardAgent yes
UseKeychain yes
ssh -T git@github-personal
명령은 id_rsa_personal
키를 사용하고, ssh -T git@github-work
명령은 id_rsa_work
키를 사용합니다.이렇게 설정하면 특정 호스트에 대해 어떤 키를 사용할지 선택할 수 있습니다. 명령을 실행할 때 사용하고 싶은 키에 따라 호스트를 선택하면 됩니다.
잘되면
➜ .ssh ssh -T git@github-work
Hi 누구! You've successfully authenticated, but GitHub does not provide shell access.
➜ .ssh ssh -T git@github-personal
Hi 누구2! You've successfully authenticated, but GitHub does not provide shell access.
그리고 각 저장소프로젝트에서
git config user.name "Your Name"
git config user.email "your-email@example.com"
개별적으로 config를 관리를 세팅해주면 알아서 잘 구분이 된다.
m2 pro의 유저의 경우 리부트할때마다 키체인이 유지가 안되서 자꾸 재등록하는 경우가 있을 수 있다. 내가 그랬음..;;
예전에 -K 옵션이 있을때는 문제 없었던거 같은데 해당 옵션이 deprecated되면서 잘 안되는 일이 발생하는건지 원인은 잘 모르겠으나 해결책은 아래와 같다.
쉘에 등록 로직을 넣어주면 된다. 나는 .zshrc를 쓰니까 여기에 등록해줌
# 시도 1. SSH 에이전트 시작 및 공유 : 이건 동작안함
#if [ -z "$SSH_AUTH_SOCK" ] ; then
# eval "$(ssh-agent -s)"
# ssh-add ~/.ssh/id_rsa_ccoli --apple-use-keychain
# ssh-add ~/.ssh/id_rsa_broccoliindb --apple-use-keychain
# export SSH_AUTH_SOCK
#fi
# 시도 2. 아래이건 동작함: 단 매순간 에이전트를 실행하고 매순간 키등록을 새로함
#eval "$(ssh-agent -s)"
#ssh-add --apple-use-keychain ~/.ssh/id_rsa_broccoliindb
#ssh-add --apple-use-keychain ~/.ssh/id_rsa_ccoli
# 최종시도. 이건 조건로직 추가 키등록로직
if ! pgrep -u "$USER" ssh-agent > /dev/null; then
eval "$(ssh-agent -s)"
fi
ssh-add -l > /dev/null || {
ssh-add --apple-use-keychain ~/.ssh/id_rsa_ccoli
ssh-add --apple-use-keychain ~/.ssh/id_rsa_broccoliindb
}
처음에는 1번방안으로 시도했는데 제대로 동작안됨, 2번은 동작되지만 추가 조건을 넣어서 마지막 방법으로 결정함. 파일수정하고 source ~/.zshrc 까먹지 말기