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
не могли бы вы помочь мне решить эту проблему?
5 ответов:
вы не можете предоставить параметры в
GIT_SSHпеременные среды; сgitman 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_SSHat/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