본 내용과 관련해서는 더 간단하게 설명된 다른 블로그 글들이 많이 있다. 그러나 그 각각의 내용이 무엇인지, 그것들이 어떻게 동작되는지 궁금해서 이 기회에 이것저것 찾고 알게된 내용들을 정리해보았다.
  • 목차 -

사전 지식


RSA 키 쌍의 의미와 사용 목적:

  • RSA 키 쌍은 공개 키와 개인 키로 구성되며, 이들은 서로 수학적으로 연관되어 있다.

  • 공개 키(public key): 이 키는 안전하게 공유될 수 있으며, Git 서버에 등록된다. 서버는 이 공개 키를 사용하여 사용자의 인증 정보를 확인한다.

  • 개인 키(private key): 이 키는 사용자의 로컬 컴퓨터에 안전하게 보관되어야 하며, 절대 공유되어서는 안 된다. 개인 키를 통해 사용자는 Git 서버에 자신의 정체성을 증명할 수 있다.

  • Git 서비스(예: GitHub, GitLab 등)에서는 사용자가 저장소에 접근하거나 변경 사항을 push할 때 이 키를 통한 인증이 요구된다.

  • SSH 키를 사용하는 인증 방식은 사용자 이름과 비밀번호를 사용하는 방식보다 더 안전하며, 자주 사용되는 방법이다.

ssh key 생성


cd ~/.ssh

ssh-keygen -t rsa -C "{git 계정 이메일}" -f "{키 이름}"

생성하고나면 {키 이름}, {키 이름}.pub 두가지가 생성된다. {키 이름}는 프라이빗 키, {키 이름}.pub 는 퍼블릭 키

  • -t rsa는 생성할 키의 type을 RSA로 지정한다는 설정. (RSA는 널리 사용되는 키 유형 중 하나)

  • -C "{git 계정 이메일}"는 키에 주석을 추가하는 옵션. 주석은 보통 키를 식별하는데 사용되는 이메일 주소로 설정된다. 이는 키 관리를 용이하게 하며, 어떤 목적으로 키가 사용되는지 식별할 수 있게 도와준다.

  • -f "{키 이름}"는 생성될 키 파일의 이름을 지정한다. 이를 통해 기본 이름(id_rsa) 대신 다른 이름을 사용할 수 있어, 여러 키를 관리할 때 유용하다.

  • -b {3072~4096} 이 옵션은 생성할 key의 크기로써, 명시하지않으면 기본적으로 3072가 적용된다(최대 4096)

※ 이 명령어를 입력하면 시스템은 사용자에게 개인키에 대한 비밀번호 설정 여부를 묻는다. 이 때, 비밀번호를 입력하면, 해당 비밀번호는 생성된 개인키에 연결된다.(비밀번호를 입력하지 않고 엔터를 누르면, 비밀번호 없이 개인키가 생성)

예를들어 아래와같은 프롬프트가 나타날 수 있다.

Enter passphrase (empty for no passphrase): [여기에 비밀번호 입력]
Enter same passphrase again: [비밀번호 재입력]

ssh-keygen을 사용시 비밀번호 설정은 선택. 비밀번호를 설정하면 보안이 강화되지만, 매번 SSH 접속 시 비밀번호를 입력해야 하는 불편함이 있을 수 있다. 비밀번호 없이 키를 생성하면 접속이 더 간편해지지만, 그 만큼 키의 보안 수준은 낮아진다.

☝🏻

ssh key 생성방법 (더 기본적인 방법) 만약 ssh-keygen 만 입력하게 되면,

  1. 기본적으로 사용자의 홈 디렉토리 아래 .ssh 폴더에 RSA 키 쌍(공개 키와 개인 키)을 생성한다.
  2. 사용자에게 키의 저장 위치와 비밀번호 설정 여부를 물어보며, 추가 옵션을 지정하지 않으면 기본 설정으로 진행한다.
  3. 예시: 사용자가 특별히 지정하지 않으면, 파일 이름은 id_rsa와 id_rsa.pub (공개 키)로 저장된다.

