Одна з можливостей використання ~/.ssh/config
- використовувати Match
обмеження замість Host
обмеження. Зокрема, Match Exec
викликає команду shell, щоб вирішити, застосовувати декларації чи ні. У bash ви можете використовувати таку команду:
[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]
Для цього використовується команда bash [
для перевірки рівності двох рядків. У цьому випадку це тестування, чи рядок git@git.company.com:gitolite-admin
відповідає результату, отриманому з $(git config --get remote.origin.url)''
команди.
Ви можете використовувати будь-яку іншу команду, яка ідентифікує сховище, на якому знаходиться оболонка. Для цього важливо мати $SHELL
змінну, визначену для вашої оболонки, в моєму випадку /bin/bash
. Повний приклад може бути наступним ~/.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
У цьому прикладі я припускав, що він ~/.ssh/yourOwnPrivateKey
містить ваш власний приватний ключ, який ~/.ssh/gitolite-admin
містить приватний ключ користувача gitolite-admin
. Я включив IdentitiesOnly yes
декларацію, щоб переконатися, що на сервер git пропонується лише один ключ, згаданий Марком Лонгаіром . Інші декларації - це лише стандартні параметри ssh для git.
Ви можете додати цю конфігурацію, якщо у вас є кілька, some_repo
які ви хочете використовувати з різними клавішами. Якщо у вас є декілька сховищ, git@git.company.com
і більшість з них використовує ~/.ssh/yourOwnPrivateKey
його, має більше сенсу включити цей ключ як основний для хоста. У цьому випадку ~/.ssh/config
було б:
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
Зауважте, що порядок має значення, а Host git.company.com
обмеження має з’явитися після Match Exec
одного або тих.