Github SSH 설정
What is SSH
Secure Shell Protocol(SSH)는 보호되지 않는 네트워크 환경속에서 안전하게 네트워크 서비스를 운영하기 위한 암호화 네트워크 프로토콜이다.1 우리가 인터넷을 사용할 때 만약 민감한 정보(e.g. 비밀번호, 토큰 등)를 있는 그대로 전송했다고 하자. 중간에서 누군가가 정보를 가로채기만 하면 이를 악용할 수 있을 것이다. SSH는 이러한 문제를 해결한다.
Alice, Bob을 통한 비유로 흔히 설명되는 공개 키 암호화 방식이 사용된다. Alice와 Bob은 각자 public key와 private key를 가지고 있다. 이름 그대로 public key는 모두에게 공개되고 private key는 본인 혼자만 알고있다. Alice가 Bob에게 정보를 보낼 때 Bob의 public key로 본래의 데이터를 암호화한다. 암호화된 데이터가 Bob에게 전송되고 Bob은 본인의 private key로 이를 해독해서 본래의 데이터를 획득한다. 여기서 중간에 Eve가 데이터를 탈취하더라도 오리지널 데이터는 획득하지 못한다.
이게 어떻게 가능한지는 RSA 문서를 참조하면 좋을 것 같다.
Benefit to Connect to Github with SSH
SSH를 사용하지 않고 Github을 사용한다면 repo에 접근할 때마다 비밀번호가 필요할 수 있다. SSH를 이용하면 한번의 setup 이후에 repo에 간편하게 접근할 수 있다.
Setup
Connecting to GitHub with SSH 문서를 참조하면 된다.
프로세스는 대략적으로
- 터미널을 연다.
- ssh key를 생성한다.
- 명령어를 입력한다.
1
$ ssh-keygen -t ed25519 -C "your_email@example.com" -f id_ssh_keyname
- 아래 prompt에서 엔터를 치면 mac 기준으로
~/.ssh
폴더에id_ssh_keyname
이라는 이름의 key가 생성된다.1
> Enter a file in which to save the key (/Users/YOU/.ssh/id_ALGORITHM): [Press enter]
- 아래 prompt에서 ssh key 비밀번호를 입력해준다.
1 2
> Enter passphrase (empty for no passphrase): [Type a passphrase] > Enter same passphrase again: [Type passphrase again]
- 명령어를 입력한다.
- 생성한 SSH key를 ssh-agent에 붙여준다.
- 다음의 명령어로 ssh-agent를 background에 실행시킨다.
1 2
$ eval "$(ssh-agent -s)" > Agent pid 59566
- host 별 ssh-agent 세팅을 위해
~/.ssh/config
파일에 아래 설정을 붙여넣는다. (~/.ssh/config
파일이 없다면 하나 만들어주도록 하자)1 2 3 4
Host github.com AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_ssh_keyname
- ssh-agent에 private key를 더하고 keychain에 비밀번호를 넣어주자.
1
$ ssh-add --apple-use-keychain ~/.ssh/id_ssh_keyname
- 다음의 명령어로 ssh-agent를 background에 실행시킨다.
- 생성한 SSH key를 Github account에 저장한다.
- public key인
~/.ssh/id_ssh_keyname.pub
내용을 복사한다. Github Settings
->SSH and GPG keys
로 들어간다 (link)New SSH key
혹은Add SSH key
를 클릭한다.title
에는 key의 용도를 입력한다 (e.g. Personal laptop)Key type
은Authentication Key
로 둔다.Key
항목에 4-1에서 복사한 public key를 붙여넣는다.Add SSH key
를 클릭한다.
- public key인
- 셋업이 잘 되었는지 확인한다.
- terminal를 연다.
- 아래 명령어를 입력한다.
1 2
ssh -T git@github.com # Attempts to ssh to GitHub
- 아래와 같은 output이 잘 나오는지 확인한다.
1 2
> Hi USERNAME! You've successfully authenticated, but GitHub does not > provide shell access.
Setup for Multiple Keys
Github 계정을 여러 개 사용하고 각각 다른 키를 사용해야하는 상황이 있을 수 있다. (e.g. 회사 계정 / 개인 계정 분리)
여기를 따라하면 되는데 방법은 다음과 같다.
~/.ssh/config
파일을 열어 다음과 같이 host alias로 두 키를 구분해준다.1 2 3 4 5 6 7 8 9 10 11
Host personal.github.com HostName github.com AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/personal_ssh_keyname Host company.github.com HostName github.com AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/company_ssh_keyname
다음의 명령어로 테스트해본다.
1 2 3
$ ssh -T git@personal.github.com > Hi USERNAME! You've successfully authenticated, but GitHub does not > provide shell access.
여기서 주의할 점은 host allias를 repo를 clone할 때나 .git config에 입력해야한다는 점이다.
예를 들어 일반적으로 로컬로 repo를 clone할 때
1
$ git clone git@github.com:bbb1293/bbb1293.github.io.git
라는 명령어를 사용한다면 ssh config 파일을 바꾼 이후에는
1
$ git clone git@personal.github.com:bbb1293/bbb1293.github.io.git
으로 host alias를 사용해주어야 한다.
이미 기존에 로컬에 repo를 가지고 있는 상황이라면 다음과 같이 진행하면 된다.
- terminal을 켜서 repo로 이동한다.
- git config 파일을 켠다.
1
$ vim .git/config
- url을 바꾸어 준다.
1
2
3
4
...
[remote "origin"]
url = git@bbb1293.github.com:bbb1293/bbb1293.github.io.git
...