1. Github deploy key
회사의 git 서비스를 사용할 때 github를 사용할 경우, 계정정보를 이용하여 Pull 혹은 Push가 어려운 구조로 바뀌었습니다. Git Token을 이용하여 Password 대신 사용할 수 있지만 이런 방법으로도 여전히 불편합니다. 특히 자동으로 배포 프로세스를 만들기 위해서는 다른 방법을 찾아봐야 할 것입니다. Github에서는 Deploy Key가 제공됩니다. 이를 이용하기 위해 ssh-keygen을 이용하여 배포하는 과정을 살펴보도록 하겠습니다.
2. ssh-keygen
# 2048 bit, rsa SSH Key generation
ssh-keygen -t rsa -b 2048 -f keyname
Bash
복사
•
-t 타입 지정 옵션 (rsa, dsa, ecdsa, …)
•
-b 키 길이(bit 수) 1024, 2048, 4096, …
•
-f 키 파일의 이름(keyname, keyname.pub)
위 명령어를 실행하게되면 다음과 같이 Private Key와 Public Key가 생성됩니다.
위 그림을 예로 들면, 다음과 같이 구분할 수 있습니다.
deploy_key : 개인키(Private Key)로써 어떠한 경우에도 노출해서는 안 됩니다.
deploy_key.pub : 공개키(Public Key)로써 노출되어도 무방합니다. 이를 깃허브에 등록하게 되면, private_key를 이용하여 github repository에 접근할 수 있습니다.
Public key example
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC+00SKsUakSICZNHXANW3U7FGQ3XueB7LisctuiUhrs6ImM1pD0ODOgbZKYBvJQjrdL29Nmv4qJ9ou2UXS5dR0mtBr7b6OfaQM2xuZsVBP0cd0Efxfq8sTYj3ZFgtm6hpq1lpbKgB5eKJ74oOzRVpDEOk74KwVYFeh/U7u2gDDNltZ+z5P/tB61XJ9ubjeNV/oGPf+gbHrJPJOHSjM5HLbY7eNyNIypV+YE0TWq3Qle1T1Xti6CefbOva64JiAlHBhAsQteIiDTCc98VPZAo1X4a5D8UIe9Ij/omkdskJ8bnxPInyaIFSYneM0N2F4hvZyX/hXRKPZKXJM/rugzTSlKAPtMhTy9tyLmmA9CjVJnLI5yTKhUHcTk9qY++8/iCCSSRB8xFcp7sUXMocFMV4i26oWDwYUVYDBvNn7JWPtchW6Tkf0n6kn1rFQAoBiTbUyb4RiUfMs2iJJJ1nZknIcnd79HxK3CHBpDJBsgEq3w7wkrID6Z4y/9/NHdsBuifM= kkamikoon@goldstar
Plain Text
복사
Private key example
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----
Plain Text
복사
3. Github deploy key set-up
key generating
위의 ssh-keygen 명령어를 이용하여 priv-key와 pub-key를 생성합니다.
ssh-keygen -t rsa -b 2048 -f ~/.ssh/retro-ctf-backend
Plain Text
복사
Add deploy key
repository 주소 접속 → Settings → Deploy Keys 여기로 들어가서 Key를 등록할 수 있습니다. 생성된 ssh 키 중 public key를 github에 등록합니다.
ssh config
Github에 Deploy key(public key)를 등록했으면, SSH 실행 시 private key가 어디에 있는지 명시해주어야 합니다.
~/.ssh/config 파일에 다음 내용을 추가합니다. 없다면 새로 생성해주어도 됩니다.
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/retro-ctf-backend
IdentitiesOnly yes
Port 22
Bash
복사
git clone
이제 세팅을 완료했다면 SSH 형태로 git clone을 실행할 수 있습니다.
•
SSH 형식
git@github.com:user_name/repository_name
•
Example
4. 여러 개 Deploy Key 설정
만약 여러 개의 Deploy Key를 하나의 서버(혹은 로컬)에서 관리해야 한다면 다음과 같이 설정해줄 수 있습니다.
Host retro_ctf
HostName github.com
User git
IdentityFile ~/.ssh/retro-ctf
IdentitiesOnly yes
Port 22
Host retro_ctf_backend
HostName github.com
User git
IdentityFile ~/.ssh/retro-ctf-backend
IdentitiesOnly yes
Port 22
Bash
복사
Test
ssh -T git@retro_ctf_backend
Bash
복사
Clone
clone 명령어를 수행할 때는 다음과 같이 사용할 수 있습니다.
`Host`:`username`/`repository_name`.git
예시 : git clone -b BRANCH retro_ctf:0x0w1/retro-ctf
Remote
remote url 세팅할 때 다음과 같이 사용할 수 있습니다.
git remote set-url origin git@`Host`:`username`/`repository_name`.git
예시 : git remote set-url origin git@retro_ctf_backend:0x0w1/retro-ctf-backend.git
만약 origin을 추가하고자 한다면 다음과 같이 설정할 수 있습니다.
git remote add origin git@`Host`:`username`/`repositoy_name`.git
예시 : git remote add origin git@retro_ctf_backend:0x0w1/retro-ctf-backend.git
Push
SSH 키 세팅이 완료돼 있다면, 일반적인 명령어로 push가 가능합니다.
git push origin `Branch Name`
예시 : git push origin development