Возможно, это довольно необычная ситуация, но я хочу указать закрытый 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, который использует указанный закрытый ключ, но это локальная команда. Является ли это возможным?
-i
опции, какssh
у.git config core.sshCommand 'ssh -i private_key_file'
. Смотрите мой ответ нижеОтветы:
Примерно так должно работать (предложено orip):
если вы предпочитаете подоболочки, попробуйте следующее (хотя оно более хрупкое):
Git вызовет SSH, который найдет своего агента по переменной окружения; это, в свою очередь, загрузит ключ.
В качестве альтернативы, настройка
HOME
также может помочь, если вы готовы настроить каталог, который содержит только.ssh
каталог какHOME
; это может содержать либо identity.pub, либо параметр конфигурации файла IdentityFile.источник
ssh-agent bash -c 'ssh-add sshkey; git clone url'
ssh-agent $(..)
Синтаксис не работает для меня , и я не знаю , как это предполагают , чтобы работать: (ба) ш должны выполнять команды в$(..)
первом, а затем запустить SSH-агент с выходом в качестве параметра.Ни одно из этих решений не помогло мне.
Вместо этого я уточняю упоминание @Martin v. Löwis о настройке
config
файла для SSH.SSH будет искать
~/.ssh/config
файл пользователя . У меня есть мои настройки как:И я добавляю удаленный репозиторий git:
И тогда у меня нормально работают команды git.
НОТЫ
IdentitiesOnly yes
Требуется , чтобы предотвратить поведение SSH по умолчанию отправки файла личных данных , соответствующее имени файла по умолчанию для каждого протокола. Если у вас есть файл с именем,~/.ssh/id_rsa
который будет проверен ДО вашего~/.ssh/id_rsa.github
без этой опции.Ссылки
источник
Host remote.server.com
и продолжать использовать оригинальный URLchmod 600 ~/.ssh/config
(см. Здесь ). И если вы используете GitHub, заменитеHost gitserv
сHost github.com
, опускаетHostname remote.server.com
, и добавить пульт дистанционного управления сgit remote add origin git@github.com:user_name/repo_name.git
.Начиная с Git 2.3.0 у нас также есть простая команда (файл конфигурации не требуется):
источник
cannot run ssh -i /home/vagrant/.ssh/git: No such file or directory
хотя это существует444 Nov 16 18:12 /home/vagrant/.ssh/git
сls -l /home/vagrant/.ssh/git
chmod 400 <path-to-private-key-file>
. В противном случае команда git может завершиться неудачно без специального сообщения об ошибке ...-o IdentitiesOnly=yes
чтобы убедиться, что ключ, указанный с помощью,-i
будет использован (в отличие от ключа от агента SSH).Предложения других людей
~/.ssh/config
очень сложны. Это может быть так просто, как:источник
IdentitiesOnly
тоже нужна опция.git remote add ssh://personal/org/proj.git && git remote add ssh://corporate/org/proj.git
. Тогда вы конфиг выглядит какHost personal HostName github.com ... Host corporate HostName github.com
Содержимое my_git_ssh_wrapper:
Затем вы можете использовать ключ, выполнив:
источник
GIT_SSH="git_wrapper" git clone ssh://user@server/path/to/project"
С мерзавцем 2.10+ (Q3 2016: выпущен сентября 2d, 2016), у вас есть возможность задавать конфигурации для
GIT_SSH_COMMAND
(и не только переменную окружения , как описано в Робер Джек «s ответ )См. Коммит 3c8ede3 (26 июня 2016 г.) Нгуена Тхая Нгука Дуй (
pclouds
) .(Слиты Junio C Hamano -
gitster
- в фиксации dc21164 , 19 июля 2016)Это
git clone
может быть:Вы даже можете установить его только для одной команды:
Это проще , чем установки
GIT_SSH_COMMAND
переменной окружения, которая, на Windows, а отметил на Mátyás Кути-Kreszács , будетисточник
git -c core.sshCommand="ssh -i private_key_file" clone host:repo.git
а затем установить конфигурациюgit config core.sshCommand 'ssh -i private_key_file'
Чтобы суммировать ответы и комментарии , лучший способ настроить git на использование разных ключевых файлов, а затем забыть об этом, который также поддерживает разных пользователей для одного и того же хоста (например, личную учетную запись GitHub и рабочую), которая работает в Windows. а также, чтобы отредактировать
~/.ssh/config
(илиc:\Users\<your user>\.ssh\config
) и указать несколько идентификаторов:Затем, чтобы клонировать проект в качестве личного пользователя, просто запустите обычную
git clone
команду.Чтобы клонировать репо как
workuser
, запуститеgit clone git@github-work:company/project.git
.источник
dandv
иworkuser
поддержал мой пример, «например, личную учетную запись GitHub и рабочую».dandv
мое имя пользователя GitHubIdentitiesOnly yes
в свой конфигурационный файл ssh.Как указано здесь: https://superuser.com/a/912281/607049
Вы можете настроить его для репо:
источник
-F /dev/null
? Насколько я вижу, это изменит configFile по~/.ssh/config
умолчанию, но почему это желательно? Для обеспечения изолированной команды?Проблема в том, что у вас есть разные удаленные репозитории на одном хосте (скажем, github.com), и вы хотите взаимодействовать с ними, используя разные ключи ssh (то есть разные учетные записи GitHub).
Для этого:
Сначала вы должны объявить ваши различные ключи в
~/.ssh/config
файле.Этим вы связываете второй ключ с новым понятным именем «XXX» для github.com.
Затем вы должны изменить удаленный источник вашего конкретного репозитория, чтобы он использовал понятное имя, которое вы только что определили.
Перейдите в папку локального репозитория в командной строке и отобразите текущий удаленный источник:
Затем измените происхождение с помощью:
Теперь вы можете нажать, выбрать ... с правой кнопкой автоматически.
источник
или
источник
Лучше добавить этот хост или ip в
.ssh/config
файл следующим образом:источник
git clone git@gh-work:repo/project.git
в моем ~ / .ssh / config у меня есть два раздела, которые оба используют github.com для HostName. У них просто разные IdentityFile и Host~/.ssh/config
pastebin.com/8rYn7yCiЯ пошел с переменной среды GIT_SSH. Вот моя обертка, похожая на ту, что была у Джо Блока сверху, но она обрабатывает любое количество аргументов.
Файл ~ / gitwrap.sh
Затем в моем .bashrc добавьте следующее:
источник
gitwrap.sh
, например,/home/ubuntu/gitwrap.sh
-o StrictHostKeyChecking=no
в команду sshЕсли ни одно из других решений здесь не работает для вас, и вы создали несколько ssh-ключей, но по-прежнему не можете делать простые вещи, такие как
тогда предположим, что у вас есть два файла ключей ssh, таких как
тогда внутри git repo попробуйте:
а также убедитесь, что ваше имя пользователя и ID пользователя по умолчанию на github правильны:
См. Https://gist.github.com/jexchan/2351996 для получения дополнительной информации.
источник
Could not open a connection to your authentication agent.
, попробуйте$ eval `ssh-agent -s`
и попробуйте снова.ssh-add
командная уловка сработала для меня. Добавьте ключ идентификации в список тех, которые проверяются при аутентификации ssh. Это сработало для меня хорошо!ssh-add
?.git
внутри репо, а не программы git глобально. Вы можете использовать,--global
чтобы установить глобальное имя пользователя и адрес электронной почты.Когда вам нужно подключиться к github с помощью обычного запроса (
git pull origin master
), настройка Host как*
в случае~/.ssh/config
с мной работала, любой другой Host (скажем, «github» или «gb») не работал.источник
Host my-host-alias
, вы должны установитьremote.origin.url=git@my-host-alias:[username]/[repo].git
.Многие из этих решений выглядели заманчиво. Тем не менее, я нашел общий подход git-wrapping-script по следующей ссылке наиболее полезным:
Как указать файл ключей ssh с помощью
git
командыДело в том, что
git
такой команды нет :Решение Элвина заключается в использовании четко определенного сценария bash-wrapper, который заполняет этот пробел:
Где
git.sh
находитсяЯ могу подтвердить , что это решило проблему у меня был с пользовательским / ключом распознавания для удаленного Bitbucket репо с
git remote update
,git pull
иgit clone
; все это теперь отлично работает вcron
скрипте задания, в противном случае возникли проблемы с перемещением по ограниченной оболочке. Я также смог вызвать этот скрипт изнутри R и все еще решить ту жеcron
проблему выполнения (напримерsystem("bash git.sh -i ~/.ssh/thatuserkey.pem pull")
).Не то чтобы R такой же, как Ruby, но если R может это сделать ... O :-)
источник
GIT_SSH_COMMAND="ssh -i ~/.ssh/thatuserkey.pem" git clone clone thatuser@myserver.com:/git/repo.git
согласно ответу Роберта Джека Уилла ?если на вашем пути есть каталог, в котором вы хотите подписать данный файл идентификации, вы можете указать, использовать ли конкретный файл идентификации через файл .ssh / config, установив
ControlPath
например:Затем
ssh
будет использовать указанный файл идентификации при выполнении команд git по заданному рабочему пути.источник
ControlMaster auto
иControlPersist yes
, так что вам не нужно каждый раз вводить пароль заново. Нашел информацию в этой статьеВам нужно создать ~ / .ssh / config, как показано ниже
разрешение, как показано ниже
Добавьте ваш открытый ключ в ваш git (cat ~ / .ssh / id_rsa_pub [или имя симилара])
а затем мерзавец клон, как показано ниже
источник
Много хороших ответов, но некоторые из них предполагают предварительные знания администрации.
Я думаю , что это важно , чтобы явно подчеркнуть , что если вы начали свой проект по клонированию веб URL -
https://github.com/<user-name>/<project-name>.git
то вам необходимо убедиться , что сделать
url
значение при[remote "origin"]
в.git/config
было изменено на URL SSH (см блок кода ниже).Кроме того, убедитесь, что вы добавили
sshCommmand
как указано ниже:Подробнее об этом читайте здесь .
источник
В Windows с Git Bash вы можете использовать следующее, чтобы добавить репозиторий,
ssh-agent bash -c 'ssh-add "key-address"; git remote add origin "rep-address"'
например:ssh-agent bash -c 'ssh-add /d/test/PrivateKey.ppk; git remote add origin git@git.test.com:test/test.git'
какой закрытый ключ находится на диске D, проверка папки компьютера. Кроме того, если вы хотите клонировать репозиторий, вы можете изменитьgit remote add origin
сgit clone
.После ввода этого в Git Bash, он попросит вас ввести пароль!
Имейте в виду, что закрытый ключ openssh и закрытый ключ putty различны!
Если вы создали свои ключи с помощью puttygen, вы должны преобразовать свой закрытый ключ в openssh!
источник
Вы можете использовать переменную окружения GIT_SSH. Но вам нужно будет обернуть ssh и параметры в скрипт оболочки.
Смотрите руководство git:
man git
в командной оболочке.источник
Я использую
zsh
и различные ключиssh-agent
автоматически загружаются в мою оболочку zsh для других целей (например, для доступа к удаленным серверам) на моем ноутбуке. Я изменил ответ @ Ника и использую его для одного из моих репозиториев, которое нужно часто обновлять. (В этом случаеdotfiles
мне нужна одна и та же и последняя версия на всех моих машинах, где бы я ни работал.)cd
репо прошло успешно, вытащите из удаленного репоисточник
для gitlab
RSAAuthentication yes
Док здесь
источник
Чтобы переменная окружения GIT_SSH_COMMAND работала под Windows вместо:
Использование:
Цитата должна быть похожа
Некоторые backgorund: https://stackoverflow.com/a/34402887/10671021
источник
Проблема с этим методом, по крайней мере при запуске bash.exe в Windows, заключается в том, что он будет каждый раз создавать новый процесс, который останется бездействующим.
Если вы хотите использовать это для синхронизации репо по расписанию, вам нужно добавить «&& ssh-agent -k» в конце.
Что-то вроде:
ssh-agent -k завершит процесс, когда он будет завершен.
источник
Если номер порта SSH не 22 (по умолчанию), добавьте
Port xx
в~/.ssh/config
В моем случае (синология)
Затем клонировать, используя название хоста в конфигурации. ("my_synology". чтобы избежать @chopstik "*")
источник
Если вы похожи на меня, вы можете:
Держите ваши ключи SSH организованными
Сделайте ваши команды git clone простыми
Обрабатывать любое количество ключей для любого количества репозиториев.
Сократите обслуживание ssh-ключей.
Я храню свои ключи в своем
~/.ssh/keys
каталоге.Я предпочитаю соглашение по конфигурации.
Я думаю, что кодекс - это закон; чем проще, тем лучше.
ШАГ 1 - Создание псевдонима
Добавьте этот псевдоним в вашу оболочку:
alias git-clone='GIT_SSH=ssh_wrapper git clone'
ШАГ 2 - Создание сценария
Добавьте этот скрипт ssh_wrapper в ваш путь :
ПРИМЕРЫ
Используйте ключ github.com/l3x:
В следующем примере также используется ключ github.com/l3x (по умолчанию):
Используйте ключ bitbucket.org/lsheehan:
НОТЫ
Измените значение по умолчанию SSH_KEY в скрипте ssh_wrapper на то, что вы используете большую часть времени. Таким образом, вам не нужно использовать переменную KEY большую часть времени.
Вы можете подумать: «Эй! Многое происходит с псевдонимом, скриптом и некоторым каталогом ключей», но для меня это соглашение. Почти все мои рабочие станции (и серверы в этом отношении) настроены одинаково.
Моя цель здесь - упростить команды, которые я выполняю регулярно.
Мои условные обозначения, например скрипты Bash, псевдонимы и т. Д., Создают согласованную среду и помогают мне быть проще.
Поцелуй и имена имеют значение.
Дополнительные советы по дизайну можно найти в главе 4 SOLID Design in Go из моей книги: https://www.amazon.com/Learning-Functional-Programming-Lex-Sheehan-ebook/dp/B0725B8MYW
Надеюсь, это поможет. - Лекс
источник
Вы можете попробовать пакет sshmulti npm для поддержки нескольких ключей ssh.
источник
Мне просто нужно было добавить ключ и запустить git clone снова.
источник
Вот ключ взлома ssh, который я нашел, находя решение этой проблемы:
Например, у вас есть 2 разных набора ключей:
key1, key1.pub, key2, key2.pub
Храните эти ключи в своем
.ssh
каталогеТеперь в вашем файле
.bashrc
или.bash_profile
псевдониме добавьте эти командыalias key1='cp ~/.ssh/key1 id_rsa && cp ~/.ssh/key1.pub id_rsa.pub'
alias key2='cp ~/.ssh/key2 id_rsa && cp ~/.ssh/key2.pub id_rsa.pub'
Вуаля! У вас есть ярлык для переключения клавиш в любое время!
Надеюсь, что это работает для вас.
источник