Укажите SSH-ключ для git push для данного домена
у меня есть следующий вариант использования: я хотел бы иметь возможность нажать на git@git.company.com:gitolite-admin
используя закрытый ключ пользователя gitolite-admin
, в то время как я хочу нажать на git@git.company.com:some_repo
используя' мой собственный ' закрытый ключ. АФАИК, я не могу решить это с помощью ~/.ssh/config
, потому что имя пользователя и имя сервера идентичны в обоих случаях. Поскольку я в основном использую свой собственный закрытый ключ, у меня это определено в ~/.ssh/config
на git@git.company.com
. Кто-нибудь знает способ переопределить ключ, который используется для одного git
вызов?
(в сторону: gitolite различает, кто делает нажатие на основе ключа, так что это не проблема, с точки зрения доступа, владения и аудита, что строка user@server идентична для разных пользователей.)
8 ответов:
даже если пользователь и хост одинаковы, их все равно можно отличить в
~/.ssh/config
. Например, если ваша конфигурация выглядит следующим образом:Host gitolite-as-alice HostName git.company.com User git IdentityFile /home/whoever/.ssh/id_rsa.alice IdentitiesOnly yes Host gitolite-as-bob HostName git.company.com User git IdentityFile /home/whoever/.ssh/id_dsa.bob IdentitiesOnly yes
тогда вы просто использовать
gitolite-as-alice
иgitolite-as-bob
вместо имени хоста в URL-адресе:git remote add alice git@gitolite-as-alice:whatever.git git remote add bob git@gitolite-as-bob:whatever.git
Примечание
вы хотите включить опцию
IdentitiesOnly yes
чтобы предотвратить использование идентификаторов по умолчанию. В противном случае, если у вас также есть id-файлы, соответствующие именам по умолчанию, они будут сначала опробованы, потому что в отличие от других конфигураций параметры (соблюдать "первых побед") кIdentityFile
опции добавляет к списку идентичностей, чтобы попробовать. Смотрите: https://serverfault.com/questions/450796/how-could-i-stop-ssh-offering-a-wrong-key/450807#450807
альтернативный подход к одно предложенное выше Марк Longair использовать псевдоним, который будет работать любой команда git, on любой удаленный, с альтернативным ключом SSH. Идея заключается в основном в том, чтобы переключить вашу SSH-личность при запуске команд git.
преимущества по отношению к подходу псевдонима хоста в другом ответе:
- будет работать с любой команды git или псевдонимы, даже если вы не можете укажите
remote
явно.- проще работать со многими репозиториями, потому что вам нужно настроить его только один раз на клиентской машине, а не один раз на репозитории на каждой клиентской машине.
я использую несколько небольших скриптов и псевдоним git
admin
. Таким образом, я могу сделать, например:git admin push
чтобы нажать на пульт по умолчанию, используя альтернативный ключ SSH ("admin"). Опять же, вы можете использовать любую команду (не только
push
) С этого псевдонима. Вы даже могли бы сделатьgit admin clone ...
чтобы клонировать репозиторий, к которому у вас будет доступ только с помощью вашего ключа "admin".Шаг 1: создайте альтернативные ключи SSH, при необходимости установите парольную фразу, Если вы делаете это на чужой машине.
Шаг 2: создать скрипт под названием "ssh-as.sh" это запускает материал, который использует SSH, но использует данный ключ SSH, а не по умолчанию:
#!/bin/bash exec ssh ${SSH_KEYFILE+-i "$SSH_KEYFILE"} "$@"
Шаг 3: создать скрипт под названием "git-as.sh" что выполняет команды git, используя данный ключ.
#!/bin/bash SSH_KEYFILE= GIT_SSH=${BASH_SOURCE%/*}/ssh-as.sh exec git "${@:2}"
Шаг 4: добавить псевдоним (используя что-то подходящее для "PATH_TO_SCRIPTS_DIR" ниже):
# Run git commands as the SSH identity provided by the keyfile ~/.ssh/admin git config --global alias.admin \!"PATH_TO_SCRIPTS_DIR/git-as.sh ~/.ssh/admin"
больше деталей на: http://noamlewis.wordpress.com/2013/01/24/git-admin-an-alias-for-running-git-commands-as-a-privileged-ssh-identity/
вы можете использовать переменную среды git
GIT_SSH_COMMAND
. Запустите это в своем терминале под репозиторием git:GIT_SSH_COMMAND='ssh -i ~/.ssh/your_private_key' git submodule update --init
заменить
~/.ssh/your_private_key
С путем SSH закрытый ключ, который вы хотите использовать. И вы можете изменить последующую команду git (в примере этоgit submodule update --init
) какgit pull
,git fetch
и т. д.
Другой альтернативой является использование ssh-ident, чтобы управлять своими SSH-идентификаторами.
он автоматически загружает и использует различные ключи на основе текущего рабочего каталога, параметры ssh и так далее... это означает, что вы можете легко иметь рабочий/ каталог и частный/ каталог, которые прозрачно в конечном итоге используют разные ключи и идентификаторы с ssh.
одна система на базе Unix (Linux, BSD, Mac OS X), идентификатор по умолчанию хранится в каталоге $HOME/.ssh в 2 файлах:
private key: $HOME/.ssh/id_rsa public key: $HOME/.ssh/id_rsa.pub
Когда вы используетеssh
без-i
, он использует закрытый ключ по умолчанию для проверки подлинности в удаленной системе.если у вас есть другой секретный ключ, который вы хотите использовать, например $HOME/.ssh / deploy_key, вы должны использовать
ssh -i ~/.ssh/deploy_key ...
это раздражает. Вы можете добавить следующее линии в ваш $HOME/.файл :
ssh-add ~/.ssh/deploy_key ssh-add ~/.ssh/id_rsa
так что каждый раз, когда вы используете
ssh
илиgit
илиscp
(фактическиssh
тоже), вы не должны использовать опцию
Я использую Git Bash на Win7. Для меня сработало следующее.
создайте файл конфигурации в~/.ssh / config или c:/users/[your_user_name]/.ssh / config. В файле введите:
Host your_host.com IdentityFile [absolute_path_to_your_.ssh]\id_rsa
Я думаю, что хост должен быть URL, а не просто "имя" или ref для вашего хоста. Например,
Host github.com IdentityFile c:/users/[user_name]/.ssh/id_rsa
путь также может быть записан в /c / users/[имя_пользователя]/.... формат
решение, предоставленное Джордано Скальцо, отлично тоже. https://stackoverflow.com/a/9149518/1738546