Одна з можливостей використання ~/.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одного або тих.