Подтвердить что ты не робот

Git клон с пользовательским SSH с использованием ошибки GIT_SSH

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

export GIT_SSH="/usr/bin/ssh -o StrictHostKeyChecking=no -i /home/me/my_private_key".

Но когда после предыдущей команды я запустил

git clone [email protected]:uname/test-git-repo.git, я получаю следующую странную ошибку

error: cannot run /usr/bin/ssh -o StrictHostKeyChecking=no -i /home/me/my_private_key
fatal: unable to fork

Не могли бы вы помочь мне решить эту проблему?

4b9b3361

Ответ 1

Вы не можете предоставить параметры в переменной среды GIT_SSH; с страницы git:

   GIT_SSH
       If this environment variable is set then git fetch and git push will use this command instead of ssh when they need to connect
       to a remote system. The $GIT_SSH command will be given exactly two arguments: the [email protected] (or just host) from the URL
       and the shell command to execute on that remote system.

       To pass options to the program that you want to list in GIT_SSH you will need to wrap the program and options into a shell
       script, then set GIT_SSH to refer to the shell script.

Одним из вариантов является добавление строфы в ваш файл .ssh/config с соответствующей конфигурацией:

Host bitbucket.org
  StrictHostKeyChecking no
  IdentityFile /home/me/my_private_key

Другой вариант - указать GIT_SSH на оболочку script, которая делает то, что вы хотите. Например, в /home/me/bin/bitbucket_ssh, поместите:

#!/bin/sh
exec /usr/bin/ssh -o StrictHostKeyChecking=no -i /home/me/my_private_key "[email protected]"

И затем укажите GIT_SSH на /home/me/bin/bitbucket_ssh.

Я предпочитаю использовать .ssh/config, когда это возможно, потому что это позволяет избежать необходимости создания каждого адресата script для каждого пульта.

Ответ 2

Обратите внимание, что, начиная с git 2.3+ (Q1 2015), то, что вы изначально пытались, будет работать с новой переменной среды GIT_SSH_COMMAND.

См. commit 3994276 из Thomas Quinot (quinot):

git_connect: установите команду ssh shell в GIT_SSH_COMMAND

Возможно, нецелесообразно установить оболочку script для GIT_SSH, когда необходимо передать дополнительные параметры.
Предоставьте альтернативный способ указания команды оболочки, которая будет запущена, включая аргументы командной строки, с помощью переменной среды GIT_SSH_COMMAND, которая ведет себя как GIT_SSH, но передается в оболочку.. p >

Специальная схема изменения параметров в случае использования PuTTY plink/tortoiseplink активируется только при использовании GIT_SSH; в случае использования GIT_SSH_COMMAND, умышленно остается пользователю выполнить любую необходимую настройку параметров перед вызовом базовой реализации ssh.

GIT_SSH_COMMAND:

Если какая-либо из этих переменных среды установлена, то "git fetch" и "git push" будут использовать указанную команду вместо "ssh", когда им необходимо подключиться к удаленной системе.
Команда будет давать ровно два или четыре аргумента:

  • '[email protected]' (или просто 'host') из URL-адреса и команды оболочки для выполнения в этой удаленной системе, необязательно предшествующей '-p' (буквально) и
  • 'port' из URL-адреса, если он указывает что-то иное, кроме порта ssh по умолчанию.

$GIT_SSH_COMMAND имеет приоритет над $GIT_SSH и интерпретируется оболочкой, которая позволяет включать дополнительные аргументы.
$GIT_SSH, с другой стороны, должен быть просто путём к программе (которая может быть оболочкой-оболочкой script, если необходимы дополнительные аргументы).

Ответ 3

Вы можете предоставить любой ключевой файл, который вы хотите использовать с помощью команды Git следующим образом:

$ PKEY=~/.ssh/keyfile.pem git clone [email protected]:me/repo.git

или это:

$ git.sh -i ~/.ssh/keyfile.pem clone [email protected]:me/repo.git

Я ответил на тот же вопрос: fooobar.com/questions/16966/...

Подробнее см. ссылку.

Ответ 4

Использовать ssh-agent

ssh-agent bash -c 'ssh-add /home/me/my_private_key; git clone [email protected]:uname/test-git-repo.git'