콘텐츠로 건너뛰기

GitHub 사용을 위한 SSH 인증(키 생성 및 등록)

GitHub에서 소스를 업로드 하거나 private repository에 접근하려면 인증이 필요합니다. GitHub에서 패스워드 기반 인증은 지원하고 있지 않기에 대부분 SSH 인증을 사용합니다. 이 포스팅에서는 SSH 키 생성 및 GitHub에 SSH Key를 등록하여 SSH 인증하는 방법에 대해서 알아보도록 하겠습니다.

왜 SSH 인증을 사용하나요?

GitHub에서 소스를 업로드 하거나 private repository에 접근하려면 인증이 필요합니다. GitHub에서 보안상의 이유로 패스워드 인증 방식을 . 더이상 지원하지 않으며, 대신 personal access token 또는 SSH 방식을 사용해 인증을 수행해야 합니다.

git 패스워드 방식 미지원 스크린샷
패스워드 방식은 더 이상 지원하지 않는다

SSH는 Secure Shell의 약자로, 네트워크 상의 다른 컴퓨터에 안전하게 접속하고 명령을 실행할 수 있게 해주는 보안 프로토콜입니다. SSH 프로토콜은 대칭키 암호화 방식 또는 비대칭키 암호화 방식을 사용하여 보안 채널을 제공하는데, GitHub의 경우 비대칭키 암호화 방식(=공개 키 인증 방식)을 지원하고 있습니다.

공개키 인증 방식을 사용하려면 한 쌍의 공개키와 개인키를 만들어야 합니다. 공개키는 누구나 사용할 수 있으며 보통 서버에 등록하는 용도로 사용합니다. 개인키는 공개키와 반대로 반드시 나만 사용할 수 있도록 안전하게 보관해야 하는 파일입니다.

SSH 공개키와 개인키 만들기

SSH 키를 만들기 전에 기존에 생성한 키가 있는지 확인합니다. ~/.ssh 폴더에 id_xxxxid_xxxx.pub 파일이 있다면, 이미 키를 생성한 적이 있는 것입니다. 이 경우 기존 키에 덮어쓰기 하거나 다른 경로에 새 키를 생성할 수 있습니다. ( 윈도우는 command 말고 Git Bash를 사용해야 합니다. )

cd ~/.ssh

이제 키를 생성해보겠습니다. 터미널을 열고 아래 명령어를 입력합니다.

ssh-keygen -t ed25519 -C "your_email@domain.com"

ed25519 방식으로 키 생성이 안되면 RSA 방식으로 키를 생성합니다.

ssh-keygen -t RSA -b 4096 -C "your_email@domain.com"

실제 키를 생성해보겠습니다.

ssh-keygen -t ed25519 -C "whalec-io@daum.net"

첫 번째로 키의 저장 경로를 물어보는데, 기본 경로를 사용하려면 그냥 Enter를 누르면 됩니다.

실행 결과
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/eden/.ssh/id_ed25519):

두 번째로 패스워드를 설정할지 묻는데, 보안을 위해 패스워드를 설정하는 것을 권장합니다.

실행 결과
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

이 과정을 마치면 SSH 키가 생성됩니다. id_ed25519는 개인키로 id_ed25519.pub는 공개키로 생서됩니다.

실행 결과
Your identification has been saved in /Users/eden/.ssh/id_ed25519
Your public key has been saved in /Users/eden/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:+6K1pSxlGyqKX3fipMgolhCfm/+i1DN2ew/LkGj2RV4 whalec-io@daum.net
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|                 |
|                 |
|.                |
| o .    S E      |
|. o. . ++o       |
|. ooX B+Bo.      |
|.Bo*oXoX+B       |
|=.*+o+*+*oo      |
+----[SHA256]-----+

GitHub 공개키 등록

생성된 공개키를 GitHub에 등록하려면 먼저 공개키를 클립보드에 복사해야 합니다. 아래 명령어를 사용하여 복사할 수 있습니다.

# macOS
pbcopy < ~/.ssh/id_ed25519.pub

# Windows
clip < ~/.ssh/id_ed25519.pub

그 후 GitHub에 로그인하여, 우측 상단의 프로필 아이콘을 클릭하고 Settings > SSH and GPG keys로 이동합니다. New SSH key 버튼을 눌러 새 키를 추가합니다. Title에는 키를 구분할 수 있는 이름을, Key에는 복사한 공개키를 붙여넣기 하면 됩니다.

SSH 인증을 위한 공개키 입력 - GitHub

GitHub에 공개키를 등록을 완료했습니다.

SSH 접속 설정

이제 명시적으로 SSH 접속 설정을 해보겠습니다. ~./ssh/config 파일에 아래 내용을 추가해주세요. 만약 파일이 없으면 파일을 생성합니다.

Host github.com
  IdentityFile ~/.ssh/id_ed25519
  User git

SSH 인증

이제 GitHub 저장소에 SSH로 접근할 수 있습니다. 소스 코드를 업로드 하거나 private repository에 접근할 수 있습니다.

private repository를 복제해보겠습니다. 저장소 SSH 주소를 복사한 후 아래 명령어로 클론합니다.

git clone git@github.com:bigsprout/bts-api-server.git
실행 결과
Cloning into 'bts-api-server'...
Enter passphrase for key '/Users/eden/.ssh/id_ed25519':
remote: Enumerating objects: 993, done.
remote: Counting objects: 100% (397/397), done.
remote: Compressing objects: 100% (295/295), done.
remote: Total 993 (delta 190), reused 253 (delta 94), pack-reused 596
Receiving objects: 100% (993/993), 316.11 KiB | 614.00 KiB/s, done.
Resolving deltas: 100% (530/530), done.

저장소 복제 과정에서 개인키의 패스워드를 입력해야 하는데, 이는 키를 생성할 때 설정한 패스워드를 입력하면 됩니다. 인증이 완료되면 정상적으로 저장소가 복제됩니다.

이제 SSH 인증으로 GitHub을 사용할 수 있습니다.

SSH Agent에 키 등록(개인키 패스워드 입력 생략)

매번 git clone이나 git push를 할 때 개인키 패스워드를 입력하는 과정이 번거로울 수 있습니다. 이를 생략하려면 SSH Agent에 키를 등록하면 됩니다.

먼저 SSH Agent가 실행 중인지 확인합니다.

ssh-add -l

위와 같이 명령어 입력했는데 Error connecting to agent: Connection refused 오류가 발생할 경우 ssh-agent가 실행되어 있지 않은 상태입니다. 이 경우 ssh-agent를 실행합니다.

# ssh-agent 실행
eval "$(ssh-agent -s)"

만약 The agent has no identities. 와 오류가 발생한다면 ssh 키가 등록되지 않아서 발생하는 문제로 키를 등록하면됩니다.

# ssh 키 등록
ssh-add ~/.ssh/id_ed25519
실행 결과
Enter passphrase for /Users/eden/.ssh/id_ed25519:
Identity added: /Users/eden/.ssh/id_ed25519 (whalec-io@daum.net)

개인키 생성할 때 입력한 패스워드를 입력하면 ssh-agent에 SSH 키를 정상적으로 등록할 수 있습니다.

이제 패스워드 입력 없이 git을 사용할 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

목차 보기