한 컴퓨터에서 여러개의 깃허브 계정을 사용해야 할 때가 있습니다.
저언혀 어렵지 않으니, 더 이상 미루지 말고 세팅을 해봅시다. (저는 거의 1년을 미루다 이제 세팅합니다..)
우린 SSH라는 방식을 이용해 github에 인증할 예정이므로, 컴퓨터에 ssh 키를 생성해 줍시다.
SSH 키 생성
우선, 깃허브에서 사용하는 user1과 user2가 존재하고 그 이메일 주소는 아래와 같다고 합시다.
user1: user1@naver.com
user2: user2@gmail.com
아래에서는 위 예시를 이용해 명령어를 작성할 예정이니 상황에 맞게 바꿔 설정 해주시면 되겠습니다.
1. SSH 디렉토리 이동 및 확인
이제 SSH 키를 생성하는 작업을 진행 해봅시다.
먼저, 원하시는 터미널을 켜주시고 아래 명령어를 입력 합시다.
cd ~/.ssh
ll
그럼 아래와 같이 기존에 가지고 있는 SSH 키 목록이 보일 것입니다.
2. SSH 키 생성 명령
이제 우리가 사용할 SSH 키를 직접 생성해 볼것입니다.
명령어는 아래와 같습니다.
반드시 github에서 사용하는 이메일을 입력해야 하고, -f 옵션 뒤에 오는 값으로 SSH키를 생성하게 됩니다.
ssh-keygen -t rsa -C "[github 사용 email]" -f "id_rsa_[id]"
예시를 적용하면 아래와 같을 것입니다.
ssh-keygen -t rsa -C "user1@naver.com" -f "id_rsa_user1"
ssh-keygen -t rsa -C "user2@gmail.com" -f "id_rsa_user2"
위 명령어를 치면, 아래처럼 무언가 입력하라고 하는데, 그냥 엔터 두 번 눌러주시면 간단하게 암호 없이 사용 할 수 있습니다.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
우리가 사용하고자 하는 깃 허브 계정 2개에 대해서 모두 위의 과정을 거쳐 줍니다.
정상적으로 생성되었는지, 아래처럼 확인해 봅시다.
그럼 우리가 지정한 이름대로 생성된 총 4개의 파일이 보일 것입니다.
ll ~/.ssh
난 2개밖에 생성하지 않았는데 왜 4개지?라고 생각하시는 분들을 위해 간단히 설명하자면,
"id_rsa_user1" 으로 생성된 것이 개인키, "id_rsa_user1.pub" 으로 pub이 붙어서 생성된 것이 퍼블릭 키 입니다.
우린 계정 2개에 대해 키를 생성했으니, 총 4개가 생성되어야 맞는 것 입니다.
3. ssh-agent에 추가
여기에서 ssh-agent에 대해 간단히 설명하면,
ssh-agent는 개인키의 비밀번호를 암호화 해 기억해두고 한 번만 비밀번호를 입력하면 더 이상 비밀번호를 입력하지 않아도 되게 도와주는 역할을 합니다. 소켓으로 외부와 통신하기에, 비밀번호가 유출된 염려도 없습니다.
먼저, ssh-agent가 잘 떠있는지 확인해 봅니다.
eval "$(ssh-agent -s)"
pid 값이 출력되면 정상입니다.
방금 생성했던 user1과 user2의 SSH 개인키를 ssh-agent에 추가해 줍시다.
ssh-add ~/.ssh/id_rsa_user1
ssh-add ~/.ssh/id_rsa_user2
정상적으로 추가 되었는지 확인 해 봅시다.
ssh-add -l
Github SSH 키 등록
이제 앞서 생성한 SSH 공개 키를 github에 등록 해 줍시다.
아래의 과정은 user1, user2 모두 각각 한 번씩 해줘야 한다는 점을 기억 해 줍시다.
1. github 로그인 및 세팅화면 이동
우선 github에 user1으로 로그인 하고, settings 화면으로 이동합니다.
우측 상단의 프로필 아이콘 클릭 > settings 클릭 하시면 해당 화면으로 이동 가능합니다.
그리고 아래처럼 SSH and GPG keys 화면으로 이동합니다.
2. SSH 공개 키 등록
그런 다음 우측에 New SSH Key 버튼을 클릭하시면, 아래처럼 새로운 SSH 공개키 등록화면이 나옵니다.
타이틀은 원하시는대로 입력 해 주시고, 아래 키 부분에 아까 생성한 SSH user1의 공개키를 복사 붙여 넣기 해줍시다.
만약, vsCode를 사용하신다면, 아래 명령어를 통해 해당 키를 쉽게 열고 복사 하실 수 있습니다.
code /.ssh/id_rsa_user1.pub
그리고 마지막 Add SSH key 버튼을 눌러 주시면, 정상적으로 등록이 되었습니다.
이제, 앞서 설명 한 것처럼 이 과정을 똑같이 진행하여 user2의 계정에도 공개 키를 등록 해 주시면 됩니다.
SSH config 설정
마지막으로 SSH config만 설정 해 주면 이제 등록절차는 끝납니다.
아래 명령어를 통해 ssh config를 열어줍시다.
저는 vsCode를 사용하기 때문에 code 명령어를 사용 했지만, vi, vim 등 다른 편집기를 사용하셔도 무관합니다.
만약 해당 파일이 없다면, 새롭게 만들어서 작성 해 줍시다.
$ cd ~/.ssh
$ code config
아래처럼 내용을 작성 해 줍시다.
#user1 대한 SSH 설정
Host github.com-user1
HostName github.com
User user1
IdentityFile ~/.ssh/id_rsa_user1
#user2 대한 SSH 설정
Host github.com-user2
HostName github.com
User user2
IdentityFile ~/.ssh/id_rsa_user2
이 과정에 대해 간단하게 설명하자면, 원래 우리가 SSH 접속을 하려고 할 때, user Id, 패스워드 등등을 입력해야 하는데,
그 입력 옵션을 매번 기억하기 힘드니 미리 등록하여 놓는 과정입니다.
- Host: SSH 명령에 사용할 이름
- Hostname: Host에 지정된 이름이 매핑되는 실제 호스트 명
- User: 네트워크 커넥션에 사용되는 계정 명(github 계정 명 이어야 함)
- IdentifyFile: 연결 시 사용할 개인키의 위치
이제, 정상적으로 등록되었는지 아래 명령어를 통해 확인 해 봅시다.
ssh -T git@github.com-user1
위 명령어의 응답으로 아래와 같이 출력되면 정상 연결이 된 것입니다.
Hi user1! You've successfully authenticated, but GitHub does not provide shell access
SSH로 git clone 및 push
이제 우리가 만들어 놓은 SSH키를 이용해 git clone, push를 할 수 있습니다.
원하는 리포지토리에 들어가서 코드를 눌러 SSH 탭을 선택 해 줍니다.
1. SSH git clone
주의 할 점
주소에 dev-morph라고 적혀 있는 부분이 config에 설정 해 줄 때 적은 것과 같은 계정이름(user1)이 나와야 합니다.
위의 예를 들자면, git@github.com:user1/study-springboot.git 가 출력 되어야 합니다.
만약 다르다면, 자신의 github 계정과 다르게 config 설정 한 것이니, 제대로 동작 하지 않습니다. 꼭 맞춰서 진행 해 주세요!
이제, 위 주소를 복사하여 우리가 원래 하던대로 clone 해주시면 됩니다.
git clone git@github.com:user1/[복사한 주소]
2. SSH git push
이미 기존에 clone 해 놓은 레포에서 SSH키를 이용해 push 하고 싶을 때는 어떻게 해야 할까요?
git remote 명령어를 통해 SSH 주소를 원격 저장소로 등록하고 이용하면 됩니다.
git remote add [저장소이름] [ssh 주소]
실 사용 예는, 아래와 같을 것 입니다.
git remote add ssh git@github.com:user1/test1.git
그 다음 우리가 새로 등록한 SSH 원격저장소를 이용해 push 해 줍시다.
git push ssh [branch]
여기까지 한 컴퓨터에서 여러개의 git 계정을 이용하는 방법에 대해 알아봤습니다.
따라하기만 해도 쉽게 설정 할 수 있으니, 저처럼 미루지 말고 얼른 적용 하셨으면 좋겠습니다!
잘못된 점이나, 진행이 안되는 부분은 언제든지 댓글로 남겨주세요.
'Git' 카테고리의 다른 글
[Solved] Unable to open 'backend (Working Tree)' (0) | 2022.10.08 |
---|---|
[Solved] remote: fatal: pack exceeds maximum allowed size (feat. git reset) (0) | 2022.09.22 |