2023. 4. 23. 15:38ㆍGithub
하나의 환경에서 다수의 SSH Key pair를 사용하여 Github repository에
접근하는 방법을 설명한다.
개발하다 보면 회사와 개인 계정 등 다수의 Github 계정을 사용하는 경우가 있다. 그것도 한 컴퓨터에서.
이런 상황에서 SSH 방식으로 private repository에 접근하는 방식을 사용하게 되면 아래 이슈를 맞닥뜨리게 된다.
“엥 ??? 나 SSH 설정해놨는디 ??”
Settings -> SSH and GPG keys 메뉴로 가서 SSH keys를 확인하고, ~/.ssh 폴더로 가서 Key pair의 존재도 확인했는데 안 된다.
혹시나 해서 다시 한번 SSH 설정을 시도하려면 아래 포스팅을 참고해 주세요.
[Github] SSH 설정하기
https://juni-in.tistory.com/8
이때쯤 드는 생각은 시스템이 이상한 거 같다는 생각이지만 언제나 이상한 건 시스템이 아니라 나다.
현재 상황은 이렇다.
나는 Github에 A 계정과 B 계정을 가지고 있다. 현재 로컬에 있는 SSH key pair는 B 계정의 SSH key pair이다.
접근하려고 하는 private repository는 A 계정의 repository다. 결국 맞지 않는 열쇠를 열쇠 구멍에 넣고 돌리고 있었던 상황이다.
당연히 안 되는 상황인데 무지성으로 돌격했다.
상황을 파악했으니 이제 해결해 보자.
Image 3처럼 구성하면 되겠다. 깔끔하다. 순서는 다음과 같다.
1. 로컬에 A 계정, B 계정의 SSH key pair를 각각 구성한다. (각 키는 구분될 수 있게 네이밍 한다)
2. 각 계정에 public key를 등록한다.
3. repository에 접근 시, 해당 계정에 등록된 public key에 맞는 private key를 사용한다.
4. 디렉터리 별로 나누어 git user 정보를 세팅한다.
1. 로컬에 A, B 계정의 SSH key pair를 각각 구성한다.
ssh-keygen -t ed25519 -C "your_account@example.com"
위 명령어로 A, B 계정에 대한 SSH key pair를 만들어준다.
명령어를 실행시키면
Enter file in which to save the key (/Users/juneheein/.ssh/id_ed25519) :
라고 뜨는데 이때 두 키를 식별할 수 있는 이름을 넣어주면 된다.
두 계정의 SSH key pair 가 만들어졌는지 확인해 보자.
2. 각 계정에 public key를 등록한다.
각 계정으로 로그인하여 Settings -> SSH and GPG keys -> SSH keys에 공개키(*.pub)를 등록한다.
Title은 적당히 구분 지을 수 있게 네이밍 하면 되고,
Key 부분에는 아까 만들었던 key pair중 .pub 으로 끝나는 파일의 내용을 붙이면 되겠다. A, B 계정 모두 진행한다.
3. repository에 접근 시, 해당 계정에 등록된 public key에 맞는 private key를 사용한다.
기본적으로 git 명령어를 사용할 때, private key는 ~/.ssh/id_rsa 가 사용된다.
그래서 2번 스텝까지 완료한 상태에서는 A, B private repository 모두 ssh로 접근할 수 없다. 우리는 비밀키를 first_account, second_account로 만들었고 .ssh 디렉터리에는 id_rsa라는 비밀키는 존재하지 않기 때문이다.
이제는 각 계정에 맞는 비밀키를 사용할 수 있게 세팅해 본다. 계정에 맞는 public key를 사용하는 방법은 두 가지가 있다.
1. GIT_SSH_COMMAND 쉘 변수 등록
2. config file 정의
3–1. GIT_SSH_COMMAND 쉘 변수 등록(with Git 2.3.0 이상)
GIT_SSH_COMMAND라는 쉘 변수를 등록한다.
export GIT_SSH_COMMAND='ssh -i private_key_file'
등록했다면 해당 비밀키에 매핑되는 공개키가 등록되어있는 계정의 private repository에 접근할 수 있다.
쉘 변수 GIT_SSH_COMMAND에 A 계정의 비밀키가 세팅되어 있을 때,
A 계정의 private repository에는 접근할 수 있지만 B 계정의 private repository에는 접근할 수 없다.
특정 계정의 private repository에 접근할 때, 쉘 변수를 등록해 주면 된다.
3–2. config file 정의
먼저 config 파일을 ~/.ssh 디렉터리 하위에 만들고 내용을 작성한다.
vi ~/.ssh/config
------------config file------------------
Host github-for-first-acount.com <----- 구분될 수 있게 suffix를 붙여준다.
HostName github.com
User git
IdentityFile ~/.ssh/first_account <----- A계정 비밀키
Host github-for-second-account.com <----- 구분될 수 있게 suffix를 붙여준다.
HostName github.com
User git
IdentityFile ~/.ssh/second_account <----- B계정 비밀키
* Host와 IdentityFile 명은 상황메 맞게 네이밍 하면 되겠다.
위 내용처럼 작성하면 git clone 시 Host 값이 일치하는 IdentityFile로 비밀키를 인식한다.
git clone git@github-for-first-account.com:JuneheeIn/SSH-repo.git
위와 같이 요청했다면,
명령어에서 Host 부분이 github-for-first-account.com이기 때문에
config 파일에 명시된 설정들로 요청을 보내는 것이다.
이제 두 계정에 모두 접근해 보면 위 이미지(Image 8)와 같이 성공한다.
4. 디렉터리 별로 나누어 git user 정보를 세팅한다.
지금까지 각 계정에 맞는 private key를 사용하여 private repository에 접근할 수 있도록 세팅했다.
이제는 commit 할 때 발생하는 문제를 해결해야 한다.
A, B 계정은 email, name 등 git user 정보가 다르다. 그리고 이 정보들은 commit 할 때, 기록에 남는다.(물론 수정할 수 있다)
A repository에 B 계정으로 작업한 내용이 생길 수 있다.
내 소중한 개인 시간 동안, 개인 계정의 repository에 작업을 했는데, 작업 이력이 회사계정으로 남는다????? Die.
이 문제를 해소할 방법은 디렉터리를 기준으로 user 정보를 세팅하는 것이다.
먼저 디렉터리를 만들고 각각 .gitconfig 파일을 생성한다.
각각 생성한 파일에 각 디렉터리에서 사용할 user 정보를 작성한다.
[user]
name = [계정 username]
email = [계정 email]
* 디렉토리 위치와 네임은 각자의 상황에 맞게 네이밍
------------ ~/IdeaProject/first_account/.gitconfig ---------------
[user]
name = JuneheeIn
email = injh9900@gmail.com
-------------------------------------------------------------------
------------ ~/IdeaProject/second_account/.gitconfig ---------------
[user]
name = Juuuuuuui
email = june.programmer@gmail.com
---------------------------------------------------------------------
이후 ~/.gitconfig 파일에 아래와 같이 세팅하면 된다.
[includeIf "gitdir:~/IdeaProject/first_account/"]
path = ~/IdeaProject/first_account/.gitconfig
[includeIf "gitdir:~/IdeaProject/second_account/"]
path = ~/IdeaProject/second_account/.gitconfig
이제 아이디별 SSH 설정이 모두 완료 됐다.
지금까지 설정한 것을 그려보면 아래 이미지(Image 12)와 같다.
'Github' 카테고리의 다른 글
[Github] ssh 접속 설정하기 (0) | 2023.04.23 |
---|