왜 사용하는가?
로컬이 아닌 공용 서버, 새로 구축한 서버에서 private repository를 가져올 때마다 인증을 해야 하는 번거로움이 있습니다.
이럴 때 repository에 public key(공개키)를 등록하고 클론할 서버에 private key(개인키)를 들고 있게 하면 간편하게 repository에 접근할 수 있습니다.
아래 순서대로 진행하면 됩니다.
- 키 쌍을 생성 (로컬 PC)
- repository에 deploy key 추가
- ssh conifg 설정(EC2에서)
- 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 버튼을 클릭합니다.
![](https://blog.kakaocdn.net/dn/5qnnY/btrdC8K1rdo/rPj9PpFkyCACh0xdTTrVEK/img.png)
정상적으로 키가 생성된 것을 확인합니다.
로컬 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)로 변경합니다.
디렉토리와 하위 디렉토리에 대한 적절한 쓰기 권한을 설정합니다.
다음으로 개인키의 경로를 설정해줍니다.
Clone
ssh config의 Host를 따라서 repository를 클론 합니다.
![](https://blog.kakaocdn.net/dn/bEde6B/btrdzO0YLk2/llpjwOGkKsTYREWkxK7xp1/img.png)
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을 하실 수 있습니다.
'Git' 카테고리의 다른 글
GitHub 토큰 생성 시 Basic 설정 (0) | 2024.04.20 |
---|---|
git에서 branch 이름 바꿨을때 로컬에서도 업데이트 하는 방법 (0) | 2024.03.30 |
[Github] 깃허브 저작권 등록방법 (레포 License 등록, MIT License) (0) | 2024.03.06 |
깃 .gitignore 만들기 (0) | 2024.02.11 |
Git Push 하는 방법 (1) | 2023.09.06 |