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 git@bitbucket.org:uname/test-git-repo.git
, Я получаю следующую странную ошибку
error: cannot run /usr/bin/ssh -o StrictHostKeyChecking=no -i /home/me/my_private_key
fatal: unable to fork
не могли бы вы помочь мне решить эту проблему?
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 С Томас Quinot (quinot
):
git_connect
: установите команду оболочки ssh в 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
' когда им нужно подключиться к удаленной системе.
Команде будет дано ровно два или четыре аргумента:
- в '
username@host
' (или просто 'host
') из URL-адреса и команды оболочки для выполнения в этой удаленной системе, необязательно предшествующей by'-p
' (в буквальном смысле) и- в '
port
' из URL-адреса, когда он указывает что-то другое, чем по умолчаниюSSH
порт.
$GIT_SSH_COMMAND
берет верх над$GIT_SSH
, и интерпретируется оболочкой, которая позволяет включать дополнительные аргументы.$GIT_SSH
С другой стороны, должен быть только путь к программе (который может быть сценарием оболочки оболочки, если необходимы дополнительные аргументы).
вы можете предоставить любой ключевой файл, который вы хотите использовать с командой Git следующим образом:
$ PKEY=~/.ssh/keyfile.pem git clone git@github.com:me/repo.git
или такой:
$ git.sh -i ~/.ssh/keyfile.pem clone git@github.com:me/repo.git
Я ответил на тот же вопрос здесь: https://stackoverflow.com/a/15596980
Подробнее см. ссылку.
использовать ssh-agent
ssh-agent bash -c 'ssh-add /home/me/my_private_key; git clone git@bitbucket.org: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.
на ${...:-ssh}
часть, в то время как не строго необходимо хорошее прикосновение, которое сделает $GIT_SSH_COMMAND
по умолчанию , а поэтому GIT_SSH=git_ssh.sh
не сломает нормальный git
исполнения.
как добавленное значение, этот скрипт полностью игнорируется Git v2.3+, и $GIT_SSH_COMMAND
используется непосредственно в этом случае.