Git에서 사용할 개인 키 선택 개의 Git 서버가 있습니다. git clone user1@server1:blahblahblah를

2 개의 다른 SSH 키가 필요한 2 개의 Git 서버가 있습니다.

git clone user1@server1:blahblahblah를 사용 ~/.ssh/id_rsa하지만 연결중인 서버에 따라 사용할 키를 지정해야합니다.

이 작업을 수행하는 Git 명령 줄 매개 변수는 무엇입니까? (저는 Linux를 실행하고 있습니다.)



답변

SSH를 통해 연결하는 경우 키는 git 매개 변수가 아닌 SSH 매개 변수에 의해 제어됩니다.

SSH는 ~/.ssh/config파일에서 구성 매개 변수를 찾습니다 . 해당 파일을 수정하고 다음과 같이 두 Git 서버에 대한 IdentityFile 항목을 추가합니다.

Host server1.whatever.com
  IdentityFile /path/to/key_1
Host server2.whatever.com
  IdentityFile /path/to/key_2

이 기사 에는 더 자세한 내용이 있습니다.


답변

또 다른 가능성이 있습니다. 설정하는 것입니다 core.sshCommand.

git config --local core.sshCommand "/usr/bin/ssh -i /home/me/.ssh/id_rsa_foo"

당신이 Github에서 여러 계정이 때 모든 계정으로,이다 :이이 전략은 특히 유용합니다 때 하나 개의 특정 시나리오입니다 ssh같은 Github에서에 git@github.com그리고 그것은 사용 ssh당신이있는 Github에서 사용자가 결정하는 키를. 이 경우에도 원하는 것을 하지 .ssh/config않습니다 ssh-agent.

업데이트 — 로컬 저장소가있을 때까지 위를 실행할 수 없으므로 원격 저장소를 복제하려는 경우 drewbie18의 답변에 따라 수동으로 키를 지정해야합니다.

git clone -c core.sshCommand="/usr/bin/ssh -i /home/me/.ssh/id_rsa_foo" git@github.com:me/repo.git

저장소를 복제 한 후에는 git config명령을 사용하여 이를 영구적으로 설정할 수 있습니다 .


답변

일반적으로이를 위해 사용 ~/.ssh/config합니다. 다음과 같이 서버 주소를 사용하려는 키와 페어링하기 만하면됩니다.

Host github.com
  IdentityFile ~/.ssh/id_rsa.github
Host heroku.com
  IdentityFile ~/.ssh/id_rsa.heroku
Host *
  IdentityFile ~/.ssh/id_rsa

Host *는 모든 서버를 ~/.ssh/id_rsa나타내므로 사용할 기본 키로 설정 하는 데 사용합니다.


답변

내 시나리오에서 @Richard Smith 시나리오 (그 솔루션, BTW가 나를 위해 작동하지 않음)와 유사하게 다른 리포지토리에서 동일한 서버에 대해 다른 키를 사용해야합니다.

나를위한 해결 방법은 다음과 같이 환경 변수를 사용하여 세션을 올바르게 설정하는 것입니다 GIT_SSH_COMMAND.

export GIT_SSH_COMMAND="ssh -o IdentitiesOnly=yes -i ~/.ssh/my-secret-identitiy"

업데이트 :

여기서 주목해야 할 또 다른 사항은 환경 변수를 올바르게 설정하는 것이 번거로울 수 있으므로 Liquid Prompt 또는 Fish Shell 과 같은 것에서 제공하는 명령 프롬프트 수정 기능을 사용하여 에 연결하고 환경 변수를 계속 업데이트하고 있습니다. 현재 디렉토리 및 일부 규칙. 예를 들어, Gitlab과 함께 내 개인 SSH 키가 필요한 모든 개인 프로젝트가 아래에 ~/Documents/Projects/personal있으므로 셸 후크가 실행 pwd되고 현재 디렉터리가 해당 경로 아래에 있음을 발견하면 GIT_SSH_COMMAND필요에 따라 자동으로 변수를 설정 합니다.


답변

사용 ssh-add path-to-private-key이 상자 밖으로 작동합니다.


답변

–global 또는 –local 구성을 설정할 수 있습니다. global은 ~/.gitconfig파일 을 업데이트 하고 local은 저장소의 구성을 업데이트 .git/config하고 전역 (~ / .gitconfig) 구성을 재정의합니다.

git config –local –add core.sshCommand ‘ssh -i ~ / .ssh / my_key’


답변

여기 Windows 사용자, 방금이 문제가 발생하여 지금까지 읽은 것과 약간 다른 해결책이 있습니다. 내가 직면 한 문제는 특정 개인 ssh 키를 사용하여 단순히 저장소를 복제하고 PowerShell에서 작업하는 것처럼 git 구성을 전역 적으로 구성하거나 특정 git bash 설정을 추가 할 필요가 없다는 것입니다. 기본적으로 .ssh 폴더에 개인 키를 몇 개 넣고 필요에 따라 특정 저장소에서 참조합니다.

이를 위해 다음 명령이 작동합니다.

git clone -c core.sshCommand="ssh -i ~/.ssh/<PRIVATE KEY NAME>" <CLONE URL>

본질적으로 이것이하는 일은 git repo를 초기화 할 때 복제를 실행하기 전에 core.sshCommand 옵션을 설정하는 것입니다. 따라서이 저장소에 사용하려는 특정 ssh 키는이 저장소에만 설정됩니다. 이것은 모든 경우에 이상적인 솔루션은 아니지만 내가 원하는 것은 아닙니다.