들어가며...
git 명령어를 이용하여 Github에 있는 소스를 clone, push, pull 등을 수행하려면 매번 사용자 아이디와 비밀번호를 입력해주어야 합니다. (물론 private project일 경우이며 public project의 경우는 사용자 인증을 하지 않습니다.) 간간히 해당 작업을 수행하는 것이라면 별 문제 없겠지만 빈번해지기 시작하면 여간 번거로운 일이 아닙니다. 이를 해결하기 위해 사용자 아이디와 비밀번호로 인증을 수행하는 것이 아닌 ssh를 이용하여 사용자 인증을 수행하는 방법에 대해서 알아보도록 하겠습니다.
- Table of Contents
- 사용자 아이디 및 비밀번호로 사용자 인증
- ssh key 생성
- 사용자 컴퓨터에 ssh private key 등록
- Github에 ssh public key 등록
- ssh key를 이용한 사용자 인증
사용자 아이디 및 비밀번호로 사용자 인증
Github에는 기본적으로 https와 ssh 방식의 두 가지 clone URL이 존재합니다. 아무런 설정을 하지 않았을 경우 무심코 사용하는 clone URL은 https 방식입니다.
만약 사용자의 이름이 "user"이고 repository의 이름이 "demo-project"라고 가정할 경우 https방식과 ssh방식의 clone URL은 다음과 같은 형태로 제공합니다.
# 사용자명 : user
# repository 명 : demo-project
# https clone URL
# https://github.com/[사용자명]/[repository이름].git
https://github.com/user/demo-project.git
# ssh clone URL
# git@github.com:[사용자명]/[Repository명].git
git@github.com:user/demo-project.git
위에서도 언급하였듯이 https방식으로 Github의 소스를 접근하려면 명령어 수행 시마다 사용자 아이디와 비밀번호를 입력하여야 합니다.
● Github의 clone URL을 사용하여 소스 clone하기
$ git clone [Github clone url] |
ssh방식을 사용하면 위와 같이 Git 명령어를 수행할 때마다 사용자 아이디와 비밀번호를 입력하지 않아도 됩니다. ssh 방식으로 로그인을 하는 방법에 대해서 차근차근 살펴보도록 하겠습니다.
ssh key 생성
● ssh 파일 경로 확인
ssh key는 기본적으로 본인의 root 디렉토리의 ".ssh" 폴더에 존재하게 됩니다. 아래의 명령어를 입력하여 ssh가 저장되는 경로로 이동하여 현재 생성된 key 파일을 확인합니다.
$ cd ~/.ssh
$ ls -al
만약 해당 디렉토리가 존재하지 않는 다면 아래의 명령어를 이용하여 해당 폴더를 생성하면 됩니다.
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
● ssh key 생성
ssh key생성은 "ssh-keygen" 명령어를 사용하여 생성합니다. (리눅스, 맥 기준) ssh key 생성은 명령어 한번으로 생성이 가능하며 그 명령어는 다음과 같습니다.
$ ssh-keygen -t rsa -b 4096 -C "email@example.com" -f "id_rsa_github"
- -t : 키생성 암호화 방식 지정합니다. > dsa, ecdsa, ed25519, rsa 등을 지원하며 보통은 rsa를 사용합니다.
- -b : 키파일의 bit를 지정합니다.
- -C : comment로 생성된 키파일에 해당 주석이 달리게 됩니다. 어디서 사용하려고 생성한 키파일인지 식별할 수 있는 내용을 적이시면 됩니다.
- -f : 파일이름을 지정합니다. 아무것도 지정하지 않을 경우 디폴트 값으로 "id_rsa"로 생성됩니다.
추가로 ssh key를 생성할 때 비밀번호를 물어보는데 이를 설정하면 https방식과 동일하게 ssh 방식을 사용하여 Git 명령어를 사용할 때마다 ssh key파일의 비밀번호를 물어보게 됩니다. 따라서 여기서는 비밀번호 설정을 하지 않습니다. 비밀번호를 설정하지 않으려면 비밀번호 설정 부분에서 Enter로 패스 하시면 됩니다.
아래는 위 명령어를 사용하여 ssh key 파일을 생성하는 과정입니다.
여기서 두개의 파일이 생성된 것을 확인하실 수 있습니다. ".pub" 이라고 되어 있는 파일은 공개키라고 하며 보통 외부로 배포되는 키파일이며 "id_rsa_github"는 개인키로 반드시 본인만 소지하고 있어야 합니다.
- 공개키 : 암호화 수행. 즉, 복호화는 불가
- 개인키 : 복호화 수행
사용자 컴퓨터에 ssh private key 등록
ssh key를 생성하였으므로 개인키는 본인의 피시에 등록하고 공개키는 Github 사이트에 등록하여 주면 됩니다. 그럼 본인의 컴퓨터에 개인키를 등록하는 방법에 대해서 알아보도록 하겠습니다.
● ssh agent 실행 여부 확인
우선 다음 명령어를 이용하여 ssh agent가 실행하고 있는 지 확인합니다. 명령어 실행 후 ssh-agent의 PID가 확인되면 정상 동작하고 있는 것입니다.
$ eval "$(ssh-agent -s)"
Agent pid 86672 <== pid가 출력되면 정상 동작중임
● ssh key 등록
$ ssh-add ~/.ssh/id_rsa_github
위 명령어를 이용하여 ssh 개인키를 등록하는데 아래와 같은 Warning이 발생한다면 해당 파일의 권한을 변경하여 줍니다.
관리자만 읽기가 가능하도록 권한을 수정합니다.
$ chmod 400 ~/.ssh/id* <== 관리자 읽기만 가능토록 권한수정
아래는 ssh 개인키가 정상 등록되었을 경우의 결과 화면 입니다.
Github에 ssh public key 등록
본인의 피시에 ssh 개인키 등록은 마쳤으니 이제 Github에 생성한 ssh 공개키를 등록하는 방법에 대해서 알아보도록 하겠습니다.
1. Github 사이트로 이동합니다.
2. 로그인 후 오른쪽 상단의 사용자 아이콘 클릭 후 setting을 선택합니다.
3. 좌측 메뉴 중 "SSH and GPG keys" 메뉴를 선택합니다.
4. "New SSH key"를 선택합니다.
5. "Title" 항목에는 임의의 제목을 기입하고 Key 항목에는 생성한 "id_rsa_github.pub" 파일의 내용을 그대로 복사하여 줍니다.
6. 등록을 완료한 화면입니다.
ssh key를 이용한 사용자 인증
모든 설정을 완료하였습니다. 이제 Git 명령어를 이용하여 본인의 private 프로젝트를 ssh key파일 인증을 통하여 clone 해보도록 하겠습니다.
git clone을 수행하려면 remote URL이 필요합니다. Github에서 clone할 때 아래와 같이 해당 프로젝트 화면으로 이동하여 URL을 복사하여 사용하셨을 겁니다. 하지만 이는 앞서도 언급하였 듯이 https 인증으로 사용자 아이디와 패스워드를 요구합니다. 아래 그림에서 "Use SSH" 버튼을 클릭하면 우리가 원하는 ssh key 인증을 위한 URL을 표시하여 줍니다.
아래는 SSH URL을 표시하는 화면입니다.
위의 URL을 이용하여 git clone을 하면 더 이상 사용자의 아이디와 비밀번호를 물어보지 않습니다. 아래는 명령어와 결과 화면입니다.
$ git clone https://github.com/ykson/demo-project.git
아래 결과 화면처럼 사용자 아이디와 비밀번호를 묻지 않고 명령어 수행을 하고 있습니다.
마무리...
지금까지 git clone시 사용자 아이디 및 비밀번호로 인증하는 방식이 아닌 ssh key를 이용하는 방법에 대해 알아봤습니다. 생성한 개인키만 잘 관리하면 사용자 아이디 및 비밀번호 보다는 보안상에도 좋으며 사용성도 좋아지니 시간이 될 경우 시도해 보시는 것도 좋을리라 생각됩니다.
U2ful은 ♥입니다. @U2ful Corp.