반응형

Context

깃헙은 Repository에 Push, Clone 등의 액션을 취할 때 계정을 인증하게끔 되어 있다. public repository라면 설정에 따라 크게 상관없을 수 있으나 private repository 이거나 권한이 엄격히 관리되는 repository라면 인증이 필수적이다.

일반적으로 계정 인증은 계정명/패스워드로 이루어지지만 현재 깃헙에서는 이러한 방식의 인증을 사용할 수 없도록 제한하고 있다.

이를 대체할 수 있는 가장 대표적인 방법이 SSH 인증 방식인데, 많은 사람들이 하나 Mac에서 여러 깃헙 계정을 운영하는 것에 어려움을 겪는 것을 보고 글을 남겨본다. Windows & Linux는 기본적으로 되는 것 같으나 Mac에서는 추가적인 작업이 필요하다.

깃헙 SSH Key 등록

SSH Key를 발급하고 GitHub 계정에 등록하는 과정은 공식 문서(링크)에 자세히 나와있으니 간략하게만 다루겠다. 공식 문서의 과정 중 config 파일 설정은 잠시 생략해도 좋다.

  1. 터미널 실행
  2. GitHub email address를 포함해 아래 명령어 입력
    $ ssh-keygen -t ed25519 -C "your_email@example.com"​
  3. GitHub 계정에 SSH 공개키 등록: 링크

config 파일을 이용한 여러 계정 운용하기

하나의 계정에 대한 ssh 키를 발행하고, GitHub에 공개키 등록까지 마쳤다면, 이제 ssh config 파일을 작성해야 한다.

$ vi ~/.ssh/config

이 곳에 아래와 같은 형태로 작성해주면 된다.

Host github.com
    IdentityFile ~/.ssh/{앞서 생성한 SSH 키 이름}
    HostName github.com
    User {GitHub 사용자명}
    
    
[작성 예시]
Host github.com
    IdentityFile ~/.ssh/github_960813
    HostName github.com
    User 960813

여기까지 완료되었다면 SSH 연동이 완료된 것이다.

이제 Repository를 클론해보자. 일반적인 HTTPS 방식이 아니라 SSH 방식을 사용해야 한다. GitHub Web에서는 Code 버튼을 눌러 URL을 찾을 수 있다.

$ git clone git@github.com:ev-incentive-board/system.git

정상적으로 클론 되었을 것이다.

우리는 여기서 Repository의 URL을 잘 살펴보아야 한다. URL은 크게 3가지 영역으로 구분되는데 이는 다음과 같다.

  • git: SSH 사용자가 git 임을 명시
  • @github.com: SSH를 이용해 액세스하려는 Host
  • ev-incentive-board/system.git: Repository 위치

@github.com 이 핵심이다. 이는 앞서 작성한 config 파일의 Host에 해당하는 부분이다. 즉, 여러 인증서를 사용하려면 이 부분을 적절히 바꿔 원하는 IdentifyFile을 사용하도록하면 된다.

Host github-960813
    HostName github.com
    IdentityFile ~/.ssh/github_960813
    User 960813

Host github-xxxxxxx
    IdentityFile ~/.ssh/github_xxxxxxx
    HostName github.com
    User xxxxxxx

config 파일을 위와같이 설정했다면, repository의 remote-url을 git@github-960813:..... / git@github-xxxxxxx:.... 꼴로 사용하면 정상 동작하는 것을 확인할 수 있을 것이다.

이미 local에서 사용하고 있는 repository라면 아래 명령어를 이용하자.

$ git remote set-url origin git@github-xxxxxx:....
반응형

'Git' 카테고리의 다른 글

여러 깃헙 계정을 SSH 방식으로 사용하는 방법  (0) 2021.09.12
잘못된 내용이 있다면, 다른분들에게 전달되지 않게끔 댓글로 지적 부탁드립니다!

+ Recent posts