Uma possibilidade de usar ~/.ssh/configé usar a Matchrestrição em vez da Hostrestrição. Em particular, Match Execchama um comando shell para decidir se deve aplicar as declarações ou não. No bash, você pode usar o seguinte comando:
[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]
Isso usa o [comando bash para verificar se duas cadeias são iguais. Nesse caso, ele está testando se a sequência git@git.company.com:gitolite-admincorresponde à saída obtida do $(git config --get remote.origin.url)''comando.
Você pode usar qualquer outro comando que identifique o repositório no qual o shell está. Para que isso funcione, é importante ter a $SHELLvariável definida para o seu shell, no meu caso /bin/bash. O exemplo completo seria o seguinte ~/.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
Neste exemplo, presumi que ~/.ssh/yourOwnPrivateKeycontenha sua própria chave privada e que ~/.ssh/gitolite-admincontenha a chave privada do usuário gitolite-admin. Incluí a IdentitiesOnly yesdeclaração para garantir que apenas uma chave seja oferecida ao servidor git, mencionada por Mark Longair . As outras declarações são apenas opções ssh padrão para o git.
Você pode adicionar essa configuração se tiver várias some_repoque deseja usar com chaves diferentes. Se você possui vários repositórios git@git.company.come a maioria deles usa ~/.ssh/yourOwnPrivateKey, faz mais sentido incluir essa chave como padrão para o host. Nesse caso, ~/.ssh/configseria:
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
Observe que o pedido é importante e a Host git.company.comrestrição deve aparecer após o pedido Match Exec.