Как указать частный SSH-ключ для использования при выполнении команды shell на Git?

Возможно, довольно необычная ситуация, но я хочу указать частный SSH-ключ для использования при выполнении команды shell (git) с локального компьютера.

В основном это выглядит следующим образом:

git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"

Или еще лучше (в Ruby):

with_key("/home/christoffer/ssh_keys/theuser") do
  sh("git clone git@github.com:TheUser/TheProject.git")
end

Я видел примеры подключения к удаленному серверу с помощью Net::SSH, который использует указанный закрытый ключ, но это локальная команда. Возможно ли это?

Комментарии к вопросу (4)

Ни одно из этих решений работал для меня.

Вместо этого, я уточнял @Мартин В. ЛöИСВ 'ы упоминание о установка config файл для SSH.

СШ будет искать пользователя'с ~/.файл SSH/config файл. У меня есть установки шахты как:

Host gitserv
    Hostname remote.server.com
    IdentityFile ~/.ssh/id_rsa.github
    IdentitiesOnly yes # see NOTES below

И я добавить удаленный репозиторий:

git remote add origin git@gitserv:myrepo.git

А затем команды git работать нормально для меня.

git push -v origin master

Примечания

  • В IdentitiesOnly да, то необходимо [допустить СШ по умолчанию][2] отправки личных файлов сопоставление по умолчанию именем для каждого протокола. Если у вас есть файл с именем ~/.по SSH/id_rsa что вам пробовали свои `~/.по SSH/id_rsa.на GitHub без этой опции.

Ссылки

[2]: https://serverfault.com/questions/450796/how-could-i-stop-ssh-offering-a-wrong-key/450807#450807 на "фу"и

Комментарии (18)
Решение

Что-то вроде этого должно сработать (предложено orip):

ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'

Если вы предпочитаете подшивки, вы можете попробовать следующее (хотя оно более хрупкое):

ssh-agent $(ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git)

Git вызовет SSH, который найдет своего агента по переменной окружения; у него, в свою очередь, будет загружен ключ.

Альтернативно, установка HOME также может помочь, если вы готовы установить каталог, содержащий только каталог .ssh в качестве HOME; он может содержать либо identity.pub, либо config файл, устанавливающий IdentityFile.

Комментарии (17)

Другие люди'с предложениями о `~/.по SSH/config и не особо сложные. Это может быть как простой, как:

Host github.com
  IdentityFile ~/.ssh/github_rsa
Комментарии (4)

Начиная от ЖКТ 2.3.0 мы также имеем простую команду (не нужен файл конфигурации):

GIT_SSH_COMMAND='ssh -i private_key_file' git clone user@host:repo.git

Вам может потребоваться перезагрузка для сервиса SSH на вашу машину.

Комментарии (10)

Содержимое my_git_ssh_wrapper:

#!/bin/bash

ssh -i /path/to/ssh/secret/key $1 $2

Затем вы можете использовать ключ, выполнив следующие действия:

GIT_SSH=my_git_ssh_wrapper git clone git@github.com:TheUser/TheProject.git
Комментарии (5)

Суммируя ответы и commentsлучший способ настроить Git, чтобы использовать разные файлы ключей, а потом забыть об этом, который также поддерживает различных пользователей на одном узле (например, на GitHub личный аккаунт и рабочий), который работает на Windows также, - редактирование ~/.по SSH/config файл c:\users\&lt (или ваш пользователь>.\СШ конфиг) и указать несколько идентификаторов:

Host github.com
HostName github.com
IdentityFile /path/to/your/personal/github/private/key
User dandv

Host github-work
HostName github.com
IdentityFile /path/to/your/work/github/private/key
User workuser

Затем, чтобы клонировать проект в качестве персонального пользователя, просто запустите команду регулярного git клон.

Чтобы клонировать РЕПО как workuser, бежатьgit@github-work:company/project.git git клон`.

Комментарии (6)

С Git 2.10+ (3-й квартал 2016: дата выхода сентября. 2Д, 2016), у вас есть возможность установить конфиг для GIT_SSH_COMMAND` (а не просто переменную среды, как описано в Робер Джекответ)

См. совершить 3c8ede3 (26 июня 2016) по Нгуен Мáя Нгок дуй (pclouds). <суп>(объединяются по Джунио с Hamano -- gitster -- в совершить dc21164, 19 июля 2016) в</SUP и ГТ;

