Una posibilidad de usar ~/.ssh/config
es usar la Match
restricción en lugar de la Host
restricción. En particular, Match Exec
llama a un comando de shell para decidir si aplica las declaraciones o no. En bash puedes usar el siguiente comando:
[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]
Esto usa el [
comando bash para verificar si dos cadenas son iguales. En este caso, está probando si la cadena git@git.company.com:gitolite-admin
coincide con la salida que se obtiene del $(git config --get remote.origin.url)''
comando.
Puede usar cualquier otro comando que identifique el repositorio en el que se encuentra el shell. Para que esto funcione es importante tener la $SHELL
variable definida en su shell, en mi caso /bin/bash
. El ejemplo completo sería el siguiente ~/.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
En este ejemplo supuse que ~/.ssh/yourOwnPrivateKey
contiene su propia clave privada y que ~/.ssh/gitolite-admin
contiene la clave privada del usuario gitolite-admin
. Incluí la IdentitiesOnly yes
declaración para asegurarme de que solo se ofrezca una clave al servidor git, mencionada por Mark Longair . Las otras declaraciones son solo opciones ssh estándar para git.
Puede agregar esta configuración si tiene varias some_repo
que desea usar con diferentes claves. Si tiene varios repositorios git@git.company.com
y la mayoría de ellos los usa ~/.ssh/yourOwnPrivateKey
, tiene más sentido incluir esta clave como predeterminada para el host. En este caso el ~/.ssh/config
sería:
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
Tenga en cuenta que el orden importa y la Host git.company.com
restricción debe aparecer después del Match Exec
uno o los unos.