HTTPS

1. 기본적인 방법: username, password 직접 입력

$ git clone https://github.com/dolsup/blog.git
Cloning into 'blog'...
Username for 'https://github.com': 
Password for 'https://github.com': 

private 레포지토리를 아무런 인증 정보 없이 https를 통해 클론하려 하면 위와 같이 username과 password를 요구합니다. 둘 다 잘 입력하면 문제없이 클론할 수 있습니다. 다만 push, pull 할 때마다 매번 입력해주어야 합니다.

2. 패스워드 대신 Personal Access Token 사용

GitHub는 커맨드라인이나 API에서 패스워드 대신 사용할 수 있는 PAT(Personal Access Token)를 지원합니다. 보안상의 이유로 1년동안 사용되지 않은 PAT는 자동적으로 삭제됩니다.

GitHub의 Settings > Developer Settings > Personal access tokens에서 생성할 수 있습니다.

토큰은 여러 개를 생성할 수 있으며 토큰별로 세부적인 권한 설정이 가능합니다.

✨Tips

Git credentials cache

👉참고: GitHub Docs - Caching your GitHub credentials in Git
매번 입력하는 대신, 인증 정보를 캐시할 수 있습니다. macOS에서는 Apple Keychain을 사용할 수 있습니다.

macOS

# osxkeychain helper가 설치되어있는지 확인
$ git credential-osxkeychain
> Usage: git credential-osxkeychain <get|store|erase>

# osxkeychain helper 사용하도록 설정
$ git config --global credential.helper osxkeychain

Linux

$ git config --global credential.helper cache

# 캐시 유효기간을 1시간=3600초로 변경
$ git config --global credential.helper 'cache --timeout=3600'

URL에 Basic 인증 정보 삽입 (주의)

👉참고: MDN Web Docs - HTTP 인증

git clone https://[username]:[password]@github.com/[username]/[repository name].git

remote URL에 평문 패스워드가 포함된 Basic 인증 정보를 넣으면 그대로 git config에 저장되기 때문에 보안에 취약하므로 권장되지 않습니다.

git clone https://[username]@github.com/[username]/[repository name].git

하지만, 여러 인증 정보를 캐시해서 사용할 때는 위와 같이 username만 URL에 포함해서 해당 유저로 인증하도록 힌트를 줄 수 있습니다.

SSH를 이용한 연결

git clone git@github.com:dolsup/blog.git
# 또는
git clone ssh://git@github.com:dolsup/blog.git

키 생성

먼저 SSH를 위한 공개키-비밀키 쌍이 있어야 합니다. ~/.ssh/id_rsa~/.ssh/id_rsa.pub이 없다면 만들어야 합니다.
👉참고: SSH 공개키 만들기
👉참고: Generating a new SSH key and adding it to the ssh-agent

# TL;DR
$ ssh-keygen

GitHub 계정에 SSH 공개키 등록

생성된 공개키의 기본 저장 위치는 ~/.ssh/id_rsa.pub입니다. 이 공개키를 GitHub의 Settings > SSH and GPG keys > New SSH Key에서 등록합니다.

GitHub repository에 Deploy keys 등록

👉참고: GitHub Docs - Managing deploy keys

Repository별로 Settings > Deploy keys에서 Deploy key를 등록해서 해당 repo에만 접근 권한을 부여할 수도 있습니다. 서버에서 특정 레포지토리에만 접근하면 되는 경우에 유용합니다. 권한을 세부적으로 관리할 수는 없고 쓰기 권한을 부여할지 여부만 설정할 수 있습니다.

Remote URL 확인 및 변경

# remote URL 확인
$ git remote -v
> origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
> origin  git@github.com:USERNAME/REPOSITORY.git (push)

# SSH로 변경
$ git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

# HTTPS로 변경
$ git remote set-url origin https://github.com/USERNAME/REPOSITORY.git