Une possibilité d'utilisation ~/.ssh/config
consiste à utiliser la Match
restriction au lieu de la Host
restriction. Appelle en particulier Match Exec
une 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-admin
correspond à 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 $SHELL
variable 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/yourOwnPrivateKey
contient votre propre clé privée et que ~/.ssh/gitolite-admin
contient la clé privée de l'utilisateur gitolite-admin
. J'ai inclus la IdentitiesOnly yes
dé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_repo
que vous souhaitez utiliser avec différentes clés. Si vous avez plusieurs référentiels sur git@git.company.com
et la plupart d'entre eux utilisent le, ~/.ssh/yourOwnPrivateKey
il est plus logique d'inclure cette clé par défaut pour l'hôte. Dans ce cas, ce ~/.ssh/config
serait:
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.com
restriction doit apparaître après Match Exec
celle ou celles.