Возможно, довольно необычная ситуация, но я хочу указать частный SSH-ключ для использования при выполнении команды shell (git) с локального компьютера.
В основном это выглядит следующим образом:
git clone [email protected]:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"
Или еще лучше (в Ruby):
with_key("/home/christoffer/ssh_keys/theuser") do
sh("git clone [email protected]:TheUser/TheProject.git")
end
Я видел примеры подключения к удаленному серверу с помощью Net::SSH, который использует указанный закрытый ключ, но это локальная команда. Возможно ли это?
Ни одно из этих решений работал для меня.
Вместо этого, я уточнял @Мартин В. ЛöИСВ 'ы упоминание о установка 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 на "фу"и
Что-то вроде этого должно сработать (предложено orip):
ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone [email protected]:user/project.git'
Если вы предпочитаете подшивки, вы можете попробовать следующее (хотя оно более хрупкое):
ssh-agent $(ssh-add /somewhere/yourkey; git clone [email protected]:user/project.git)
Git вызовет SSH, который найдет своего агента по переменной окружения; у него, в свою очередь, будет загружен ключ.
Альтернативно, установка HOME
также может помочь, если вы готовы установить каталог, содержащий только каталог .ssh
в качестве HOME
; он может содержать либо identity.pub, либо config файл, устанавливающий IdentityFile.
Начиная от ЖКТ 2.3.0 мы также имеем простую команду (не нужен файл конфигурации):
GIT_SSH_COMMAND='ssh -i private_key_file' git clone user@host:repo.git
Вам может потребоваться перезагрузка для сервиса SSH на вашу машину.
Содержимое my_git_ssh_wrapper:
#!/bin/bash
ssh -i /path/to/ssh/secret/key $1 $2
Затем вы можете использовать ключ, выполнив следующие действия:
GIT_SSH=my_git_ssh_wrapper git clone [email protected]:TheUser/TheProject.git
Суммируя ответы и commentsлучший способ настроить Git, чтобы использовать разные файлы ключей, а потом забыть об этом, который также поддерживает различных пользователей на одном узле (например, на GitHub личный аккаунт и рабочий), который работает на Windows также, - редактирование ~/.по SSH/config файл
c:\users\< (или ваш пользователь>.\СШ конфиг) и указать несколько идентификаторов:
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 клон`.
С 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
Как указано здесь: https://superuser.com/a/912281/607049
Вы можете настроить его в репо:
git config core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"
git pull
git push
Гораздо лучше идея, чтобы добавить, что хост или 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)
Я пошел с GIT_SSH переменной окружения. Здесь'моя оболочка, подобная той, что от Джо блок сверху, но обрабатывает любое количество аргументов.
Файл ~/gitwrap.sh
#!/bin/bash
ssh -i ~/.ssh/gitkey_rsa "$@"
Тогда, в мои .bashrc и добавьте следующее:
export GIT_SSH=~/gitwrap.sh
GIT_SSH_COMMAND="ssh -i /path/to/git-private-access-key" git clone $git_repo
Проблема это когда у тебя различными удаленными репозиториями на одном хосте (сказать github.com), и вы хотите, чтобы взаимодействовать с ними, используя различные ключи (т. е. разных на GitHub счетов).
Для того, чтобы сделать это:
# 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.
Перейти в локальную папку репозиторий в командной строке и отображения текущего удаленного источника:
>git remote -v
origin [email protected]:myuser/myrepo.git (fetch)
origin [email protected]: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)
Теперь вы можете нажать, принести... с правую клавишу автоматически.
Если ни одно из других решений здесь работать для вас, и вы создали несколько 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 "[email protected]"
См https://gist.github.com/jexchan/2351996 для более подробной информации.
Многие из этих решений не выглядело соблазнительным. Однако, я нашел общий ГИТ-обертывание-сценарий подхода по следующей ссылке, чтобы быть наиболее полезным:
Как указать файл ключа SSH с command ГИТ
Дело в том, что нет ГИТ
команды, такие как следующие:
git -i ~/.ssh/thatuserkey.pem clone [email protected]:/git/repo.git
Элвин'ы решением является использование четко определенных баш-скрипт оболочки, которая заполняет этот пробел:
git.sh -i ~/.ssh/thatuserkey.pem clone [email protected]:/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 могут сделать это... о:-)
Когда вам нужно подключиться к GitHub с нормальной запрос (ГИТ тянуть происхождения мастер
), хост как *
в `~/.по SSH/config, который работал для меня, любой другой хост (сказать: "на GitHub" или "ГБ") Смотрите там'т работать.
Host *
User git
Hostname github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_xxx
Вам нужно создать файл ~/.по SSH/config как ниже
Host <Your bitbucket server>
User <userid>
Hostname <Your bitbucket server as above>
IdentitiesOnly yes
IdentityFile ~/.ssh/id_rsa<file> This is your private key file
разрешение как ниже
-rw------- $HOME/.ssh/config
Добавить ваш публичный ключ в ГИТ (кошка ~/.СШ/id_rsa_pub [или симметрична имя])
и тогда git клон, как показано ниже
git clone ssh://[email protected]/userid/test.git
если у вас есть каталог на вашем пути, где вы хотите подписать с заданной identifyfile можно указать на использование конкретной идентификации файла через .файл SSH/config с установкой ControlPath
например:
хозяин github.com ControlPath ~/проекты/работы/** Имя github.com IdentityFile ~/.СШ/id_work ГИТ пользователей
Затем СШ
будет использовать указанный файл тож при выполнении команды git под данный Рабочий путь.
В Windows с ГИТ Баш вы можете использовать следующие действия, чтобы добавить репозиторий
SSH-агента Баш-с 'СШ-добавить "и ключ-адреса и"; в Git дистанционного добавить происхождения и Медведь рэп-адрес;'
например: SSH-агента Баш-с 'СШ-добавить /д/испытание/закрытый ключ.ППК; в Git дистанционного добавить происхождения [email protected]:test/test.git'
что закрытый ключ находится на диске D, проверьте папку Компьютер. Также, если вы хотите, чтобы клонировать репозиторий, вы можете изменить в Git дистанционного добавить происхождения
с Git клон
.
После ввода этого в Git Баш, он будет просить вас за пароль!
Помните, что закрытый ключ OpenSSH и закрытый ключ замазка будут иметь свои страницы!
Если вы создали свои ключи с генератор puttygen, вы должны преобразовать свой закрытый ключ для пакета OpenSSH!
для гитлаб RSAAuthentication да
Host gitlab.com
RSAAuthentication yes
IdentityFile ~/.ssh/your_private_key_name
IdentitiesOnly yes