- 목차 -
사전 지식
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 만 입력하게 되면,
- 기본적으로 사용자의 홈 디렉토리 아래
.ssh폴더에 RSA 키 쌍(공개 키와 개인 키)을 생성한다. - 사용자에게 키의 저장 위치와 비밀번호 설정 여부를 물어보며, 추가 옵션을 지정하지 않으면 기본 설정으로 진행한다.
- 예시: 사용자가 특별히 지정하지 않으면, 파일 이름은
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 키 인증 메커니즘은 다음과 같이 이해할 수 있다
- 개인키(Private Key) 사용:
git clone [email protected]:``{private repository 소유자 이름}``/``{private repository 이름}``.git명령어를 실행할 때, SSH는 연결된 컴퓨터의.ssh디렉토리 내 개인키를 사용하여 GitHub 서버에 인증을 요청한다.만약 개인키에 비밀번호가 설정되어 있다면, 사용자는 이 비밀번호를 입력해야 한다.
- GitHub에 등록된 공개키(Public Key) 확인:
GitHub 서버는 요청 받은 인증 정보를 검증하기 위해 해당 사용자 계정에 등록된 공개키와 비교한다.
이 과정에서, 공개키와 개인키의 쌍이 정확히 일치해야 한다.
- 저장소 접근 권한 확인:
인증 과정이 성공적으로 완료되면, 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
+ 또 다른 간단한 방법
[Github] → [Settings] → [Developer Settings] 에서 퍼스널 액세스토큰 → 클래식에서 토큰 발급
git clone https://``{닉네임}``:``{토큰}``@github.com/``{저장소의 주인 닉네임}``/``{저장소 이름}``.git
( 💭 엄청 간단하긴한데 보안측면에서 괜찮을지 의문 )