Eine Möglichkeit ~/.ssh/configbesteht darin, die MatchEinschränkung anstelle der HostEinschränkung zu verwenden. Ruft insbesondere Match Execeinen 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-adminmit 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 $SHELLVariable 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/yourOwnPrivateKeyIhren eigenen privaten Schlüssel ~/.ssh/gitolite-adminenthält und dass es den privaten Schlüssel des Benutzers enthält gitolite-admin. Ich habe die IdentitiesOnly yesErklä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.comund 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/configwä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.comEinschränkung nach der Match Execeinen oder den anderen erscheinen sollte.