1ilsang

Developer who will be a Legend

GitHub 여러 계정을 한 컴터에서 사용하기

2020-02-30 1ilsangDev Tip

github

회사 컴을 집에서 쓴다거나, 아니면 커밋 계정을 따로 관리한다거나 할 경우 원하는 계정으로 push 를 하고 싶다는 생각이 든다.

나의 경우 회사 계정과 내 개인 계정의 분리를 원했기 때문에 하게 되었고 그 과정을 적어보려고 한다.

1. 원하는 계정의 SSH key-gen 를 만들어 준다.

$ ssh-keygen -t rsa -b 4096 -C "your@email.com"

그러면 아래와 같이 키페어 저장 위치를 물어본다.

Generating public/private rsa key pair.
Enter file in which to save the key (/${userPath}/id_rsa):

나는 Mac 환경이라 /Users/1ilsang/.ssh/id_rsa라고 나온다. 여기서 그냥 엔터 누르면 id_rsa 가 만들어지거나 덮게 되므로 바로 진행하지말고 식별할 수 있는 값을 넣어주자

Enter file in which to save the key (/${userPath}/id_rsa): /Users/1ilsang/.ssh/personal

원하는 위치에 원하는 이름으로 입력하고 엔터를 누르면 비밀번호를 입력할거냐고 물어보는데(Enter passphrase (empty for no passphrase):) 나는 필요하지 않아 엔터로 걍 없음 처리 했다.

나는 personal 이라고 넣었기 때문에 해당 위치에 personalpersonal.pub 두개가 생긴다.

.pub이 공유하는 공개키이고 확장자가 없는 파일이 비밀키에 해당한다. 그러므로 앞으로 공유하는 파일은 .pub 파일이다!!(개인키는 공개되면 안된다.)

2. SSH key 를 등록해준다.

$ ssh-add /${userPath}/${userSSHPubKey.pub}

위의 명령어로 로컬에 키를 등록한다.

그 다음 깃헙에 추가해주자.

github setting

add new 를 눌러 아무거나 식별할 수 있는 이름을 Title 로 넣고 key에 앞에서 만들었던 .pub 값을 넣어주자.

$ cat test.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADA...
	...
21Ew== your@email.com

ssh-rsa 부터 끝까지 모두 복사해서 붙여넣으면 된다.

3. Config 파일로 다수의 계정을 관리하자.

여기서 부터가 이 포스터의 본론이다.

깃헙이 ~/.ssh/config 를 바라보기 때문에 config 파일을 만들어준다.(기존에 있다면 밑에 붙여 넣기만 하면 된다.)

$ vi ~/.ssh/config
  1 # account 1
  2 Host github.com
  3   HostName github.com
  4   User git
  5   IdentityFile ~/.ssh/github/git
  6 # account 2
  7 Host github.com-my
  8   HostName github.com
  9   User 1ilsang@naver.com
 10   IdentityFile ~/.ssh/personal
 11

2번이 우리가 추가한 계정이다. 여기서 중요한 점은 우리가 등록한 ssh-keyHost 이다.

github.com-my-my 는 원하는 키를 주면 된다. 기존의 호스트와 다르게 해주기 위해 설정한 것. 부가 내용은 4번에서 하겠다.

그다음 IdentityFile에 시크릿 키를 넣어주자.

4. 깃 레파지토리의 remote 를 설정한다.

$ git remote get-url origin

만약 기존의 레파지토리가 존재하는 상태에서 어떤 origin 원격 저장소를 가져오고 싶다면 remote url 을 변경해 주어야 한다.

새롭게 clone 혹은 pull 받을 경우는 바로 아래와 같이 하면 된다.

깃헙에 가서 Clone or download를 누르고 Use SSH를 활성화 시켜 git@github.com:1ilsang/Study.git 를 가져온다고 하자.

나는 3번에서 github.com -my 라는 키워드를 넣었으므로 가져올 git@github.com-my:1ilsang/Study.git 로 가져오면 된다.

remote 수정도 위와 마찬가지다.

$ git remote set-url origin ${your-github.com}-my
 혹은
$ git clone ${your-github.com}-my:${your-repo}
> 예: git clone git@github.com-my:1ilsang/Study.git

이렇게 해주면 깃이 Host 를 찾아 그에 맞는 ssh 키를 찾아간다.

5. 레파지토리 계정을 격리한다.

이제 해당 레파지토리는 해당 호스트의 키를 가져올 것이므로 글로벌 계정과 충돌되지 않게 local 설정을 먹인다.

$ git config --local user.name "Your Name"
$ git config --local user.email "Your Email"

레파지토리로 이동해 로컬 아이디와 이메일을 설정해준다.

그러면 따로 ssh 키 변경 없이 해당 레파지토리에서 위의 아이디로 바로 찾아가게 된다.

이제 push 하면 정상적으로 된다!

부록. UNPROTECTED PRIVATE KEY FILE 에러

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0444 for '/Users/1ilsang/.ssh/personal' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/1ilsang/.ssh/personal": bad permissions
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

만약 위와 같은 에러가 나면 pub 키의 권한이 너무 높기 때문에 문제가 된다고 알려주는 것이다.(컴터의 아무 유저나 파일을 수정할 권리가 있으면 안된다)

간단히 권한을 낮춰주면 된다.

$ chmod 600 /Users/1ilsang/.ssh/personal

그럼 이만!