Укажите 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