новая переменная конфигурации ядра.sshCommand в укажите, какое значение для GIT_SSH_COMMAND для использования в хранилище.

core.sshCommand:

если эта переменная установлена, ГИТ выборки " и " ГИТ пуш будет использовать указанную команду вместоСШ, когда они нужны для подключения к удаленной системе. Команда находится в той же форме, что переменнаяGIT_SSH_COMMAND` окружающей среды и переопределяется, когда переменная окружения установлена.

Это означает, что Git клон может быть:

cd /path/to/my/repo
git config core.sshCommand 'ssh -i private_key_file' 
# later on
git clone host:repo.git
Комментарии (6)

Как указано здесь: https://superuser.com/a/912281/607049

Вы можете настроить его в репо:

git config core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"
git pull
git push
Комментарии (7)

Гораздо лучше идея, чтобы добавить, что хост или IP-адрес `.файл SSH/config файл, как так:

Host (a space separated list of made up aliases you want to use for the host)
    User git
    Hostname (ip or hostname of git server)
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_(the key you want for this repo)
Комментарии (10)

Я пошел с GIT_SSH переменной окружения. Здесь'моя оболочка, подобная той, что от Джо блок сверху, но обрабатывает любое количество аргументов.

Файл ~/gitwrap.sh

#!/bin/bash
ssh -i ~/.ssh/gitkey_rsa "$@"

Тогда, в мои .bashrc и добавьте следующее:

export GIT_SSH=~/gitwrap.sh
Комментарии (4)
GIT_SSH_COMMAND="ssh -i /path/to/git-private-access-key" git clone $git_repo
Комментарии (0)

Проблема это когда у тебя различными удаленными репозиториями на одном хосте (сказать github.com), и вы хотите, чтобы взаимодействовать с ними, используя различные ключи (т. е. разных на GitHub счетов).

Для того, чтобы сделать это:

  1. Сначала вы должны объявить свой разных ключей в ~/.файл SSH/config файл.
# Key for usual repositories on github.com
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa

# Key for a particular repository on github.com
Host XXX
HostName github.com
User git
IdentityFile ~/.ssh/id_other_rsa

При этом вы свяжите второй ключ новый именем "ХХХ" и для github.com.

  1. Затем вы должны изменить отдаленное происхождение вашего конкретного репозитория, так что он использует имя вы'вэ-Жюст определенными.

Перейти в локальную папку репозиторий в командной строке и отображения текущего удаленного источника:

>git remote -v
origin  git@github.com:myuser/myrepo.git (fetch)
origin  git@github.com:myuser/myrepo.git (push)

Затем измените происхождения:

>git remote set-url origin git@XXX:myuser/myrepo.git
>git remote -v
origin  git@XXX:myuser/myrepo.git (fetch)
origin  git@XXX:myuser/myrepo.git (push)

Теперь вы можете нажать, принести... с правую клавишу автоматически.

Комментарии (1)

Если ни одно из других решений здесь работать для вас, и вы создали несколько SSH-ключей, но до сих пор не может сделать простые вещи, как

git pull

затем если у вас есть два ключа SSH файлы, такие как

id_rsa
id_rsa_other_key

затем внутри репозитория Git, попробуйте:

# Run these commands INSIDE your git directory
eval `ssh-agent -s`
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_other_key

а также убедитесь, что ваш гитхаб имя Пользователя по умолчанию и имя пользователя введены правильно по:

# Run these commands INSIDE your git directory
git config user.name "Mona Lisa"
git config user.email "mona.lisa@email.com"

См https://gist.github.com/jexchan/2351996 для более подробной информации.

Комментарии (2)

Многие из этих решений не выглядело соблазнительным. Однако, я нашел общий ГИТ-обертывание-сценарий подхода по следующей ссылке, чтобы быть наиболее полезным:

Как указать файл ключа SSH с command ГИТ

Дело в том, что нет ГИТ команды, такие как следующие:

git -i ~/.ssh/thatuserkey.pem clone thatuser@myserver.com:/git/repo.git

Элвин'ы решением является использование четко определенных баш-скрипт оболочки, которая заполняет этот пробел:

git.sh -i ~/.ssh/thatuserkey.pem clone thatuser@myserver.com:/git/repo.git

