Jedną z możliwości wykorzystania ~/.ssh/config
jest użycie Match
ograniczenia zamiast Host
ograniczenia. W szczególności Match Exec
wywoł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-admin
pasuje 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ć $SHELL
zmienną 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/yourOwnPrivateKey
zawiera Twój prywatny klucz i że ~/.ssh/gitolite-admin
zawiera prywatny klucz użytkownika gitolite-admin
. I obejmował IdentitiesOnly yes
deklarację, 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.com
i większość z nich korzysta z ~/.ssh/yourOwnPrivateKey
tego, bardziej sensowne jest włączenie tego klucza jako domyślnego dla hosta. W takim przypadku ~/.ssh/config
był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.com
ograniczenie powinno pojawić się po Match Exec
jednym lub jednym.