[GIT] 프로젝트 별 서로 다른 SSH Key 등록하기 (Multi-SSH key for different projects)


SSH Key 등록의 문제

기존에 windows 환경에서 SSH 키를 등록하는 방법을 간단하게 공유하였다. 이와 관련된 내용은 내 블로그가 아니더라도 github 페이지에 가이드되어 있는 내용이기 때문에 다들 알고 있는 내용일 것이다. (참고) Windows10 - SSH Key 등록

하지만 SSH 키를 등록하더라도 제대로 연결이 되지 않는 경우가 존재할 수 있다.

나의 경우는 개인적인 프로젝트나 업무와 관련된 계정이 하나 존재하고, 블로그를 작성하고 관리하기 위한 계정이 하나 존재한다. 관리의 편의성 및 보안을 위해서 각 프로젝트 마다 다른 github 계정을 사용해서 push 해야 한다.

이때 동일한 SSH 키를 여러 github 계정 SSH에 등록하게 되는 경우 다음과 같은 에러를 볼 수 있다.

따라서, 하나의 랩탑으로 두 계정을 사용해야 하며 각 계정별 별도의 SSH key를 생성하여 등록해야 한다.


추가적인 SSH Key 생성

github은 SSH Key 값이 서로 다른 계정간에 공유되는 것을 원하지 않는 것으로 보인다. 그렇기 때문에 같은 장비(OS환경)에서 여러 계정을 사용해야 하는 경우 서로 다른 SSH Key를 사용해야 한다.

$ ssh-keygen -C 'test@gmail.com'
Generating public/private rsa key pair.

그 다음으로는 저장하고자 하는 rsa key 파일 명을 지정한다. 여기서는 .ssh 경로 아래 id_rsa_test 라는 이름으로 rsa 키를 생성하였다.

Enter file in which to save the key (~/.ssh/id_rsa): .ssh/id_rsa_test
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in .ssh/id_rsa_test.
Your public key has been saved in .ssh/id_rsa_test.pub.
The key fingerprint is:
SHA256:ayzjbRKohP+Y31PlxUZAHyE3xvhoV+/r16dqwKMgxFc test@gmail.com
The key's randomart image is:
+---[RSA 2048]----+
|         .++*.   |
|        E .=oo.  |
|   .   .   =.. . |
|    o .   + *   .|
| . . o  S= +   . |
|. . o o...=     .|
| o . .o++. o    o|
|  oo oo=o   .  .+|
|  ooo o+.  ...ooo|
+----[SHA256]-----+

$ cat .ssh/id_rsa_test.pub 
ssh-rsa  AAAAB3NzaC1yc2HOmEN05kpst4rqYnUXymvU5e(생략)CN8XH1rijA4lBup4/RD test@gmail.com

그 다음으로는 동일하게 공개키를 github 계정의 Settings > SSH and GPG keys > New SSH key 를 통해 새로 생성한 키를 등록해주면 된다.


SSH Key & Git Authentication

이제부터가 중요하다. 지금 상태로 다시 프로젝트에서 github에 접근한다면 다음과 같은 오류메세지를 볼 수 있다.

$ git fetch --all
Fetching origin
ERROR: Repository not found.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
error: Could not fetch origin

별도의 설정이 없다면 git은 기본적으로 ssh에 사용하는 key를 id_rsa를 사용하기 때문이다.

우선 생성한 rsa key로 정상적으로 github.com에 접근이 되는지 확인해보자. 그러면서 rsa key 별로 github인증이 어떻게 변하는지 확인하자 .

## 기본으로 ssh 인증을 수행하는 경우 
$ ssh -T git@github.com
Hi pskim-p! You've successfully authenticated, but GitHub does not provide shell access.

## id_rsa 파일을 사용하여 인증을 수행하는 경우 
$ ssh -T -ai ~/.ssh/id_rsa git@github.com
Hi pskim-p! You've successfully authenticated, but GitHub does not provide shell access.

## 새로 생성한 id_rsa_test 파일을 사용하여 인증을 수행하는 경우 
$ ssh -T -ai ~/.ssh/id_rsa_test git@github.com
Hi pskim-b! You've successfully authenticated, but GitHub does not provide shell access.

id_rsa_test를 사용했을때 id_rsa 를 사용했을때와 인증 계정이 달라진 것을 확인할 수 있다.


Git config ‘core.sshCommand’ 설정

위의 ssh key를 프로젝트에 적용해주기 위해서는 git config 파일에 다음과 같이 설정을 추가하면 된다.

## github 프로젝트 경로에서 (.git 폴더를 가지고 있는 상위 경로)
$ git config core.sshCommand "ssh -i ~/.ssh/id_rsa_test -F /dev/null"

$ cat .git/config 
## 생략 ~~
[core]
	sshCommand "ssh -i ~/.ssh/id_rsa_test -F /dev/null"
## ~~ 생략 

이로써 프로젝트에서 github 에 ssh 접근 시 특정한 rsa key 값으로 접근할 수 있게 되었다.

만약 이렇게 설정하였는데도 접근이 되지 않는다면 현재 접근하고 있는 계정이 submodule이나 remote origin의 경로의 프로젝트에 접근하고 있는 계정의 권한이 있는지 확인해보아야 한다. 또한 SSH가 아닌 HTTPS 프로토콜로 접근하고 있지는 않은지 다시한번 확인해야 한다.

(x) https://github.com/pskim-b/~~~
(O) git@github.com:pskim-b/~~~

이렇게 해도 안되는 경우는 다른 문제일 가능성이 있음으로 조금 더 문제의 원인을 파악하는데 집중하자.

✋ ✋ ✋ ✋ ✋ ✋


참고