본문 바로가기
Git

[Github] Repository의 Deploy key 사용

by 보안매크로 2024. 6. 18.
728x90

왜 사용하는가?

로컬이 아닌 공용 서버, 새로 구축한 서버에서 private repository를 가져올 때마다 인증을 해야 하는 번거로움이 있습니다.

이럴 때 repository에 public key(공개키)를 등록하고 클론할 서버에 private key(개인키)를 들고 있게 하면 간편하게 repository에 접근할 수 있습니다.

 

아래 순서대로 진행하면 됩니다.

  1. 키 쌍을 생성 (로컬 PC)
  2. repository에 deploy key 추가
  3. ssh conifg 설정(EC2에서)
  4. git clone(EC2에서)

키 생성하기

터미널에서 ssh-keygen을 활용하여 아래의 옵션을 추가한 후 키 페어를 생성합니다.

ssh-keygen -t rsa -b 2048 -f C:\Users\your-username\.ssh\test_key

- 경로를 잘 설정해주세요.

- t 옵션은 암호화 타입을 지정하고 b 옵션은 bit 크기를 지정합니다. (지정하지 않으면 기본은 2048)

- f 옵션은 생성된 키 페어의 이름과 저장될 경로입니다.

-따라서 생성된 키 페어는 ~/.ssh/ 디렉터리에 test_key, test_key.pub 이름으로 생성됩니다.

 

생성 중에 Enter passphrase (empty for no passphrase): 에서 암호를 입력할 수 있지만 그냥 enter키로 넘어가겠습니다. 2번 나오는데, 모두 엔터키로 넘어갑니다.

여기서 암호를 지정해주면 해당 repository에 접근할 때 암호를 요청받게 됩니다.

# ~/.ssh/
-rw-------  1 peer01 peer01 3401  8월 30 15:48 test_key
-rw-r--r--  1 peer01 peer01  755  8월 30 15:48 test_key.pub

키의 내용은 cat 명령어나 에디터를 실행시켜 확인할 수 있습니다.

cat test_key.pub

# public key
ssh-rsa
...
...
...

Deploy key 추가하기

private repository에서 Settings을 클릭합니다.

 

왼쪽 카테고리에서 Deploy keys를 클릭합니다.

 

Add deploy key 버튼을 클릭하고 title, key를 입력합니다.

 

여기서 title은 의미 있게만 지어주시면 되고 key는 public key, 즉 .pub 키의 내용을 입력해야 합니다.

추가적으로, pull 받고자 하는 pc에서 읽기 권한뿐만 아니라 쓰기 권한도 필요하다면 하단에 Allow wirte access를 체크해주세요.

입력이 완료되면 Add key 버튼을 클릭합니다.

정상적으로 키가 생성된 것을 확인합니다.

로컬 PC에서 EC2로 키 전송

ec2에서 파일을 만들어주고 권한 설정을 진행

# .ssh 디렉토리 생성 ( ~/.ssh는 /home/ec2-user/.ssh를 의미)
mkdir -p ~/.ssh

# 권한 설정
chmod 700 ~/.ssh

이제 로컬pc에서 ec2로 키를 전송한다.
scp -i "ec2 접근 ssh키 절대경로" "생성한 ssh키 절대경로" ec2주소:~/.ssh/test_key

test_key                                                                            100% 1823    11.1KB/s   00:00
라고 뜨면 된다.

scp -i "ec2 접근 ssh키 절대경로" "생성한 ssh키 절대경로" ec2주소:~/.ssh/test_key.pub

test_key                                                                              100% 1823    10.6KB/s   00:00
라고 뜨면 된다

ec2에서 config 세팅을 해준다.
vim ~/.ssh/config

입력 후

Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/test_key
    IdentitiesOnly yes
    Port 22

SSH Config 셋팅

마지막으로 ssh를 간편하게 사용하기 위해 config 파일을 생성해서 관련 설정값을 작성합니다.

git bash에 접속해 아래 명령어를 입력합니다.

ssh config는 키가 저장되어 있는 경로인 .ssh/ 디렉토리에 맞춰 생성합니다. (이미 존재할 수 있음)

vim ~/.ssh/config

config 파일에 들어갈 내용을 작성합니다.(bash에서)

Host test
     HostName github.com
     User git
     IdentityFile ~/.ssh/test_key
     IdentitiesOnly yes
     Port 22

- Host는 원하는 내용을 적어주셔도 됩니다.

- HostName, User는 우리가 github의 private repository에 비밀키로 인증을 받을 것이므로 위와 같이 설정해줍니다.

- 즉, HostName은 접속할 서버의 도메인이며 User는 접속할 서버의 user입니다.

입력 후 bash에서 아래 절차를 따라 종료합니다.

1. ESC 키를 눌러 명령 모드로 전환

2. :wq 입력 후 Enter 키를 눌러 저장하고 종료

 

권한 및 소유권 설정

1.현재 디렉토리의 소유권 확인 및 변경

먼저, 디렉토리의 소유권을 현재 사용자(ec2-user)로 변경합니다.

sudo chown -R ec2-user:ec2-user clone할 경로(만들어 두셔야겠죠?)
 
 
2. 디렉토리 권한 설정

디렉토리와 하위 디렉토리에 대한 적절한 쓰기 권한을 설정합니다.

sudo chmod -R 755 clone할 경로
 

 

 

다음으로 개인키의 경로를 설정해줍니다.

Clone

ssh config의 Host를 따라서 repository를 클론 합니다.

 

SSH 클릭

 

SSH copy 할 내용을 보면 git@github.com:... 으로 시작합니다.

ssh config를 작성했던 Host 설정 값에 따라서 조금 수정해야 합니다. 그렇지 않으면 clone에 실패합니다.

 

git@github.com -> git@test

 

반대로 conifg 파일의 Host를 github.com 으로 수정해도 됩니다. 

git clone git@test:bbaktaeho/deploy-key-tester.git

# 결과
Cloning into 'deploy-key-tester'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

ssh config 파일에 같은 Host 설정 값을 사용할 수도 있습니다.

Host github.com
     HostName github.com
     User git
     IdentityFile ~/.ssh/test_key
     IdentitiesOnly yes
     Port 22

Host github.com
     HostName github.com
     User git
     IdentityFile ~/.ssh/test2_key
     IdentitiesOnly yes
     Port 22


Host github.com
     HostName github.com
     User git
     IdentityFile ~/.ssh/test3_key
     IdentitiesOnly yes
     Port 22

그러면 기존에 git@github.com... 처럼 git clone을 하실 수 있습니다.

728x90