한 컴퓨터에서 git 여러 계정 + 스택오버플로우

2022. 11. 7. 15:30Post

 

한 컴퓨터에서 github 계정 여러개 사용하기 - git | UsingU

한 컴퓨터에 여러개의 github를 사용해야 하는데 오류가 발생하는 등 불편함이 있었습니다. SSH Key를 이용해 한 컴퓨터에 여러개의 github 계정을 사용하는 방법을 알아보도록 하겠습니다.

usingu.co.kr

https://stackoverflow.com/questions/7927750/specify-an-ssh-key-for-git-push-for-a-given-domain

위 2개의 글을 짬뽕 한 글 입니다.

 

먼저 글은, multiple한 계정을 생성 및 세팅까지 하는 글이고,

후자의 글은 커밋시에도 해당되는 내용입니다. 


 

SSH Key를 이용해 한 컴퓨터에 여러개의 github 계정을 사용하는 방법 


1. SSH Key 생성하기

github에 사용하는 계정이

userA(사용 email : userA@example.com) ,

userB(사용 email:userB@example.com) 라고 가정을 하고 각 각 SSH Key를 생성하는 과정을 진행합니다.

  1. Git Bash 를 실행합니다.
  2. SSH key 를 관리하는 디렉토리로 이동 후 나중에 추가된 SSH 키를 확인하기 위해 기존 파일 목록을 확인합니다.
$ cd ~/.ssh
$ ls -al

 

 3. SSH key를 생성하는 명령을 내립니다. github에서 사용하는 email과 생성될 키 이름을 각각 지정해야 합니다. 먼저 github에 email은 “userA@example.com” 고 SSH키를 “id_rsa_userA” 이름으로 생성합니다. 실행 명령은 다음과 같습니다.

$ ssh-keygen -t rsa -C "userA@example.com" -f "id_rsa_userA"

아래와 같이 프롬프트에 보안 암호를 입력하라는 메시지가 나오면 그냥 Enter를 칩니다. 그러면 암호 입력없이 그냥 사용할 수 있습니다.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

 

4. 3과 동일한 방법으로 userB(email : userB@example.com )의 SSH Key를 “id_rsa_userB” 로 생성하는 명령을 내립니다.

$ ssh-keygen -t rsa -C "userB@example.com" -f "id_rsa_userB"

 

5. SSH key 가 생성된 것 확인 합니다.

$ ls -al ~/.ssh

표시된 목록에 id_rsa_userA , id_rsa_userA.pub와 id_rsa_userB, id_rsa_userB.pub 파일이 추가된 것을 확인할 수있습니다. .pub 확장자가 붙은 파일이 공개키 파일이고 붙지 않은 파일이 개인키 입니다.

 

6. ssh-agent에 새로 생성한 SSH key를 추가해 줍니다. 먼저 백그라운드에 ssh-agent 실행시켜 줍니다. 표시되는 pid 값은 매번 달라지니 제시되는 예제라 달라도 문제가 되지 않습니다.

$ eval "$(ssh-agent -s)"
> Agent pid 59566

각각 생성한 userA와 userB의 SSH 개인키를 ssh-agent에 추가해 줍니다.

$ ssh-add ~/.ssh/id_rsa_userA

$ ssh-add ~/.ssh/id_rsa_userB

ssh-agent에 정상적으로 SSH 개인키가 추가되었는지 확인합니다.

$ ssh-add -l
3072 SHA256........userA@example.com (RSA)
3072 SHA256........userB@example.com (RSA)

2. GitHub에 새 SSH 공개키 추가하기

공개키를 각 계정에 추가해 주는 과정을 진행합니다. ~/.ssh/id_rsa_userA.pub 와 ~/.ssh/id_rsa_userB.pub 파일이 공개키 입니다.

  1. 공개키를 먼저 복사하기 위해 VSCode에서 userA의 공개키 파일을 열고 내용을 복사해 줍니다. VSCode를 사용하지 않고 다른 편집기를 사용하시면 사용하시는 편집기를 이용해 공개키 파일을 열어 전체 내용을 복사합니다.
$ code ~/.ssh/id_rsa_userA.pub

2. userA로 GitHub에 로그인 후 오른쪽 상단의 프로필 사진을 클릭한 후 Settings 메뉴를 선택합니다.

3. 왼쪽 사이드바 메뉴에서 “SSH and GPG keys” 를 선택한 후 오른쪽 상단의 “New SSH key” 단추를 클릭합니다.

4. “Title” 입력칸에 등록할 공개키를 설명할 수 있는 문구를 입력 합니다. 예로 notebook-userA 처럼 각 노트북 , 데스크탑 등 사용하는 컴퓨터를 구분할 수 있도록 작성하면 편리합니다. “key” 필드에는 복사해둔 공개키를 붙여놓은 후 아래 “Add SSH key” 단추를 클릭합니다.

5. userB 계정도 앞의 1~4 번의 과정을 진행해 줍니다.


3. SSH config 파일 설정하고 SSH 연결 테스트 하기

원격 SSH 서버에 연결을 설정할 때 사용되는 SSH 옵션을 SSH config 파일에 작성을 합니다.

  1. Git Bash 실행합니다.
  2. SSH config 파일은 ~/.ssh 폴더 밑에 위치해야 합니다. 기존에 있으면 수정하시고 없으면 새롭게 만들어 작성해 줍니다. VSCode 에서 config 파일을 작성합니다.
 
