Eine Möglichkeit ~/.ssh/config
besteht darin, die Match
Einschränkung anstelle der Host
Einschränkung zu verwenden. Ruft insbesondere Match Exec
einen Shell-Befehl auf, um zu entscheiden, ob die Deklarationen angewendet werden sollen oder nicht. In bash können Sie den folgenden Befehl verwenden:
[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]
Dies verwendet den [
Befehl bash, um zu überprüfen, ob zwei Zeichenfolgen gleich sind. In diesem Fall wird geprüft, ob die Zeichenfolge git@git.company.com:gitolite-admin
mit der vom $(git config --get remote.origin.url)''
Befehl erhaltenen Ausgabe übereinstimmt .
Sie können jeden anderen Befehl verwenden, der das Repository identifiziert, in dem sich die Shell befindet. Damit dies funktioniert, ist es in meinem Fall wichtig , dass die $SHELL
Variable für Ihre Shell definiert ist /bin/bash
. Das vollständige Beispiel wäre dann das folgende ~/.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
In diesem Beispiel habe ich angenommen, dass es ~/.ssh/yourOwnPrivateKey
Ihren eigenen privaten Schlüssel ~/.ssh/gitolite-admin
enthält und dass es den privaten Schlüssel des Benutzers enthält gitolite-admin
. Ich habe die IdentitiesOnly yes
Erklärung beigefügt , um sicherzustellen, dass dem von Mark Longair erwähnten Git-Server nur ein Schlüssel angeboten wird . Die anderen Deklarationen sind nur Standard-SSH-Optionen für Git.
Sie können diese Konfiguration hinzufügen, wenn Sie mehrere haben some_repo
, die Sie mit verschiedenen Schlüsseln verwenden möchten. Wenn Sie mehrere Repositorys haben git@git.company.com
und die meisten von ihnen das verwenden ~/.ssh/yourOwnPrivateKey
, ist es sinnvoller, diesen Schlüssel als Standard für den Host einzuschließen. In diesem Fall ~/.ssh/config
wäre das:
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
Beachten Sie, dass die Reihenfolge wichtig ist und die Host git.company.com
Einschränkung nach der Match Exec
einen oder den anderen erscheinen sollte.