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


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

777   5  

5 ответов:

вы не можете предоставить параметры в GIT_SSH переменные среды; с git man page:

   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 username@host (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 в shell-скрипт, который делает то, что вы хотите. Например, в /home/me/bin/bitbucket_ssh, говоря:

#!/bin/sh
exec /usr/bin/ssh -o StrictHostKeyChecking=no -i /home/me/my_private_key "$@"

и выберите пункт GIT_SSH at /home/me/bin/bitbucket_ssh.

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

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

посмотреть совершить 3994276 С Thomas Quinot (quinot):

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

возможно, нецелесообразно устанавливать скрипт-оболочку для GIT_SSH когда дополнительные параметры должны быть переданы.
Укажите альтернативный способ указания команда оболочки для выполнения, включая аргументы командной строки, с помощью GIT_SSH_COMMAND переменной окружения, которая ведет себя как GIT_SSH но передается в оболочке.

специальная схема для изменения параметров в случае использования Putty's plink / tortoiseplink активируется только при использовании GIT_SSH; в случае использования GIT_SSH_COMMAND, это сознательно оставлено до пользователя, чтобы сделать любую необходимую адаптацию параметров перед вызовом базового ssh реализация.

GIT_SSH_COMMAND:

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

  • the'username@host' (или просто 'host') из URL-адреса и команды оболочки для выполнения на этой удаленной системе, необязательно предшествующей by'-p' (в буквальном смысле) и
  • the'port ' из URL, когда он указывает что-то другое, чем по умолчанию SSH порт.

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

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

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

или такой:

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

Я ответил на тот же вопрос здесь: https://stackoverflow.com/a/15596980

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

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

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

дом на larsk ' s ответ и VonC ' s ответ, вы можете создать git_ssh.sh скриптов, таких как:

#!/bin/sh
# Workaround: GIT_SSH_COMMAND isn't supported by Git < 2.3
exec ${GIT_SSH_COMMAND:-ssh} "$@"
вызов такой:
export GIT_SSH_COMMAND="/usr/bin/ssh -o StrictHostKeyChecking=no -i /home/me/my_private_key"
export GIT_SSH=path/to/git_ssh.sh
git ...

вот как это работает:

в Git v2. 3+ $GIT_SSH_COMMAND берет верх над $GIT_SSH, но старые версии не уважаю $GIT_SSH_COMMAND на всех.

$GIT_SSH может содержать только путь к ssh команда в системе. Он не может передать дополнительные аргументы командной строки этой команде, так как мы можем передать дополнительные аргументы ssh?

обходной путь заключается в создании сценария, который включает в себя ssh команда и ее дополнительные аргументы. Это именно то, что git_ssh.sh все о: так как мы уже установили $GIT_SSH_COMMAND на /usr/bin/ssh -o StrictHostKeyChecking=no -i /home/me/my_private_key, это именно то, что нам нужно exec и "$@" здесь, чтобы передать аргументы, переданные git_ssh.sh самим Git к $GIT_SSH_COMMAND.

The ${...:-ssh} часть, в то время как не строго необходимо это приятный штрих, который сделает $GIT_SSH_COMMAND по умолчанию ssh команда, и таким образом установка GIT_SSH=git_ssh.sh не сломает нормальный git исполнения.

как добавленная стоимость, этот скрипт полностью игнорируется Git v2. 3+, и $GIT_SSH_COMMAND используется непосредственно в этом случае.

Comments

    Ничего не найдено.