회사 노트북을 안 쓰고 개인 맥북에서 개인 개발과 회사 업무개발을 둘 다 하고 싶었다.
현재 상황은
•
개인 이메일 → 개인 github
•
회사 이메일 → 회사 gitlab
을 써야하는 상황이다.
두 개의 git 계정을 한 머신에서 모두 사용하려면 SSH key 를 써야한다.
( SSH 대신 https 방식을 유지하고 싶다면 프로젝트마다 로컬 최상위에 있는 .git/config 파일을 수정해줘야 한다. )
개인 github 는 https 방식으로 쓰면서, 회사 gitlab 만 SSH 방식으로 사용해도 되긴 하지만 기왕 SSH key 를 만드는 김에 둘 다 만들었다.
~/.ssh 로 이동
cd ~/.ssh
Bash
복사
ssh key 생성
ssh-keygen -t rsa -C "개인 git 이메일" -f "ssh key 개인용"
ssh-keygen -t rsa -C "회사 git 이메일" -f "ssh key 회사용"
# 예시
ssh-keygen -t rsa -C "chs98105@gmail.com" -f "personal_git_key"
Bash
복사
ssh key 이름은 본인 마음대로 해도 된다.
key 생성 명령어를 치면 비밀번호(passphrase) 를 입력하라고 나오는데, 나는 입력하지 않고 바로 ENTER 를 눌렀다.
ssh key 의 비밀번호란 ?
SSH 인증 방식은 public key(서버) 와 private key(로컬) 를 이용해서 메시지 암호화 성공 여부로 인증 처리를 하는 방식이다.
입력하라고 하는 비밀번호는 로컬에 있는 private key 를 보호하기 위한 비밀번호이다.
만약 비밀번호를 설정하게 된다면 이 ssh 키를 사용할 때마다 비밀번호를 입력해줘야 한다.
ssh key 생성 완료
아래와 같이 personal_git_key 와 personal_git_key.pub 이 생겼다.
.pub 키는 말 그대로 public 키로 인증할 서버에 올릴 키이고,
확장자가 없는 key 는 private 키 이므로 유출되면 안 되는 키이다.
(선택사항) ssh key 를 ssh-agent 에 등록
ssh 키를 생성할 때 비밀번호를 입력했다면 매 번 치는 것이 귀찮은데, ssh-agent 에 등록하면 매번 비밀번호를 치지 않아도 된다.
ssh key 를 생성할 때 비밀번호를 생성하지 않았다면 이 과정이 필요없다.
eval "$(ssh-agent -s)"
ssh-add -K ~/.ssh/[키 이름]
Bash
복사
ssh config 추가
~/.ssh/config 파일에 아래 내용을 추가한다. ( 기존에 파일이 없으면 파일 생성 )
# Host 는 별칭 개념이므로 본인이 사용하기 편하게 세팅해도 됩니다
Host github.com-me
HostName github.com
User git
IdentityFile ~/.ssh/personal_git_key
Host gitlab.com-{회사명}
HostName gitlab.com
User git
IdentityFile ~/.ssh/{회사명}_git_key
Bash
복사
•
Host : ssh 접속할 때 github.com-me 로 들어오는 host ( 쉽게 부르기 위한 별명 개념 )
•
HostName : 해당 Host 명으로 들어왔을 때 실제로 연결되는 Host
•
User : 맨 앞에 붙는 이름 ( @ 앞 부분 )
•
IdentityFile : private 키 파일
public key 복사해서 github 에 등록
cat ~/.ssh/personal_git_key.pub
Bash
복사
맨 처음(ssh-rsa)부터 끝까지 다 복사해서 github 상에 등록해준다.
github SSH key 추가 링크
gitlab 은 아래 페이지
ssh 인증 테스트
ssh github.com-me
Bash
복사
ssh config 상에서 작성한 Host 별칭으로 ssh 인증 테스트를 해보자.
이러한 문구가 뜬다면 정상이다.
clone 하는 방법
https 를 사용할 때처럼 그냥 복사해서 clone 하면 안 되고, ssh config 에서 설정한 Host 이름으로 수정한 다음 clone 을 해야한다.
예를 들어 ssh config 상에서 Host 명을 github.com-me 로 설정했다면
git@github.com-me:{유저명}/{레포명}.git 처럼 Host 부분을 본인 설정에 맞게 바꿔줘야 한다.
(선택사항 1) 커밋 로그의 user.email 바꾸기
만약 전역적으로 user.email 과 이 설정돼있다면, 커밋을 할 시 해당 user 프로필로 커밋 로그가 찍히게 된다.
ssh key 는 신원파악만 할 뿐 ssh key 마다 커밋로그의 프로필까지 자동으로 설정해주지는 않는다.
따라서 전역 프로필 설정을 계속 유지하고 싶은데 프로젝트마다 커밋 이메일을 변경하고 싶다면, 어쩔 수 없이 로컬 git config 에서 수동으로 바꿔줘야 한다.
$ git config user.email <원하는유저이메일>
Python
복사
만약 global config 를 변경하고 싶다면 git config --global ~ 로 해주면 된다.
config 값 확인
$ git config --list --show-origin
Python
복사
•
--show-origin : 해당 config 속성이 local 에서 설정됐는지 global 에서 설정됐는지 직관적으로 확인할 수 있다.
(선택사항 2) git config 수정
새롭게 clone 을 받은 레포가 아닌 기존 레포의 경우
프로젝트 상의 git config 파일에서 remote 레포지토리 주소를 수정해줘야 한다.
remote 주소는 위에서 했던 대로 원하는 ssh key 의 Host 주소로 바꿔줘야 한다.
ex) {프로젝트루트}/git/config
[remote "orgin"]
url = git@github.com-me:{유저명}/{레포명}.git
Bash
복사