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'