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
Не могли бы вы помочь мне решить эту проблему?
Ответы
Ответ 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'