git을 사용하는 경우 인증이 필요하죠. 이 때 인증 방법으로 ssh 인증키를 생성하여 등록 후 사용하는 방법이 있습니다. 그런데 만약 "이미 등록된 키를 사용중"이라는 에러 메시지가 나타난다면 어떻게 할까요?

위와 같은 에러는 하나의 컴퓨터에 등록된 키를 다른 계정으로 중복하여 사용하는 경우 나타날 수 있습니다. 다시 말하면 이미 등록된 키 이므로 해당 계정에서 사용할 수 없다는 이유입니다.

[ 동일한 파일명 역시 문제의 원인 ]
리눅스의 키 파일을 가져와 인증할 경우 기본값으로 /username/.ssh의 경로에서 같은 이름의 ssh 파일명이 사용되기 때문에 문제가 발생합니다. 이 때문에 다른 해결 방법으로는 다른 계정을 만들거나 아니면 인증 할 때 마다 키 파일을 다른 것으로 바꿔주면 해결될 수도 있습니다. 다만 이는매우 번거로운 과정이죠... 그래서 이런 불편함을 해결하기 위하여 아래의 방법으로 해결할 수 있습니다.


# git ssh 여러 개의 키(key)를 생성하여 사용하는 방법

해결 방법은 요청하는 git request 마다 다른 인증 파일을 바라보도록 설정하는 방법업니다. 이를 위해서 인증에 필요한 config 파일을 생성하여야 하며 아래는 어떻게 설정하여 여러 개의 키를 사용할 수 있는지 그 방법을 알아봅니다. 일단 필요한 과정을 요약하면 아래와 같습니다.

1. 파일 이름이 다른... 즉 id가 ssh키를 새로 만들기
2. ~/.ssh 안에 config를 만들어 다른 키를 바라보도록 설정하기
3. 동일하게 git에 사용할 ssh key를 등록하기


위 세 가지 과정이 필요합니다. 가장 먼저 새로운 키를 만들어 보도록 하겠습니다.


! .ssh에 새로운 키 생성하기
여기서 키 이름은 my_project_rsa를 사용하려고 합니다. 이 이름은 나중에 인증 설정시에 동일하게 사용됩니다.


- 키 이름: my_project_rsa

키를 생성하기 위해서 ssh-keygen 명령어를 사용합니다. -f 옵션과 -C 옵션을 사용하여 다음의 명령어를 입력합니다.
> ssh-keygen -f ~/.ssh/my_project_rsa -C "my_project_rsa"

위 명령어를 실행하면 .ssh 경로 안에 my_project_rsa와 my_project_rsa.pub 파일 두 개가 생성된 것을 알 수 있습니다. 각각 공개키와 개인키인데요 ~ 이제 공개키를 git 서비스의 설정에 있는 ssh에 추가하도록 합니다.


! Git 서비스에 ssh key 새로 추가하기
공개키를 등록하기 위해서 우선 아래의 메뉴로 이동합니다.(Bitbucket인 경우의 예임)


설정 > Personal Settings > Security > SSH Keys

이제 아까 설정된 키 파일 중 하나인 my_project_rsa.pub 파일의 값을 등록하면 됩니다. 정상적으로 등록되었다면 다음으로 config 파일을 만드는 다음 단계로 이동합니다.


! .ssh 내부에 config 파일 만들기
이제 git request시 특정 host에 맞는 key를 바라볼 수 있도록 config 파일을 설정해야 합니다. 만약 없다면 새로 만들고 아래와 같이 설정하도록 합니다. 여기서는 vim 명령어를 사용해 config를 만들었습니다.

> vim config


@ config
Host my_project_rsa
  HostName bitbucket.org
  IdentityFile ~/.ssh/my_project_rsa

설정한 내용은 위와 같습니다. 여기서의 Host는 파일의 이름인 my_project_rsa가 됩니다. 이 이름으로 요청될 경우 아래의 HostName과 IdentityFile로 git 인증을 수행하게 되죠. 위 예제의 HostName 값 bitbucket.org 예시로 실제 사용하는 git 서비스의 HostName을 입력하시면 됩니다. IdentityFile는 key 파일의 위치를 나타냅니다.


! git clone 수행하기
이제 마지막 과정입니다. git의 Host를 맞게 변경하여 clone을 수행하도록 합니다. 이미 있는 프로젝트라면 git config 명령어를 사용해 remote url을 직접 바꾸어야 할 것 입니다.
// 변경 전 clone 명령어
git clone git@bitbucket.org:my_project_rsa/my_project_rsa.git

// 변경 후 clone 명령어
git clone git@my_project_rsa:my_project_rsa/my_project_rsa.git


뭐가 달라졌는지 아시겠죠? Host에 해당하는 값을 config에서 설정한 my_project_rsa로 변경하여야만 해당 config에서 Host를 찾아 맞는 인증을 수행하게 됩니다. 이제 하나의 계정에서 여러 개의 키를 사용하는 것이 가능해졌습니다.