Une possibilité d'utilisation ~/.ssh/configconsiste à utiliser la Matchrestriction au lieu de la Hostrestriction. Appelle en particulier Match Execune commande shell pour décider d'appliquer ou non les déclarations. En bash, vous pouvez utiliser la commande suivante:
[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]
Cela utilise la [commande bash pour vérifier si deux chaînes sont égales. Dans ce cas, il teste si la chaîne git@git.company.com:gitolite-admincorrespond à la sortie obtenue à partir de la $(git config --get remote.origin.url)''commande.
Vous pouvez utiliser n'importe quelle autre commande qui identifie le référentiel sur lequel se trouve le shell. Pour que cela fonctionne, il est important d'avoir la $SHELLvariable définie dans votre shell, dans mon cas /bin/bash. L'exemple complet serait alors le suivant ~/.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
Dans cet exemple, j'ai supposé qu'il ~/.ssh/yourOwnPrivateKeycontient votre propre clé privée et que ~/.ssh/gitolite-admincontient la clé privée de l'utilisateur gitolite-admin. J'ai inclus la IdentitiesOnly yesdéclaration pour m'assurer qu'une seule clé est offerte au serveur git, mentionnée par Mark Longair . Les autres déclarations ne sont que des options ssh standard pour git.
Vous pouvez ajouter cette configuration si vous en avez plusieurs some_repoque vous souhaitez utiliser avec différentes clés. Si vous avez plusieurs référentiels sur git@git.company.comet la plupart d'entre eux utilisent le, ~/.ssh/yourOwnPrivateKeyil est plus logique d'inclure cette clé par défaut pour l'hôte. Dans ce cas, ce ~/.ssh/configserait:
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
Notez que la commande est importante et que la Host git.company.comrestriction doit apparaître après Match Execcelle ou celles.