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