콘텐츠로 건너뛰기

SSH Key 생성 및 GitHub 등록

GitHub을 사용하려면 먼저 SSH 키를 등록해야 합니다. 단순하게 Git을 로컬 저장소로 사용하거나 public repository를 복제하여 사용한다면 큰 문제가 없으나 private repository를 사용하거나 소스를 업로드해야 하는 경우에는 인증이 필요하기 때문에 SSH 키를 사용해야 합니다. 이번 포스트에서는 SSH Key 생성 및 GitHub 등록 방법에 대해서 알아보도록 하겠습니다.

왜 SSH 키를 사용하나요?

GitHub에서 private repository에 접근하는 경우 인증이 필요합니다. GitHub에서 보안상의 이유로 패스워드 방식의 인증을 더 이상 지원하고 있지 않아서 personal access token 또는 SSH 방식으로 인증을 해야 합니다.

Git Clone 시 패스워드 방식 미지원
패스워드 방식은 더 이상 지원하지 않는다

이러한 이유로 인증을 받기 위해서 SSH 인증을 사용합니다. SSH는 Secure Shell의 줄임말로 네트워크 상의 다른 컴퓨터에 접속하고 명령을 수행할 때 사용하는 보안 프로토콜로 여러가지 인증 방식이 존재하지만 GitHub 에서는 공개키 인증 방식을 사용합니다.

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

SSH 공개키와 개인키 만들기

SSH 공개키와 개인키를 만들어보겠습니다. Windows에서는 Git Bash를 사용하고 macOS에서는 터미널을 사용합니다.

SSH 키를 만들기 전에 기존에 생성한 키가 있는지 확인합니다. 만약 동일한 키가 있다면 기존 키에 덮어쓰기 할 수 있습니다.

$ cd ~/.ssh
$ ls
...

만약 해당 폴더가 존재하고 하위에 id_xxxx 와 id_xxxxx.pub 형태의 파일이 존재한다면 예전에 키를 생성한 적이 있는 것입니다. 이 경우 키를 다른 폴더로 지정하거나 키를 재 생성하여 기존 키에 덮어쓰기 합니다.

만약 폴더가 없거나 파일이 없다면 ssh-keygen 으로 파일을 생성합니다.

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

# 만약 ed25519로 키 생성이 되지 않는다면 RSA 로 생성한다.
$ ssh-keygen -t RSA -b 4096 -C "your_email@domain.com"

-C 옵션의 your_email@domain.com 부분을 자신의 이메일로 변경하여 생성합니다. 만약 ed25519 방식으로 키 생성이 되지 않는다면 RSA 옵션으로 변경해 SSH 키를 생성합니다.

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

$ ssh-keygen -t ed25519 -C "whalec-io@daum.net"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/studiogs/.ssh/id_ed25519):

첫 번째로 키를 저장 경로를 물어봅니다. 다른 경로로 저장할 수 있지만 여기서는 기본값을 사용하기 위해서 아무것도 입력하지 않고 Enter 키를 입력합니다.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

두 번째로 SSH 키의 패스워드를 지정할지 물어봅니다. 패스워드를 사용하지 않으려면 아무것도 입력하지 않고 Enter 키를 누르면되는데 저는 패스워드 설정을 권장합니다.

Your identification has been saved in /Users/studiogs/.ssh/id_ed25519
Your public key has been saved in /Users/studiogs/.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]-----+

다음과 같이 SSH 키가 생성되었습니다. id_ed25519는 개인키로 id_ed25519.pub는 공개키로 생성되었습니다.

GitHub 공개키 등록

위에서 생성한 공개키를 클립보드에 복사합니다. 아래 명령을 수행하여 복사하거나 공개피 파일을 열어 내용을 복사해도 됩니다.

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

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

GitHub에 로그인 하고 오른쪽 상단의 프로필을 클릭하고 Settings > SSH and GPG keys 메뉴를 차례대로 클릭합니다. [New SSH key] 버튼을 눌러 공개키를 추가합니다.

Title 항목에는 구분하기 편리한 이름을 입력하면 되고 Key 항목에 복사한 공개키를 붙여넣기 합니다.

Add new SSH Key 화면

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

SSH 접속 설정

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

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

GitHub 접근

복제하고자 하는 저장소의 SSH 주소를 복사합니다.

$ git clone git@github.com:bigsprout/bts-api-server.git
Cloning into 'bts-api-server'...
Enter passphrase for key '/Users/studiogs/.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.

저장소 복제 시 개인키(id_ed25519)의 패스워드를 확인합니다. 개인키 생성할 때 입력한 패스워드를 입력하면 인증이 완료되고 정상적으로 저장소를 복제할 수 있습니다.

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

SSH Agent에 키 등록(패스워드 생략)

git clone 또는 git push 시 매번 패스워드를 입력하려면 번거롭습니다. ssh-agent에 키를 등록하여 패스워드 입력 과정을 생략하겠습니다.

$ ssh-add -l

위와 같이 명령어 입력했는데 Error connecting to agent: Connection refused 와 같은 오류가 발생할 경우 ssh-agent가 실행되어 있지 않은 상태입니다. 이 경우 ssh-agent를 실행합니다. 만약 The agent has no identities. 와 같은 오류가 발생한다면 ssh 키가 등록되지 않아서 발생하는 문제로 키를 등록하면됩니다.

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

SSH 키를 등록합니다.

# ssh 키 등록
$ ssh-add ~/.ssh/id_ed25519
Enter passphrase for /Users/studiogs/.ssh/id_ed25519:
Identity added: /Users/studiogs/.ssh/id_ed25519 (whalec-io@daum.net)

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

이제 git clone을 하면 더 이상 패스워드를 물어보지 않습니다.

참고 자료

답글 남기기

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