Где git.sh-это:

#!/bin/bash

# The MIT License (MIT)
# Copyright (c) 2013 Alvin Abad
# https://alvinabad.wordpress.com/2013/03/23/how-to-specify-an-ssh-key-file-with-the-git-command

if [ $# -eq 0 ]; then
    echo "Git wrapper script that can specify an ssh-key file
Usage:
    git.sh -i ssh-key-file git-command
    "
    exit 1
fi

# remove temporary file on exit
trap 'rm -f /tmp/.git_ssh.$$' 0

if [ "$1" = "-i" ]; then
    SSH_KEY=$2; shift; shift
    echo "ssh -i $SSH_KEY \$@" > /tmp/.git_ssh.$$
    chmod +x /tmp/.git_ssh.$$
    export GIT_SSH=/tmp/.git_ssh.$$
fi

# in case the git command is repeated
[ "$1" = "git" ] && shift

# Run the git command
git "$@"

Я могу проверить, что при этом решается и проблема у меня была с пользователей/ключевые признание для удаленной системе Bitbucket РЕПО с помощью Git удаленное обновление,ГИТ тянуть, иклон git, все из которых теперь работают отлично вхронработа, сценарий, который был в противном случае возникают проблемы при переходе на Шелл. Я также был в состоянии вызвать этот скрипт в R и еще решить точно такую жехронвыполнить задачу (системы, напр.("в Баш git.sh -я ~/.СШ/thatuserkey.Пэм тянуть на")`).

Не то что я-такой же, как Рубин, но если R могут сделать это... о:-)

Комментарии (2)

Когда вам нужно подключиться к GitHub с нормальной запрос (ГИТ тянуть происхождения мастер), хост как * в `~/.по SSH/config, который работал для меня, любой другой хост (сказать: "на GitHub" или "ГБ") Смотрите там'т работать.

Host *
    User git
    Hostname github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_xxx
Комментарии (2)

Вам нужно создать файл ~/.по SSH/config как ниже

Host 
User 
Hostname 
IdentitiesOnly yes
IdentityFile ~/.ssh/id_rsa This is your private key file

разрешение как ниже

-rw------- $HOME/.ssh/config

Добавить ваш публичный ключ в ГИТ (кошка ~/.СШ/id_rsa_pub [или симметрична имя])

и тогда git клон, как показано ниже

git clone ssh://blahblah@blah.com/userid/test.git
Комментарии (0)

если у вас есть каталог на вашем пути, где вы хотите подписать с заданной identifyfile можно указать на использование конкретной идентификации файла через .файл SSH/config с установкой ControlPath например:

хозяин github.com ControlPath ~/проекты/работы/** Имя github.com IdentityFile ~/.СШ/id_work ГИТ пользователей

Затем СШ будет использовать указанный файл тож при выполнении команды git под данный Рабочий путь.

Комментарии (1)

В Windows с ГИТ Баш вы можете использовать следующие действия, чтобы добавить репозиторий SSH-агента Баш-с &#39;СШ-добавить "и ключ-адреса и"; в Git дистанционного добавить происхождения и Медведь рэп-адрес;&#39; например: SSH-агента Баш-с &#39;СШ-добавить /д/испытание/закрытый ключ.ППК; в Git дистанционного добавить происхождения git@git.test.com:test/test.git&#39; что закрытый ключ находится на диске D, проверьте папку Компьютер. Также, если вы хотите, чтобы клонировать репозиторий, вы можете изменить в Git дистанционного добавить происхождения с Git клон.

После ввода этого в Git Баш, он будет просить вас за пароль!

Помните, что закрытый ключ OpenSSH и закрытый ключ замазка будут иметь свои страницы!

Если вы создали свои ключи с генератор puttygen, вы должны преобразовать свой закрытый ключ для пакета OpenSSH!

Комментарии (0)

для гитлаб RSAAuthentication да

Host gitlab.com
  RSAAuthentication yes
  IdentityFile ~/.ssh/your_private_key_name
  IdentitiesOnly yes

DOC это здесь

Комментарии (1)

Вы можете использовать переменную окружения GIT_SSH. Но вам придется обернуть ssh и опции в сценарий оболочки.

См. руководство по git: man git в вашей командной оболочке.

Комментарии (0)