Introduction
Git에서는 클라이언트~서버 사이에서 전송되는 데이터를 암호화 시키기 위해 (특히 private 저장소인 경우), 여러가지 통신 규약 (Communication protocol)을 사용하고 있다.
이 중 가장 대표적이고 많이 쓰이고 있는 것이 바로 HTTPS와 SSH 프로토콜이다.
HTTPS & SSH protocol with Git
일반적으로는, HTTPS 프로토콜을 이용하는 편이 훨씬 편리하기 때문에 대부분의 독자들은 HTTPS 프로토콜을 이용해 원격 저장소를 클론하고 작업 내용을 공유할 것이다. 로컬 작업 환경 (클라이언트)에 private key를 저장해 두어야 하는 SSH 프로토콜과 달리, HTTPS 프로토콜을 이용할 때에는 오직 Username과 Password만을 제공해 주면 pull, push, fetch 등의 작업을 문제 없이 수행할 수 있다.
Private key를 가지고 있지 않아도 된다는 말은, Git 등의 계정 정보만 있다면 어디서든 원격 저장소에 접속하고 내용을 추가할 수 있다는 뜻이다! 하지만 반대로 계정 정보를 도난당하면 어디서든 당신의 리포지토리를 건드릴 수 있다는 뜻이 된다...
이와 별개로, HTTPS 프로토콜은 매우 보편적인 프로토콜이며 대부분의 방화벽을 무리 없이 통과할 수 있다는 장점과, 리포지토리 세팅이 비교적 간단하다는 장점 덕분에 Git에서는 굉장히 자주 쓰이고 있다.
하지만 HTTPS 프로토콜을 사용해 깃 서버를 관리할 때 생기는 하나의 문제는, clone, pull, push 등 저장소에 대해서 특정 작업을 하려고 할 때마다 유저 이름과 비밀번호를 요구한다는 점이다. 막상 코드 작업을 하다 보면 은근히 이 횟수가 많아서, 입력이 꽤 귀찮게 느껴질 것이다. 자동으로 계정 인증을 해결해 주는 장치는 없을까?
Store HTTPS credential on Git
이 귀찮음을 해결하기 위해, 깃은 Credential-Helper 시스템이란 것을 제공하고 있다. 이를 이용하면 패스워드 (Credential, 혹은 인증 정보) 를 캐시해 놓고 재사용하거나, 아예 SSH private key 처럼 credential을 텍스트 파일의 형태로 저장을 해 놓고 사용할 수 있다. 한번 간단히 정리해 보자.
해당 repository 경로에서 credential 저장
$ git config credential.helper store
위 명령어는 인증정보 텍스트 파일을 ~/.git-credentials 위치에 저장한다. 저장해 놓은 이후에는 명령어를 실행한 리포지토리 경로에서 원격 저장소 관련 작업 시 일일이 유저네임과 패스워드를 제공해 주지 않아도 된다.
$ git config credential.helper 'store --file ~/.my-credentials'
만약 디폴트가 아닌 다른 특정한 위치에 인증정보를 저장하고 싶다면, 위와 같이 --file <path> 옵션을 뒤에 붙여주면 된다.
일정 시간 동안 해당 경로에서 credential 저장
$ git config credential.helper cache
만약 아예 파일로 저장하고 싶지 않고, 일정 시간 동안만 RAM에 인증정보를 올려놓고 싶다면, cache 명령어를 사용하면 된다. 위 명령어는 900초==15분 동안 인증정보를 메모리 상에서 유지시킨다.
$ git config credential.helper 'cache --timeout=3600'
위와 같이 유지 시간을 초 단위로 따로 지정해 줄 수도 있다.
모든 git 활동에 대해 전역으로 credential 저장
$ git config credential.helper store --global
만약 특정한 리포지토리 경로에서만이 아닌, 로컬 환경의 모든 git 활동에 대해서 본인의 인증정보를 저장해 놓고 쓰고 싶다면, 위와 같이 --global 옵션을 붙여주면 된다. 당연히 같은 로컬 환경을 여러 명이 공유하고 있는 상황 (한 서버에 여러 명이 SSH 접속해 작업을 한다던지) 이라면 글로벌 옵션은 지양하도록 하자.
사실 이 명령어들은 평소엔 까먹고 있다가, 필요할 때만 다시 찾아본 후 다시 까먹는 경우가 잦아서 (....) 본인도 다시 내용을 찾기 쉽도록 정리해볼 겸 글을 작성했다. 읽는 사람들에게도 도움이 되면 좋겠다.
아래는 참고할 만한 내용들이다.
References
Git 서버 - 프로토콜
https://git-scm.com/book/ko/v2/Git-%EC%84%9C%EB%B2%84-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C
Git 도구 - Credential 저장소
Git Credential Manager for Windows
https://github.com/Microsoft/Git-Credential-Manager-for-Windows
HTTPS vs SSH in Git