$ cd ~/.ssh
$ code config

 

3. 아래와 같은 내용으로 작성합니다. SSH 클라이언트 config 파일의 내용은 섹션으로 나눠있고 각 섹션의 시작은 Host 지시자로 시작합니다.

 
#userA에 대한 SSH 설정
Host github.com-userA # SSH 연결에 사용될 대표이름
    HostName github.com # github의 도메인
    User userA # github 사용자 아이디
    IdentityFile ~/.ssh/id_rsa_userA # 앞서 생성한 개인키 경로

#userB에 대한 SSH 설정
Host github.com-userB # SSH 연결에 사용될 대표이름
    HostName github.com # github의 도메인
    User userB # github 사용자 아이디
    IdentityFile ~/.ssh/id_rsa_userB # 앞서 생성한 개인키 경로
  •  SSH 연결에 사용될 대표이름
    Host에 대한 값이 중요합니다. 나중에 ssh로 연결할 때 Host 지시자에 지정된 값이 사용되니 구분하기 쉽고 기억하기 편리한 이름으로 작성합니다.

나중에 SSH 연결을 할 때 Host에 지정한 값이 github.com-userA를 호출하시면 그 섹션에서 지정한 HostName에 접속해 User의 계정을 가지고 IdentityFile 의 개인키로 참조해 인증을 하게 됩니다.

 

4.SSH 연결을 테스트 하기 위해 아래의 명령을 실행합니다.

 
 
$ ssh -T git@github.com-userA
 
 
 

성공하면 “Hi userA! You’ve successfully authenticated, …..” 메시지가 출력합니다. 결과 메시지에 userA처럼 username이 포함되면 연결에 성공되었습니다.

git은 반드시 git으로 작성합니다. 자신의 계정으로 변경하시면 안됩니다 github.com-userA 는 SSH config 파일에서 Host 지시자 뒤에 설정한 값으로 대신하시면 됩니다.


SSH로 clone 받기

이제는 리모트 리포지토리를 clone 받을 때 HTTPS 프로토콜이 아닌 SSH로 clone을 받아야 합니다.

SSH의 기본 경로는 git@github.com:github계정/리포지토리명.git 입니다. github의 계정이 userA이고 리포지토리의 이름이 userA-test이면 git@github.com:userA/userA-test.git 이 됩니다. 이 SSH 경로를 SSH config에 설정한 것에 맞춰서 변경해 주어야 합니다.

위에서 SSH config 파일 설정할 때 github의 userA 에 대한 정보를 담은 Host를 github.com-useA로 지정해 두었습니다. 기본 경로의 github.com을 SSH config 파일에서 설정한 대로 github.com-userA로 변경해줍니다.

 
 
$ git clone git@github.com-userA:userA/userA-test.git
 
 
 

clone 명령이 실행되면서 SSH config 파일에서 Host에 github.com-userA 섹션을 찾아 SSH로 연결해 인증 작업을 진행하게 됩니다.

 

5. 마무리하며

길고 긴 내용이었습니다. 각 단계도 길고 확인해야 할 내용도 많고 에러도 갑자기 튀어나오고… 제가 작업하면서 경험했던 오류와 그 해결을 위한 자료 검색을 통해서 저에게 가장 적절했던 순서를 찾아 정리했습니다.

github에서 private 리포지토리를 더 많이 사용하는 저는 계정 하나만 사용하면 VSCode가 많은걸 해결해 줘서 편리하게 사용하긴 했습니다. 근데 제 개인작업용과 프로젝트 계정을 분리해야만 했고 계정을 바꿔가며 private 리포지토리를 사용하는것에 많은 문제가 있었습니다. 그래서 이렇게 길고 복잡하지만 굳이 SSH 설정을 해야 했습니다. 마이크로소프트가 좀 더 힘내서 SSH 설정도 GUI 모드로 편리하게 해 줄 날이 있을거라 기대해 봅니다.

모두들 화이팅입니다.

 

 

 

 


~/.gitconfig

[user]
    name = My Name
    email = personal@personal.email

[includeIf "gitdir:~/dev/work/"]
    path = ~/dev/work/.gitconfig

[url "github-work:work-github-org/"]
    insteadOf = git@github.com:work-github-org/

~/dev/work/.gitconfig

[user]
    email = work@work.email

위 까지 같이 설정했을 때 , /dev/work/ 하위에서는 커밋할때, 회사 계정.

그리고 그 외 디렉토리에서는 나의 프라이빗 계정으로 커밋할 수 있을 것임을 알 수 있다. 

이때, 기 저장 된 키체인은 삭제해야한다. 

 

 


혹은,

git remote add origin https://깃계정:키@github.com/깃계정/해당리포지토리.git

이런식으로도 할 수 있음 

'Post' 카테고리의 다른 글

create template. index.html  (0) 2022.11.10
python 테스트 프레임워크  (0) 2022.11.08
mongodb slow query 조회  (0) 2022.11.01
mongosh 조회  (0) 2022.09.28
git | 이미 origin 에 push 한 커밋 메시지 수정  (0) 2022.09.27