[Git] 9.1. 인증 기능 살펴보기

업데이트:

카테고리:

태그: , , , ,

인증

Git에는 인증과 관련되어 credential.helper 옵션이 잇는데, 이 변수의 값과 동작 방식은 운영체제마다 다르다. 각각의 운영체제별로 차이점을 알아본다.


윈도우의 자격 증명(Credential) 관리

hello-git-cli 프로젝트를 열고 Git Bash를 실행한 뒤 옵션값을 살펴보자.

tmdgn@ASUSSH MINGW64 ~/Documents/hello-git-cli (master)
$ git config credential.helper
manager-core

tmdgn@ASUSSH MINGW64 ~/Documents/hello-git-cli (master)
$ git config --local credential.helper

tmdgn@ASUSSH MINGW64 ~/Documents/hello-git-cli (master)
$ git config --global credential.helper

tmdgn@ASUSSH MINGW64 ~/Documents/hello-git-cli (master)
$ git config --system credential.helper
manager-core

위의 코드를 실행한 결과이다.

image

credential.helper 옵션의 값이 manager-core이고 시스템 옵션으로 설정한 값이라는 것을 CLI를 통해서 확인할 수 있다. manager 값 외에도 cache 또는 store 값도 올 수 있는데 윈도우에서는 manager를 사용하는 것이 일반적이다. 이 값이 manager로 설정되어 있는 경우 git은 윈도우 OS에서 제공하는 자격 증명 관리자에 사용자 인증 관련 정보를 저장한다.

자격 증명 관리자는 윈도우 검색창에서 ‘자격’까지 입력하면 찾아서 실행할 수 있다.

image

[windows 자격 증명]에 GitHub 아이디와 패스워드가 저장된다. 실습을 하며 이용했던 git, sourcetree 등의 여러 사이트와 함께 개인적인 아이디/패스워드가 들어간 프로그램들이 몇몇 보인다.

윈도우 자격 증명 관리자는 그다지 사용하기 편리한 프로그램은 아닌데, 다행히도 소스트리가 자격 증명 관리자를 더 쉽게 사용할 수 있도록 도움을 준다고 한다.

중요한 것은 A의 계정에서 B의 프로젝트를 푸시하려고 할 때 오류가 발생할 수 있다. 때문에 자격 증명 관리자에서 꼼꼼하게 계정을 제거해야 오류가 발생하지 않는다.

소스트리 [도구-인증-계정]의 사용자 중 맞는 사용자를 선택해서 [설정 초기화] 버튼을 누르거나, [도구-인증-계정]의 불필요한 사용자를 삭제하는 방법으로 손쉽게 계정을 관리할 수 있다.


맥 PC에서 인증 관련 사용자 옵션

앞으로도 Window를 계속 사용할 거라는 보장이 없다. 회사 업무 환경에 따라 맥 OS가 필요하다면 맥에 대해서도 알고 있을 필요가 있기 때문에 추가로 정리한다.

맥의 경우 역시 윈도우와 크게 다르지 않다. 기본적으로 osxkeychain을 사용한다.

$ git config --local credential.helper
$ git config --global credential.helper
$ git config --system credential.helper
osxkeychain

사용자의 PC 상태에 따라 달라질 수 있으나, 기본적으로 맥에서 사용자 인증을 관리해주는 osxkeychain이 git의 인증 관리에도 사용된다.


리눅스

보통 리눅스는 서버 OS로 사용하는 경우가 많다.

$ git config --local credential.helper
$ git config --global credential.helper
$ git config --system credential.helper

기본 설정에서처럼 credential.helper에 아무 옵션이 지정되어 있지 않을 경우 매번 사용자 ID/PW를 물어본다. 이는 상당히 번거로운 과정이기 때무누에 보통 cache 옵션, 또는 store 옵션을 지정한다.


1. 리눅스에서 cache 옵션 사용하기

cache 옵션을 사용하면 cache 인증 모드가 되는데, 이 경우 지정한 시간만큼 사용자 ID/PW를 임시로 저장한다.

$ git config credential.helper "cache --timeout=30"

# 30초간 ID/PW 저장

$ git push

# 최초 1회 ID/PW 입력

Username for 'https://github.com': Orchemi
Password for 'https://Orchemi@github.com': ---
Everything up-to-date

$ git push

# 다시 입력해보면 ID가 저장되어 있음

Everything up-to-date

$ git push

# 30초 지나서 다시 시도

Username for 'https://github.com':

credential.helper 옵션의 값을 ‘cache –timeout=30’으로 설정하였다. 이는 30초 동안 저장을 하겠다는 의미이고, 보통 3,600초, 즉 1시간 정도 저장하도록 설정하는 경우가 많다.


2. 리눅스에서 store 옵션 사용하기

사용자 아이디와 패스워드를 임시 저장하는 cache와 달리 store는 한 번 입력한 IP/PW를 영구적으로 저장한다.

$ git config credential.helper store

# 인증 방식 store로 변경

$ git push

# 처음 입력한 ID/PW 저장

Username for 'https://github.com': Orchemi
Password for 'https://Orchemi@github.com': ---
Everything up-to-date

$ git push

# 이후로는 ID/PW 물어보지 않음

Everything up-to-date

store 옵션은 사용하기에 따라서 상당히 편리할 수 있는 명령이다. 하지만 한 가지 문제점으로는 사용자의 ID/PW가 홈 폴더의 .git-credentials 라는 파일에 저장된다는 것이다. 따라서 PW의 노출이 꺼려진다면 store 옵션은 지양하는 것이 좋다.


저장된 PW를 삭제하고 다시 원래대로 매번 PW를 입력하려면 어떻게 해야 할까?

$ git config --unset credential.helper

# 옵션 삭제

$ file ~/.git-credentials

# 인증 파일 정보 확인

/root/.git-credentials: ASCII text

$ rm ~/.git-credentials

# 인증 파일 삭제

credential.helper 옵션을 삭제하였지만 여전히 인증 정보 파일이 남아 있는 것을 알 수 있다. 때문에 store 옵션을 더 이상 사용하지 않는다면 rm 명령을 이용해서 인증 파일 정보도 완전히 삭제한다.


Reference

  • 팀 개발을 위한 Git GitHub 시작하기, 한빛미디어, 정호영,진유림

댓글남기기