programing

사용할 GIT 선택 개인 키

projobs 2021. 1. 17. 10:24
반응형

사용할 GIT 선택 개인 키


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.

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

GIT_SSH_COMMAND="/usr/bin/ssh -i /home/me/.ssh/id_rsa_foo" git clone https://github.com/user/repo

저장소를 복제 한 후에는 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이 상자 밖으로 작동합니다.


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

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

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

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


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

git config --local --add core.sshCommand 'ssh -i ~ / .ssh / my_key'

참조 URL : https://stackoverflow.com/questions/6688655/git-select-private-key-to-use

반응형