Uma possibilidade de usar ~/.ssh/config
é usar a Match
restrição em vez da Host
restrição. Em particular, Match Exec
chama 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-admin
corresponde à 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 $SHELL
variá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/yourOwnPrivateKey
contenha sua própria chave privada e que ~/.ssh/gitolite-admin
contenha a chave privada do usuário gitolite-admin
. Incluí a IdentitiesOnly yes
declaraçã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_repo
que deseja usar com chaves diferentes. Se você possui vários repositórios git@git.company.com
e a maioria deles usa ~/.ssh/yourOwnPrivateKey
, faz mais sentido incluir essa chave como padrão para o host. Nesse caso, ~/.ssh/config
seria:
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.com
restrição deve aparecer após o pedido Match Exec
.