Одной из возможностей использования ~/.ssh/config
является использование Match
ограничения вместо Host
ограничения. В частности, Match Exec
вызывает команду оболочки, чтобы решить, применять ли объявления или нет. В 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
одного или одного.