1. 개요
이 포스팅은 https://www.jeffyang.io/blog/github-ssh-authentication" href="http:// https://www.jeffyang.io/blog/github-ssh-authentication" target="_blank" title="외국 포스팅">외국 포스팅글의 내용을 발췌하여 번역 및 일부 수정한 포스팅이다.)
Github SSH인증을 올바르게 설정하기 위한 방법을 작성한 포스팅이다.
SSH 인증이 무엇인지, Github 컨텍스트에서 직접 설정하는데 관심이 있어야 하는 이유, 마지막으로 올바르게 설정하는 방법에 대해 다루도록 한다.
2. SSH란?
SSH는 Secure Shell의 약자로 인터넷과 같은 보안되지 않은 공용 네트워크를 통해 신뢰할 수 있고 안전한 네트워크 운영을 설정하기 위한 암호화 네트워크 프로토콜이다.
SSH 인증은 일반적으로 클라이언트와 서버 간의 연결이 연결 요청을 만드는 SSH 클라이언트에 의해 시작되는 고전적인 클라이언트-서버 모델을 통해 구현된다. 서버는 클라이언트로부터 연결 요청을 받으면 공개 키를 SSH 클라이언트로 전송하여 공개 키 암호화로 잘 알려진 프로세스를 시작한다.
SSH 클라이언트와 SSH 서버가 서로를 신뢰할 수 있다는 데 동의하면 둘은 데이터가 암호화되는 통신 채널을 설정하여 보안을 유지한다.
3. Github에서 SSH를 사용하는 이유?
원격 github 레포지토리(클론, 풀, 푸시 등)와 상호 작용하는 두 가지 방법(HTTPS 및 SSH)이 있다.
HTTPS는 매우 간단하기 때문에 많은 GitHhub 사용자에게 매우 인기 있는 옵션이다. 실제로 Github은 방화벽 뒤에서도 포트(443)에 전역적으로 액세스할 수 있기 때문에 SSH를 통한 HTTPS도 권장한다. HTTPS를 선택하면 Github 계정 정보(id/password)만 있으면 된다.
그러나 원격 레포지토리와 상호 작용할 때 매번 Github 자격 증명을 입력하라는 메시지가 표시된다. (예: 자격 증명을 어딘가에 캐시하더라도 인증을 위해 네트워크를 통해 계속 전송되고 있다.) 여기에서 인증을 위해 SSH를 설정하는 비교 이점을 볼 수 있다. HTTPS를 사용하면 Github계정 자격 증명이 어떤 방식, 모양 또는 형식으로 노출된다. 계정 정보가 손상된 경우 모든 저장소와 계정 자체가 잠길 수 있다. 그것은 진정한 재앙이 될 수 있다.
반면 SSH를 선택하면 Github 자격 증명을 전혀 입력할 필요가 없다. Github 계정을 노출하지 않는다는 점에서 더 안전하다. 그러나 로컬 시스템에서 SSH를 설정하려면 공개/개인 키를 생성해야 한다.
ssh-agent에 개인 키를 추가하고 공개 키를 Github계정에 복사한다. 이런 식으로 Github은 Github과 상호 작용하려는 사람이 실제로 사용자인지 확인할 수 있다. 이 모든 것을 설정하는 방법을 살펴보도록 하자.
4. Github에서 SSH 설정
키 페어 생성
프로세스의 첫 번째 단계는 공개-개인 키 쌍을 생성하는 것이다. ssh-keygen 명령을 사용하여 키를 생성한다.
$ ssh-keygen -t ed25519 -C "youremailaddress@example.com"
SSH키를 저장할 위치를 묻는 메시지가 표시된다. 참고로 기본 위치는 ~/.ssh이다.
ssh-keygen 명령도 암호를 입력하라는 메시지를 표시해야 한다. 암호를 추가할지 여부는 사용자에게 달려 잇지만 보안을 위해 암호를 사용하는 것이 좋다. 이제 키가 올바르게 생성되었는지 확인하자.
$ cd ~/.ssh # or wherever you specified your keys to be saved
$ ls
id_ed25519 id_ed25519.pub
이제 백그라운드에서 ssh-agent를 시작한다.
$ eval "$(ssh-agent -s)"
이제 SSH에 대한 구성 파일을 추가할 시간이다.
$ vim ~/.ssh/config
# add the following in the config file and save
Host *
AddKeysToAgent yes # automatically load keys to agent
UseKeychain yes # store passphrases in keychain
IdentityFile ~/.ssh/id_ed25519 # or wherever you specified your keys to be saved
마지막으로 SSH 개인 키를 ssh-agent에 추가하고 암호를 키체인에 저장한다.
$ ssh-add -K ~/.ssh/id_ed25519
이제 로컬 컴퓨터를 성공적으로 설정했다. 하지만 생성한 공개 키를 Github에 복사해야 한다. 다음 명령을 실행하여 클립보드에 있는 공개 키 파일의 내용을 복사하자.
$ pbcopy < ~/.ssh/id_rsa.pub
이제 Github 계정 > 설정 > SSH 및 GPG 키로 이동한다. “New SSH Key” 를 클릭한다. SSH의 제목을 입력하고(나중에 SSH 키를 더 추가할 경우를 대비하여 설명이 포함되도록 한다.) 클립보드에서 공개 키 내용을 복사한다.
이제 공개 키가 Github 계정에 추가된 것을 볼 수 있다. 이제 모든 설정이 완료되었다.
5. SSH 포트 연결
위의 모든 단계를 수행한 후에는 모든 것이 제대로 작동해야 한다. 그러나 다른 모든 것과 마찬가지로 주의 사항이 있다. SSH 연결은 기본적으로 SSH의 표준 포트 번호인 포트 22로 설정된다.
그러나 HTTPS와 달리 특정 방화벽이나 네트워크가 해당 포트를 차단할 수 있으며 이 경우 SSH 연결이 중단된다. 다행히도, 이에 대한 해결 방법이 있다. HTTPS의 기본 포트인 443포트에서 연결을 설정하도록 SSH를 구성하기만 하면 된다.
$ vim ~/.ssh/config
# we already added this part before
Host *
AddKeysToAgent yes # automatically load keys to agent
UseKeychain yes # store passphrases in keychain
IdentityFile ~/.ssh/id_ed25519 # or wherever you specified your keys to be saved
# TODO : set github ssh connection to port 443
Host github.com
Hostname ssh.github.com
Port 443
이제 Github를 사용한 SSH 설정이 실제로 작동해야 한다.
#Reference
'Git' 카테고리의 다른 글
[Git] git stash 란? (0) | 2022.12.17 |
---|---|
Git 이전 커밋으로 롤백하기(git revert) (2) | 2022.12.14 |
[Git] 특정 커밋의 상태 clone하기 (0) | 2022.09.22 |
[GitHub] 토큰 인증 로그인(Please use a personal access token instead) 사용법 (0) | 2022.09.18 |
[GitHub] Self-hosted에 대해 / GitHub-hosted와의 차이점 (0) | 2022.05.02 |