[GitHub] 깃허브 여러 계정 사용하기
안녕하세요!
키크니 개발자 입니다. 🦒
현재 한 대의 맥북으로 회사에서 사용하고 있는데,
개인적으로도 공부할 때도 같이 사용하고 싶어서 깃허브 계정을 여러개 적용하는 방법을 알아보았습니다.
(아무래도 집에는 윈도우 노트북이 있는데 개발할 때 사용하기에 어려운 감이 있더라구요 😂 )
GitHub repository 마다 계정을 따로 적용시키는 것 을 중점으로 두었습니다.
깃허브 여러 계정 사용 방법
- ssh key 생성하기
- ssh config 설정하기
- git config 설정하기
- 테스트하기
1. ssh key 생성하기
- 터미널에서
/Users/본인닉네임/.ssh
으로 들어갑니다. ex) /Users/hyerinkim 에서 cd ~/.ssh
- 처음에는 ssh key 생성된 것이 없는 것을 알 수 있습니다.
$ ssh-keygen -t rsa -C "your_email@example.com"
- 위 명령어로 ssh key를 생성할 수 있습니다.
- 이메일 부분은 자신의 깃허브 계정 이메일을 사용하면 됩니다.
ex) ssh-keygen -t rsa -C "tytntu@naver.com"
- Generating public/private rsa key pair.
Enter file in which to save the key (/Users/hyerinkim/.ssh/id_rsa):- 해당 문구가 나오면 사용할 ssh key의 이름을 입력합니다.
- 개인 프로젝트를 관리할 ssh key는 id_rsa_me 라고 지정하였습니다.
- Enter passphrase (empty for no passphrase) / Enter same passphrase again 에는 비밀번호를 따로 입력해주었습니다.
- 입력을 완료하면 id_rsa_me, id_rsa_me.pub 파일이 생성된 것을 확인할 수 있습니다.
회사 계정도 위와 같은 방법으로 진행합니다.
- 회사 계정 ssh key 이름은 id_rsa_work 로 지정하였습니다.
- id_rsa_me, id_rsa_me.pub, id_rsa_work, id_rsa_work.pub
- ssh key 파일이 생성된 것을 확인할 수 있습니다.
⭐️ .pub 이 붙은 파일은 공개키이고, 붙지 않은 파일은 비밀키입니다.
비밀키는 절대 공개해서는 안됩니다. 공개키는 추후 GitHub에서 ssh key 를 등록할 때 필요합니다.**
eval "$(ssh-agent -s)"
- ssh agent 를 실행합니다.
- ssh agent 를 실행합니다.
ssh-add -K ~/.ssh/id_rsa_me
- ssh key 를 추가합니다.
- ssh key 를 추가합니다.
1-2. GitHub에 공개키 등록
- GitHub → setting → SSH and GPG keys → new SSH key 버튼 클릭 후 위에서 생성한 .pub 파일의 내용을 복사해서 넣으면 됩니다.
- .pub의 내용을 확인하려면 해당 명령어를 사용하면 됩니다.
cat /Users/본인닉네임/.ssh/id_rsa_me.pub
- 위 ssh key를 복사해 줍니다. ssh-rsa ~~ email@example.com (ssh-rsa 부터 깃허브 이메일까지)
cat id_rsa_me.pub | pbcopy
(~/.ssh 에서 명령어 실행) 해당 명령어를 사용하게 되면 간편하게 내용을 복사할 수 있습니다.
회사 계정도 위와 같은 방법으로 진행합니다.
2. ssh config 설정하기
GitHub에서 각각의 ssh key로 접근할 수 있게 해주기 위해서 설정히 필요합니다.
/Users/본인닉네임/.ssh/
에서 config 파일을 직접 만들어줘야 합니다.
config파일에 아래와 같이 내용을 입력합니다.
~/.ssh
위치에서 vi config
명령어를 입력한 후 아래 내용을 입력합니다.
# 개인 계정
Host github.com-me
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_me
# 회사 계정
Host github.com-work
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_work
위의 내용을 기입한 후 :wq 를 입력 후 엔터를 치면 저장이 됩니다.
여기서 중요한 것은 Host와 IdentityFile 입니다.
- Host: 이 값은 저장소 주소 불러올 때 쓰입니다. 저장소를 구분하는 일종의 Key라고 생각하면 됩니다.
- IdentityFile: ssh key의 경로입니다. 각 계정의 ssh key의 경로와 이름을 입력해주면 됩니다.
- 개인계정 : id_rsa_me, 회사계정 : id_rsa_work
위 설정은 Host가 github.com-work
일 때 실제 Host는 github.com
를 사용하고
SSH Key 파일은 ~/.ssh/id_rsa_work
를 사용하라는 의미입니다.
여기서 Host는 git clone 할 때 지정하는 Host를 말합니다.
따라서 클론하거나 리모트 저장소를 등록할 때 Host를 수동으로 변경해줘야 합니다.
예를 들어, 원래 주소가 git@github.com:rinikim/repository.git
일 경우 clone 할 때는 git@github.com-work:rinikim/repository.git
으로 해줘야 합니다.(github.com
-> github.com-work
)
3. git config 설정
git config 조회
git config --list
마지막으로 깃허브 저장소가 있는 폴더로 이동한다..git/
경로에 있는 config 파일을 열어봅니다.
[remote "orgin"]
url = git@github.com:{GithubID}/{RepositoryName}.git
위의 부분을 다음과 같이 변경한다. (여기서 .ssh/config
파일에서 설정한 Host 값이 쓰입니다.)
- 개인 계정이 사용할
.git/config
파일
[remote "orgin"]
url = git@github.com-me:{GithubID}/{RepositoryName}.git
- 회사 계정이 사용할
.git/config
파일
[remote "orgin"]
url = git@github.com-work:{GithubID}/{RepositoryName}.git
4. 테스트
- 깃허브 저장소에 연결된 로컬 터미널에서 아래 명령어를 쳐서 SSH key가 잘 동작하는지 확인 할 수 있습니다.
$ ssh -T git@github.com-me
Hi {GithubID}! You've successfully authenticated, but GitHub does not provide shell access.
ssh key를 만들 때 비밀번호를 지정하였으면 해당 비밀번호를 입력하면 됩니다.
- 위와 같이 나온다면 정상적으로 연결이 된 것입니다.
- git add, commit, push를 통해 정상적으로 반영이 되는지 확인하면 됩니다.
GitHub 저장소 클론
각 계정별 깃허브 저장소에서 Clone or download
버튼을 누르면, 두 가지 방식으로 클론을 할 수 있다.
- SSH 방식 주소: git@github.com:foo/foo_site.git
- https 방식 주소: https://github.com/foo/foo_site.git
앞으로는 깃허브 저장소에서 SSH를 이용해 클론을 하면 된다.
- 기존 config 파일을 개인 계정으로 사용할 생각이었기 때문에 아래와 같이 작성한 후 테스트를 해보았습니다.
프로젝트 .git 에서 config 파일
문제점
해당 프로젝트를 개인 계정으로 commit, push 를 하고 싶어 진행하였지만,
기존에 등록되어있었던 회사 계정으로만 commit, push 가 진행되는 문제가 있었습니다.
해결방법
git repository 마다 계정을 다르게 사용하기 위해서 로컬 설정을 따로 해준 후 commit, push 를 하니 GitHub에 잘 올라가있는 것을 확인할 수 있었습니다.
git config --local user.name "rinikim"
git config --local user.email "tytntu@naver.com"
또한 git config —local 명령어로 회사계정을 변경한채로 commit, push 를 했을 때도 GitHub에 잘 올라가는 것을 확인했습니다.
⭐️ 참고한 곳
배워야 할 것이 더 많은 주니어 개발자입니다. 🐣
내용 전달보다는 정리를 목적으로 포스팅을 하고 있습니다.
잘못 된 내용이나 부족한 부분은 댓글로 주시면 감사드리겠습니다.