ssh keygen

broccoli·2022년 8월 3일
0

git

목록 보기
2/3

✅ keygen등록

여러 개의 GitHub 계정을 사용하는 경우 각 계정에 대해 별도의 SSH 키를 생성해야 합니다. 아래는 간단한 단계로 두 개의 GitHub 계정을 위한 SSH 키를 생성하는 방법입니다.

1. SSH 키 생성:

  • 각 GitHub 계정에 대해 SSH 키를 생성합니다. 아래 명령어에서 "your_email@example.com" 부분을 각 계정에 해당하는 이메일 주소로 바꿔주어야 합니다.
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • 키 생성 중에 두 번 물어보면서 "Enter a file in which to save the key"라는 메시지가 나타납니다. 여기서 기본값인 /Users/you/.ssh/id_rsa를 변경하여 각 계정에 맞게 지정할 수 있습니다. 예를 들어, 두 번째 계정의 키는 /Users/you/.ssh/id_rsa_second와 같이 지정할 수 있습니다.

2. SSH 에이전트에 키 추가:

  • SSH 키를 생성한 후에는 키를 SSH 에이전트에 추가해야 합니다.
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_second
ssh-add -l //로 확인

3. SSH 키를 GitHub에 추가:

  • 각 계정에 해당하는 곳으로 이동하여 공개 키를 GitHub 계정에 추가합니다.
    • cat ~/.ssh/id_rsa.pub 명령어를 사용하여 공개 키의 내용을 확인합니다.
    • GitHub 웹사이트에 로그인하고 Settings > SSH and GPG keys > New SSH key에서 새로운 키를 추가합니다.

ssh -T git@github.com 명령을 실행할 때, GitHub는 현재 시스템에서 사용 중인 SSH 키를 통해 사용자를 식별합니다. 이때 어떤 계정으로 인식되는지에 대한 기준은 사용 중인 SSH 키입니다.

만약 여러 개의 계정에 대한 SSH 키를 생성하고 GitHub에 등록했다면, GitHub은 해당 SSH 키에 연결된 계정으로 식별합니다. 따라서 키 관리가 중요하며, 특정 명령을 실행할 때 사용되는 키에 따라 해당 계정으로 인식됩니다.

GitHub에 등록된 SSH 키를 관리하고 싶다면, ~/.ssh/config 파일을 사용하여 호스트와 키를 매핑하는 방법을 고려할 수 있습니다. 이를 통해 특정 호스트에 대한 키를 선택적으로 설정할 수 있습니다.

4. 호스트키 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를 관리를 세팅해주면 알아서 잘 구분이 된다.

✅ key chain 영구 등록

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 까먹지 말기

profile
🌃브로콜리한 개발자🌟

0개의 댓글

관련 채용 정보