Как указать закрытый SSH-ключ для использования при выполнении команды оболочки на Git? - PullRequest
886 голосов
/ 30 декабря 2010

Возможно, это довольно необычная ситуация, но я хочу указать закрытый 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, который использует указанный закрытый ключ, но это локальная команда. Возможно ли это?

Ответы [ 24 ]

10 голосов
/ 18 января 2019

GIT_SSH_COMMAND = "ssh -i / path / to / git-private-access-key" git clone $ git_repo

10 голосов
/ 21 ноября 2018

Если ни одно из других решений здесь не работает для вас, и вы создали несколько 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

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

# 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 для получения дополнительной информации.

9 голосов
/ 21 февраля 2015

Многие из этих решений выглядели заманчиво.Однако я нашел общий подход git-wrapping-script по следующей ссылке наиболее полезным:

Как указать файл ключей ssh ​​с помощью команды git

Дело в том, что нет команды git, такой как следующее:

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

Решение Элвина заключается в использовании четко определенного сценария bash-wrapper, который заполняет этот пробел:

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 remote update, git pullgit clone;все это теперь отлично работает в скрипте задания cron, в котором иначе возникли проблемы с навигацией по ограниченной оболочке.Я также смог вызвать этот скрипт изнутри R и все еще решить ту же самую проблему cron execute (например, system("bash git.sh -i ~/.ssh/thatuserkey.pem pull")).

Не то, что R такой же, как Ruby, но если R может это сделать... O: -)

7 голосов
/ 06 мая 2013

Когда вам нужно подключиться к github с обычным запросом (git pull origin master), установка Host как * в ~/.ssh/config работала для меня, любой другой хост (скажем, "github" или "gb") не работал не работает.

Host *
    User git
    Hostname github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_xxx
5 голосов
/ 09 мая 2019

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

Чтобы сделать это:

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

Делаяэто связывает второй ключ с новым понятным именем «XXX» для github.com.

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

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

>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)

СейчасВы можете нажать, выбрать ... правой кнопкой автоматически.

3 голосов
/ 14 марта 2019

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

host github.com
  ControlPath ~/Projects/work/**
  HostName github.com
  IdentityFile ~/.ssh/id_work
  User git

Тогда ssh будет использовать указанный файл идентификации при выполнении команд git по заданному рабочему пути.

3 голосов
/ 07 декабря 2018

Вам необходимо создать ~ / .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

Добавить ваш открытый ключ в ваш git (cat ~ / .ssh/ id_rsa_pub [или одноименное имя])

и затем git clone, как показано ниже

git clone ssh://blahblah@blah.com/userid/test.git
2 голосов
/ 26 декабря 2016

В 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!

2 голосов
/ 28 октября 2011

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

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

1 голос
/ 02 сентября 2017

для gitlab RSAAuthentication yes

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

документ здесь

...