Git使用GIT_SSH错误自定义SSH克隆

我正在尝试使用自定义SSH命令克隆Git仓库。 我在GIT_SSH环境中设置了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 

你能帮我解决这个问题吗?

你不能在GIT_SSH环境variables中提供选项; 从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 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. 

一种select是用适当的configuration向你的.ssh/config文件添加一个节:

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

另一个select是将GIT_SSH指向一个你想要的shell脚本。 例如,在/home/me/bin/bitbucket_ssh ,input:

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

然后将GIT_SSH指向/home/me/bin/bitbucket_ssh

如果可能,我更喜欢使用.ssh/config ,因为这样可以避免为每个远程创build每个目标脚本。

请注意,从git 2.3+开始(2015年第1季度),您最初尝试使用新的环境variablesGIT_SSH_COMMAND

见Thomas Quinot( quinot )的 提交3994276 :

git_connect :在GIT_SSH_COMMAND设置ssh shell命令

当需要传递其他参数时,为GIT_SSH安装包装脚本可能不切实际。
通过GIT_SSH_COMMAND环境variables提供一种指定要运行的shell命令的替代方法,包括命令行参数,其行为与GIT_SSH类似,但被传递到shell

使用PuTTY的plink / tortoiseplink时修改参数的专用电路仅在使用GIT_SSH时被激活; 在使用GIT_SSH_COMMAND的情况下,在调用底层的ssh实现之前,故意留给用户进行必要的参数调整。

GIT_SSH_COMMAND

如果这些环境variables中的任何一个被设置,那么' git fetch '和' git push '将在需要连接到远程系统时使用指定的命令而不是' ssh '。
命令将会有两个或四个参数:

  • username@host '(或只是' host ')从URL和shell命令在该远程系统上执行,可选地以“ -p ”(字面上)和
  • 当它指定了默认的SSH端口以外的其他port就是来自URL的“ port ”。

$GIT_SSH_COMMAND优先于$GIT_SSH ,并由shell解释,允许包含额外的参数。
另一方面, $GIT_SSH必须只是程序的path(如果需要额外的参数,它可以是包装程序的shell脚本)。

你可以使用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'