2 분 소요


많은 Git 서버는 SSH 공개키(Public Key)를 사용하여 인증할 수 있습니다.
이 글에서는 SSH 공개키를 사용하여 인증하는 방법을 소개합니다.

다음은 공개키 인증 과정을 설명하는 그림입니다:

Public-key authentication

Image from Public-key authentication of the SSHL The Secure Sheel - The Definitive Guide




대칭 vs 비대칭 암호화

암호화(Cryptography)는 정보를 인코딩(Encoding, 부호화)하는 프로세스입니다.
이 프로세스는 평문(Plaintext)을 암호문(Ciphertext)이라는 대체 형식으로 변환합니다.
이상적으로는 승인된 당사자만 암호문을 다시 평문(Plaintext)으로 해독하고 원본 정보에 접근할 수 있습니다. 암호화는 그 자체로 간섭을 방지하는 것이 아니라 잠재적인 인터셉터가 컨텐츠를 이해할 수 없도록 만듭니다.
평문(Text)을 암호문(Ciphertext)으로 만드는 과정을 암호화(Encryption)라고 하고, 반대의 과정을 복호화(Decryption)라고 합니다.

암호화에는 대칭(Symmetric) 방식과 비대칭(Asymmetric) 방식이 있습니다.
대칭 방식은 하나의 키를 사용하여 암호화와 복호화를 하기 때문에 간단합니다.

Symmetric Encryption

Image from How to generate secure SSH keys

비대칭 방식은 공개키 암호화라고도 하며 공개키(Public Key), 개인키(Private Key) 두 개의 키를 사용합니다.
공개키로 암호화된 메시지는 개인키로만 복호화할 수 있고, 개인키로 암호화된 메시지는 공개키로 복호화할 수 있습니다. 공개키는 공개적으로 사용 가능하고 인터넷을 통해 전달할 수 있으므로 보안이 필요하지 않습니다. 비대칭 키는 통신 중에 전송되는 정보의 보안을 보장하는 데 훨씬 더 안전합니다.

Asymmetric Encryption

Image from How to generate secure SSH keys


이제 SSH 공개키를 사용하여 비밀번호 입력없이 Git 서버에 인증하는 방법을 설명하겠습니다.




준비하기

다음 과정은 Linux 혹은 Windows WSL2 환경을 기준으로 설명합니다.
윈도우즈를 사용한다면 WSL2 를 사용하는 방법을 권장합니다.




SSH 키 준비하기

사용자의 SSH 키는 해당 사용자 Home 경로의 .ssh 디렉토리(~/.ssh)에 저장됩니다.

다음 명령으로 SSH 키가 있는 지 확인할 수 있습니다:

ls ~/.ssh

authorized_keys2  id_dsa       known_hosts
config            id_dsa.pub


위의 결과에서 id_rsaid_rsa.pub 는 각각 개인키, 공개키입니다.
.ssh 디렉토리가 없거나 id_ 형식의 파일이 없다면 Linux 시스템의 SSH 패키지에 제공되는 ssh-keygen 프로그램을 사용하여 새로 만들 수 있습니다.

ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/home/{User}/.ssh/id_rsa):
Created directory '/home/{User}/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/{User}/.ssh/id_rsa.
Your public key has been saved in /home/{User}/.ssh/id_rsa.pub.
The key fingerprint is:
d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 {User}@...


ssh-keygen 을 실행하면, 먼저 키를 저장할 위치(~/.ssh/id_rsa)를 확인한 후 암호를 두 번 묻습니다.
키를 사용할 때 암호를 입력하지 않으려면 비워둘 수 있습니다.

각 사용자는 *.pub 파일 내용인 공개키를 복사하여 인증할 Git 서버에 저장하면 됩니다.

cat 명령으로 확인한 공개키의 내용은 다음과 같습니다:

cat ~/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== schacon@mylaptop.local


이제 Git 서버에 새 SSH 키 추가하겠습니다.

사용자 계정 설정에서 SSH 공개키를 등록합니다.
다음은 GitHub 의 사용자 Setting 입니다.

GitHub Settings


사이드바의 Access 섹션에서 SSH and GPG keys 를 클릭합니다.

SSH keys 에서 New SSH keyAdd SSH key 를 클릭합니다.


마지막으로 복사한 공개키를 붙여넣고 저장합니다.




SSH 키 확인하기

터미널에서 다음 명령으로 SSH 연결을 테스트할 수 있습니다:

$ ssh -T git@github.com
# Attempts to ssh to GitHub


메시지의 지문(Fingerprint)이 공개키와 일치하는 지 확인합니다:

> Hi USERNAME! You've successfully authenticated, but GitHub does not
> provide shell access.




URL 수정없이 프로토콜을 수정하기

공개키를 등록한 후에 https:// 프로토콜을 사용하던 저장소는 여전히 https 방식의 인증을 사용합니다.

다음 명령으로 URL 수정없이 https:// URL 을 git:// 으로 접근할 수 있습니다:

git config --global url."ssh://git@github.com".insteadOf "https://github.com"


이제, 비밀번호 입력없이 Git 서버에 접근할 수 있습니다~ 😊


GitHub SSH Authentication

Image from How to Create and Setup SSH Authentication for BItbucket and Github




참고자료

댓글남기기