Una posibilidad de usar ~/.ssh/configes usar la Matchrestricción en lugar de la Hostrestricción. En particular, Match Execllama 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-admincoincide 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 $SHELLvariable 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/yourOwnPrivateKeycontiene su propia clave privada y que ~/.ssh/gitolite-admincontiene la clave privada del usuario gitolite-admin. Incluí la IdentitiesOnly yesdeclaració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_repoque desea usar con diferentes claves. Si tiene varios repositorios git@git.company.comy 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/configserí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.comrestricción debe aparecer después del Match Execuno o los unos.