Jedną z możliwości wykorzystania ~/.ssh/configjest użycie Matchograniczenia zamiast Hostograniczenia. W szczególności Match Execwywołuje polecenie powłoki, aby zdecydować, czy zastosować deklaracje, czy nie. W bashu możesz użyć następującego polecenia:
[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]
Używa [polecenia bash do sprawdzenia, czy dwa ciągi są równe. W tym przypadku sprawdza się, czy ciąg znaków git@git.company.com:gitolite-adminpasuje do wyniku uzyskanego z $(git config --get remote.origin.url)''polecenia.
Możesz użyć dowolnego innego polecenia identyfikującego repozytorium, w którym znajduje się powłoka. Aby to zadziałało, ważne jest, aby mieć $SHELLzmienną zdefiniowaną dla twojej powłoki, w moim przypadku /bin/bash. Pełny przykład byłby następujący ~/.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
W tym przykładzie założyłem, że ~/.ssh/yourOwnPrivateKeyzawiera Twój prywatny klucz i że ~/.ssh/gitolite-adminzawiera prywatny klucz użytkownika gitolite-admin. I obejmował IdentitiesOnly yesdeklarację, aby upewnić się, że tylko jeden klucz jest przeznaczona do serwera git, wspomnianej przez Mark Longair . Pozostałe deklaracje są tylko standardowymi opcjami ssh dla git.
Możesz dodać tę konfigurację, jeśli masz kilka some_repo, których chcesz używać z różnymi kluczami. Jeśli masz kilka repozytoriów git@git.company.comi większość z nich korzysta z ~/.ssh/yourOwnPrivateKeytego, bardziej sensowne jest włączenie tego klucza jako domyślnego dla hosta. W takim przypadku ~/.ssh/configbyłoby to:
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
Pamiętaj, że kolejność ma znaczenie, a Host git.company.comograniczenie powinno pojawić się po Match Execjednym lub jednym.