[Github] 계정별 SSH 접속 설정하기

2023. 4. 23. 15:38Github

반응형
하나의 환경에서 다수의 SSH Key pair를 사용하여 Github repository에
접근하는 방법을 설명한다.

 

개발하다 보면 회사와 개인 계정 등 다수의 Github 계정을 사용하는 경우가 있다. 그것도 한 컴퓨터에서.
이런 상황에서 SSH 방식으로 private repository에 접근하는 방식을 사용하게 되면 아래 이슈를 맞닥뜨리게 된다.

Image 1. permission denied clone by ssh

“엥 ??? 나 SSH 설정해놨는디 ??”
Settings -> SSH and GPG keys 메뉴로 가서 SSH keys를 확인하고, ~/.ssh 폴더로 가서 Key pair의 존재도 확인했는데 안 된다.

혹시나 해서 다시 한번 SSH 설정을 시도하려면 아래 포스팅을 참고해 주세요.
[Github] SSH 설정하기
https://juni-in.tistory.com/8
 

[Github] ssh 접속 설정하기

SSH에 대한 개념과 SSH방식으로 github repository에 접근하는 방법을 설명한다. Github repository를 clone 하는 방법은 HTTPS, SSH가 있다. Public repository라면 HTTPS 방식이 설정할 필요 없이 사용하기 수월하다.

juni-in.tistory.com

 

이때쯤 드는 생각은 시스템이 이상한 거 같다는 생각이지만 언제나 이상한 건 시스템이 아니라 나다.

현재 상황은 이렇다.

Image 2. 현재 상황

나는 Github에 A 계정과 B 계정을 가지고 있다. 현재 로컬에 있는 SSH key pair는 B 계정의 SSH key pair이다.
접근하려고 하는 private repository는 A 계정의 repository다. 결국 맞지 않는 열쇠를 열쇠 구멍에 넣고 돌리고 있었던 상황이다.
당연히 안 되는 상황인데 무지성으로 돌격했다.

상황을 파악했으니 이제 해결해 보자.

Image 3. 이상적인 상황

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) :
라고 뜨는데 이때 두 키를 식별할 수 있는 이름을 넣어주면 된다.

Image 4. 생성하는 SSH key pair 네이밍

두 계정의 SSH key pair 가 만들어졌는지 확인해 보자.

Image 5. 생성된 두 계정의 SSH key pair

2. 각 계정에 public key를 등록한다.

각 계정으로 로그인하여 Settings -> SSH and GPG keys -> SSH keys에 공개키(*.pub)를 등록한다.

Image 6. 각 계정에 공개키 등록

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이기 때문에

Image 7. config 파일

config 파일에 명시된 설정들로 요청을 보내는 것이다.

Image 8. 두 계정 모두 clone Success

이제 두 계정에 모두 접근해 보면 위 이미지(Image 8)와 같이 성공한다.

Image 9. 현재 구현 상태

4. 디렉터리 별로 나누어 git user 정보를 세팅한다.

지금까지 각 계정에 맞는 private key를 사용하여 private repository에 접근할 수 있도록 세팅했다.
이제는 commit 할 때 발생하는 문제를 해결해야 한다.

A, B 계정은 email, name 등 git user 정보가 다르다. 그리고 이 정보들은 commit 할 때, 기록에 남는다.(물론 수정할 수 있다)
A repository에 B 계정으로 작업한 내용이 생길 수 있다.

내 소중한 개인 시간 동안, 개인 계정의 repository에 작업을 했는데, 작업 이력이 회사계정으로 남는다????? Die.

Image 10. 디렉터리 별 유저 정보 세팅 전

이 문제를 해소할 방법은 디렉터리를 기준으로 user 정보를 세팅하는 것이다.
먼저 디렉터리를 만들고 각각 .gitconfig 파일을 생성한다.

Image 11. 계정 별 디렉터리, .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)와 같다.

Image 12. 아이디별 SSH 설정
반응형

'Github' 카테고리의 다른 글

[Github] ssh 접속 설정하기  (0) 2023.04.23