사용하는 한 가지 가능성 ~/.ssh/config은 Match제한 대신 제한 을 사용하는 것입니다 Host. 특히 Match Exec선언을 적용할지 여부를 결정하기 위해 쉘 명령을 호출합니다. bash에서는 다음 명령을 사용할 수 있습니다.
[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]
bash [명령을 사용하여 두 문자열이 같은지 확인합니다. 이 경우 문자열 git@git.company.com:gitolite-admin이 $(git config --get remote.origin.url)''명령 에서 얻은 출력과 일치 하는지 테스트합니다 .
쉘이있는 저장소를 식별하는 다른 명령을 사용할 수 있습니다. 이것이 작동 하려면 변수를 쉘에 정의 하는 것이 중요 합니다 . 전체 예는 다음과 같습니다 .$SHELL/bin/bash~/.ssh/config
Match Exec "[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]"
IdentityFile ~/.ssh/gitolite-admin
IdentitiesOnly yes
ForwardAgent no
ForwardX11 no
ForwardX11Trusted no
Match Exec "[ git@git.company.com:some_repo = $(git config --get remote.origin.url)'' ]"
IdentityFile ~/.ssh/yourOwnPrivateKey
IdentitiesOnly yes
ForwardAgent no
ForwardX11 no
ForwardX11Trusted no
이 예에서 나는 그 가정 ~/.ssh/yourOwnPrivateKey자신의 개인 키를 포함하고 그 ~/.ssh/gitolite-admin사용자의 개인 키를 포함 gitolite-admin. IdentitiesOnly yesgit 서버에 하나의 키 만 제공되도록 선언을 포함 시켰습니다.Mark Longair가 . 다른 선언은 git의 표준 ssh 옵션입니다.
some_repo다른 키와 함께 여러 가지를 사용하려는 경우이 구성을 추가 할 수 있습니다 . 여러 저장소가 git@git.company.com있고 대부분의 저장소를 사용하는 ~/.ssh/yourOwnPrivateKey경우이 키를 호스트의 기본값으로 포함시키는 것이 더 합리적입니다. 이 경우 다음과 ~/.ssh/config같습니다.
Match Exec "[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]"
IdentityFile ~/.ssh/gitolite-admin
IdentitiesOnly yes
Host git.company.com
IdentityFile ~/.ssh/yourOwnPrivateKey
IdentitiesOnly yes
ForwardAgent no
ForwardX11 no
ForwardX11Trusted no
순서가 중요하고 Host git.company.com제한이 Match Exec하나 또는 그 뒤에 나타나야 합니다.