• Github 다수 계정을 위한 SSH key 설정 :: 마이구미
    GitHub 2017. 1. 14. 21:40
    반응형

    이번 글은 하나의 서버에서 Github 계정을 둘 이상 사용할 수 없는 이슈에 대해 해결 방안을 다뤄본다.

    이번에 private 저장소를 만들어서 개발서버를 셋팅하는 과정에서 얻은 무식함과 깨달음으로 진행해본다. 


    먼저 본인의 환경을 설명하겠다.

    개발서버는 cafe24의 가상서버호스팅을 이용하고 있다.

    오로지 실서버에 올리기 전 테스트만 하는 용도로 쓰고 있다.


    또한 개발서버를 개인적인 공부를 위해서도 사용하고 있다.

    이러한 개인적인 공부는 Github의 public 저장소를 이용하고 있다.

    개인적인 개발은 Github으로 관리하고, 업무에 있어서는 Github을 사용을 안하는 것인가?

    그렇다...

    지방에서 Github을 바라는 건 사치인 것 같다. 

    (서울 사람인척 하는 거 같아서 말함. 서울에서 8개월 밖에 일 안했음...)


    하지만 Github은 개발자라면 당연히 써야하는 거 아닌가?

    이미 늦었지만 본인도 많은 이유로 관리하기 너무 힘들다.

    내가 느낀 것들을 되물림하면 안되기 때문에 다른 사람을 위해서라도 Github을 써야겠다는 생각이 들었다.

    이번에 고객 정보를 이용해 Github 계정을 하나 만들었다.

    이야기가 너무 길어지고 딴 길로 가는 느낌도 들겠지만 핵심을 말하기 위해서였다.


    파란색 글씨가 보이는가? 핵심은 현재 하나의 서버에서 서로 다른 Github 계정을 사용할 것이다.

    1. 개인적인 공부를 관리하는 github 계정.

    2. 고객 정보를 이용해 새로 만들어진 github 계정.


    하지만 아무런 설정 없이 이렇게 사용하는 것은 불가능하다.

    Github 자체에서 SSH key를 중복으로 사용할 수 없기 때문이다.


    그렇다면 이제 Github에서 SSH key를 여러 개 사용하여 관리하는 법을 알아보자.

    크게 4가지로 볼 수 있다.


    1. ssh key 생성

    2. ssh config 파일 설정

    3. git config 파일 설정

    4. 테스트


    위의 순서대로 자세히 시작해보자.


    $ ssh-keygen -t rsa -C 'me@example.com'


    위 명령어로 계정에 대한 ssh key를 만들 수 있다.

    email에는 Github 계정을 만들 때 등록한 email을 사용하면 된다.

    위 명령어를 통해 아래와 같은 메시지가 나올 것이다.


    Generating public/private rsa key pair.

    Enter file in which to save the key (/root/.ssh/id_rsa):


    /root/.ssh/ 경로에 id_rsa 키를 만든다는 것이다.

    id_rsa는 디폴트 이름이라고 생각하면 된다.

    하지만 디폴트 이름의 키를 아마 사용하고 있다면 덮어씌여지기 때문에 당황할 것이다.

    당황하지말자.

    엔터를 치면 덮어씌워지고, 텍스트를 입력하면 새로운 이름으로 만들 수 있다.

    우리는 여러개를 만들테니 구분지어 만들자.


    Generating public/private rsa key pair.

    Enter file in which to save the key (/root/.ssh/id_rsa):id_rsa_me


    그렇다면 id_rsa_me, id_rsa_me.pub 생성된 파일이 보여진다.

    그 후 다른 계정의 ssh key 하나 더 만들어보자.

    위와 같이 똑같이 하면 된다.


    $ ssh-keygen -t rsa -C 'work@example.com'

    Generating public/private rsa key pair.

    Enter file in which to save the key (/root/.ssh/id_rsa):id_rsa_work


    /root/.ssh/ 경로에는 생성한 id_rsa_me, id_rsa_me.pub, id_rsa_work, id_rsa_work.pub 파일이 보여진다.


    그 후 생성한 ssh key들을 추가하고 저장해주어야한다.


    $ ssh-add ~/.ssh/id_rsa_me // 추가

    $ ssh-add ~/.ssh/id_rsa_work // 추가

    $ ssh-add -l // 저장


    이제는 Github에서 각각의 ssh key로 접근할 수 있게 해줘야한다.

    이 작업을 위한 config 파일을 직접 만들어줘야한다.


    $ touch ~/.ssh/config


    이제 만들어진 config 파일을 조작하면 된다.


    # me account

    Host github.com-me

    HostName github.com

    User git

    IdentityFile ~/.ssh/id_rsa_me


    # work account
    Host github.com-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_work


    중요한 건 Host, IdentityFile이다.

    말그대로 Host는 접속 주소라고 보면 되고, IdentityFile은 ssh key의 경로라고 보면 된다.


    마지막으로 git 저장소가 셋팅된 /.git 경로를 가보자.


    $ git remote -v

    origin git@github.com:{GithubID}/{RepositoryName}.git


    remote 주소를 위에서 ~/.ssh/config 파일의 host 처럼 변경해줘야한다.
    .ssh 경로에 config 파일을 만들어준 것처럼 .git 경로에도 비슷한 작업을 해줘야한다.
    하지만 .git 경로에는 config 파일이 존재한다.
    열어보면 아래와 같은 형식을 볼 수 있다.

    [remote "orgin"]

    url = git@github.com:{GithubID}/{RepositoryName}.git


    이제 각각의 .git/config 파일을 .ssh/config 파일에 설정했던 Host로 바꾸어 주면 된다.


    me 계정이 사용할 .git 경로 config 파일

    [remote "orgin"]

    url = git@github.com-me:hotehrud/{RepositoryName}.git

    work 계정이 사용할 .git 경로 config 파일

    [remote "orgin"]

    url = git@github.com-work:company/{RepositoryName}.git


     config 파일의 파란색 글자는 Github의 ID라고 생각하면 된다.

    위와 같이 하면 설정이 끝났다.

    명령어를 통해 확인할 수 있다.


    $ ssh -T git@github.com-me

    Hi hotehrud! You've successfully authenticated, but GitHub does not provide shell access.



    $ ssh -T git@github.com-work

    Hi company! You've successfully authenticated, but GitHub does not provide shell access.


    위와 같이 나온다면 성공적으로 마쳤다.

    GitHub Help 페이지에 많은 이슈들이 설명되어 있으니 참고하면 좋다.


    Multiple GitHub Accounts & SSH Config

    http://stackoverflow.com/questions/3225862/multiple-github-accounts-ssh-config


    Multiple SSH keys settings for different github account

    https://gist.github.com/jexchan/2351996


    Github Help

    https://help.github.com/categories/authenticating-to-github/

    반응형

    댓글

Designed by Tistory.