앞서 정리한 방법은 구체적인 설정(키 타입, 주석, 파일 이름)으로 사용자 정의 SSH 키를 생성하는 방법. 두 번째 기본 방법은 표준 설정으로 SSH 키를 생성하는 방법.

ssh agent 실행


eval "$(ssh-agent -s)"

ssh agent에 새로 생성한 프라이빗 key 추가


ssh-add ~/.ssh/{프라이빗키 이름}
  • 이 명령어는 생성된 개인키를 SSH 에이전트에 추가하여 이 후 인증 과정을 자동화한다.

  • 만약 개인키에 비밀번호가 설정되어 있다면, ssh-add 실행 시 비밀번호를 한 번 입력해야 한다.

  • 여러 개의 SSH 키를 사용한다면, ssh-add를 사용하여 필요한 키를 에이전트에 추가할 수 있다. 이는 SSH 에이전트가 자동으로 적절한 키를 선택하여 사용할 수 있도록 해준다.

  • ※ssh-add 과정 없이도 ssh-keygen만으로도 생성한 키를 사용할 수 있다. 이 때도 개인키에 설정된 비밀번호를 매번 입력할 필요도 없다. 시스템의 SSH 에이전트가 한 번 입력된 비밀번호를 기억하고, 후속 접속 시 자동으로 처리해준다.

ssh agent에 개인키 등록 되었는지 조회


ssh-add -l

Github에 퍼블릭 키 등록


cd ~/.ssh
cat {생성한 공개키 이름}.pub

위 명령어를 통해 퍼블릭키 내용 확인 및 복사 후

[Github] → [Settings] → [SSH and GPG keys] 에 붙여넣기(등록)

Private Repository Clone


여기까지하면 아래의 터미널 명령을 통해 private repository를 clone할 수 있다.

git clone [email protected]:{private repository 소유자 이름}/{private repository 이름}.git

Clone 동작 과정 간 인증 메커니즘


git clone 명령어를 사용하여 GitHub의 비공개 저장소를 복제하는 과정에서의 SSH 키 인증 메커니즘은 다음과 같이 이해할 수 있다

  1. 개인키(Private Key) 사용:
  • git clone [email protected]:``{private repository 소유자 이름}``/``{private repository 이름}``.git 명령어를 실행할 때, SSH는 연결된 컴퓨터의 .ssh 디렉토리 내 개인키를 사용하여 GitHub 서버에 인증을 요청한다.

  • 만약 개인키에 비밀번호가 설정되어 있다면, 사용자는 이 비밀번호를 입력해야 한다.

  1. GitHub에 등록된 공개키(Public Key) 확인:
  • GitHub 서버는 요청 받은 인증 정보를 검증하기 위해 해당 사용자 계정에 등록된 공개키와 비교한다.

  • 이 과정에서, 공개키와 개인키의 쌍이 정확히 일치해야 한다.

  1. 저장소 접근 권한 확인:
  • 인증 과정이 성공적으로 완료되면, GitHub는 해당 사용자 계정이 요청된 비공개 저장소에 접근할 권한이 있는지 확인한다.

  • 접근 권한이 있다면, git clone 명령어는 저장소의 내용을 로컬 시스템으로 복제한다.

✨ 요약 (Private Repo Clone을 위한 터미널 명령어)


cd ~/.ssh

ssh-keygen -t rsa -C "{git 계정 이메일}" -f "{키 이름}"

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/{프라이빗키 이름}

cat {생성된 (공개)키 이름}.pub  # 조회된 공개키 복사

(github에 공개키 등록)

git clone [email protected]:{private repository 소유자 이름}/{private repository 이름}.git

+ 또 다른 간단한 방법

  1. [Github] → [Settings] → [Developer Settings] 에서 퍼스널 액세스토큰 → 클래식에서 토큰 발급

  2. git clone https://``{닉네임}``:``{토큰}``@github.com/``{저장소의 주인 닉네임}``/``{저장소 이름}``.git

( 💭 엄청 간단하긴한데 보안측면에서 괜찮을지 의문 )