[Github] Deploy Key와 SSH Key 차이점 및 등록 방법
간혹 배포서버 등에서 github에 접속해서 commit을 한다거나 pull을 받아와야 하는 경우가 있습니다. 하지만, 배포서버는 공용 서버이므로, 특정 사용자로 로그인을 하기 난감한 경우가 있습니다.
이런 경우, 해당 repository나 github 계정에 서버 자체를 인증해 두고, ssh를 통해 로그인을 하지 않고 repository에 접근할 수 있는 방법이 있습니다.
Deploy Key와 SSH Key의 차이점
위에서 말했듯, 원격 서버에서 github repository에 접근하는 방법은 크게 두가지 입니다. repository에 서버를 인증하는 방법과, github 계정에 서버를 인증하는 방법이 있는데요.
repository에 서버를 인증하는 방법은, Deploy Key를 지정해주면 되고, github 계정에 서버를 인증하는 방법은, SSH Key를 지정해주면 되는데, 이 차이는, Deploy Key는 해당 repository에 한해서만 접근 권한이 있는 반면, SSH Key를 github 계정에 등록시, 해당 계정이 가지고 있는 모든 repository에 접근 권한이 생기는데에 있습니다.
Deploy Key 이용하여 특정 repository에 접근권한 주기
우선, github repository에 서버를 인증하는 방법을 살펴보겠습니다.
원격 서버로 가서, 아래의 명령어로 ssh key를 생성해줍니다.
$ ssh-keygen -t rsa -f ~/.ssh/<SSH_KEY_NAME>
위의 명령어를 실행하면 기본적으로 ~/.ssh/<SSH_KEY_NAME> 와 ~/.ssh/<SSH_KEY_NAME>.pub 파일이 생기는데, .pub 확장자가 있는 파일이 public key이고 확장자가 없는 파일이 private key입니다.
그럼, 원격 서버에서 ssh key를 생성하였으니 github에서 서버를 인증하고 싶은 repository로 가서 아래와 같이 Settings로 들어가줍니다.
그런 다음, 왼쪽에 Deploy keys라는 섹션에 들어가서 Add deploy key를 선택해줍니다.
Title은 의미있는 이름을 지어주고, Key에는 위에서 생성했던 public key를 복사해서 붙여넣기 해줍니다.
이제 모든 설정은 끝났으니 아래와 같이 HTTPS가 아닌 SSH 주소를 이용해서 원격 서버에서 git clone 명령어를 실행시켜주면 해당 repository가 잘 clone 되는걸 확인할 수 있습니다.
마지막으로, 원격 서버로 가서, ~/.ssh/config 파일에 아래의 내용을 추가해줍니다.
Host github.com
IdentityFile ~/.ssh/<SSH_KEY_NAME>
User git
여기서 IdentityFile은 .pub 확장자 없이 pirvate key 이름만 넣어주면 됩니다.
이렇게 해서, deploy key를 이용하여 원격 서버에서 해당 repository에만 접근 권한을 주었습니다.
SSH Key를 이용하여 github 계정의 모든 repository에 접근권한 주기
그럼 이제 SSH Key를 이용해서 github 계정의 모든 repository에 접근권한을 주는법을 알아보겠습니다.
우선, 원격 서버로 가서, 아래의 명령어를 실행시켜서 ssh key를 생성해줍니다.
$ ssh-keygen -t rsa -f ~/.ssh/<SSH_KEY_NAME> -C "GITHUB_EMAIL"
그 후, www.github.com으로 가서, 우측 상단에 자신의 profile 아이콘을 클릭한 뒤, 아래와 같이 settings를 클릭해줍니다.
그 후, 왼쪽 메뉴에서 SSH and GPG keys를 선택한 후, 아래와 같이 New SSH Key를 클릭해줍니다.
Title은 의미있는 이름을 지어주고, Key에는 위에서 생성했던 public key 값을 넣어줍니다.
마지막으로, 원격 서버로 가서, ~/.ssh/config 파일에 아래의 내용을 추가해줍니다.
Host github.com
IdentityFile ~/.ssh/<SSH_KEY_NAME>
User git
이렇게 해서 SSH Key를 이용한 github 계정의 모든 repository에 접근 권한을 주는 법 까지 살펴보았습니다.
References
Generating a new SSH key and adding it to the ssh-agent - GitHub Docs
About SSH key generation If you don't already have an SSH key, you must generate a new SSH key to use for authentication. If you're unsure whether you already have an SSH key, you can check for existing keys. For more information, see "Checking for existin
docs.github.com