将ssh选项传递给git clone

Dan*_*kov 85 git ssh

我试图在git clone没有ssh检查存储库主机密钥的情况下运行.我可以从ssh这样做:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host
Run Code Online (Sandbox Code Playgroud)

有没有办法将相同的ssh选项传递给git clone命令?

编辑:我无法修改限制~/.ssh/config或该计算机上的任何其他文件.

Bor*_*ris 129

最近发布的git 2.3支持一个新变量"GIT_SSH_COMMAND",可用于定义命令WITH参数.

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@host
Run Code Online (Sandbox Code Playgroud)

$GIT_SSH_COMMAND优先于$GIT_SSH,并由shell解释,允许包含其他参数.

  • 这应该是正确的,如果没有换行符,则应为以下命令设置变量.如果添加换行符,则需要导出变量,然后它也应该起作用. (6认同)
  • 当一个人对同一远程 git 服务器上托管的存储库使用不同的 SSH 密钥时,这对于初始“git 克隆”特别有用,即。在“ssh_config”选项 *HostName* 和 *User* 无法区分克隆不同存储库的情况下。 (2认同)

Jos*_*Lee 43

将它们添加到您的~/.ssh/config:

Host host
    HostName host
    User user
    SshOption1 Value1
    SshOption2 Value2
Run Code Online (Sandbox Code Playgroud)

Host条目是您在命令行中指定的条目,它HostName是真正的主机名.它们可以是相同的,或者Host条目可以是别名.User如果未user@在命令行中指定,则使用该条目.

如果必须在命令行上进行配置,请将GIT_SSH环境变量设置为指向包含选项的脚本.

  • 使用`GIT_SSH`环境变量. (25认同)
  • 我忘了说我无法修改该机器上的任何文件.否则,是的,你的解决方案将起作用. (2认同)

Von*_*onC 28

指定不同键的另一个选项是git config core.sshCommand使用git 2.10 +(2016年第3季度).

这是为了在所描述的环境变量的替换鲍里斯答案)

提交3c8ede3通过(2016年6月26日)阮泰玉维战(pclouds).
(由Junio C gitsterHamano合并- -提交dc21164,2016年7月19日)

添加了一个新的配置变量,core.sshCommand以指定每个存储库使用GIT_SSH_COMMAND的值.

$GIT_ASKPASSor 类似$GIT_PROXY_COMMAND,我们先从配置文件中读取然后再回到$GIT_SSH_COMMAND.

这对于选择针对同一主机的不同私钥非常有用(例如github)

core.sshCommand:
Run Code Online (Sandbox Code Playgroud)

如果这个变量被设置,git fetch并且git push将使用指定的命令,而不是ssh当他们需要连接到远程系统.
该命令与GIT_SSH_COMMAND环境变量的格式相同,并在设置环境变量时被覆盖.

这意味着git clone可以是:

cd /path/to/my/repo
git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' 
# later on
git clone host:repo.git
Run Code Online (Sandbox Code Playgroud)

如果你想申请,对所有回购,作为user1300959增加在评论中,你可以使用一个全局配置.

git config --global core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
Run Code Online (Sandbox Code Playgroud)

  • 你可能还没有回购,因为你做`git clone` - 在这种情况下你可能想要全局配置git ssh命令:`git config --global core.sshCommand ...` (2认同)

ken*_*orb 19

这是一个棘手的例子,如何使用GIT_SSH变量传递ssh参数:

$ echo 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $*' > ssh
$ chmod +x ssh
$ GIT_TRACE=1 GIT_SSH="$PWD/ssh" git clone user@host
Run Code Online (Sandbox Code Playgroud)

注意:上面的行是终端命令行,您应将其粘贴到终端中.它将创建一个文件ssh,使其可执行并执行它.

如果您想传递私钥选项,请查看如何告诉git使用哪个私钥?.


Jon*_*ber 7

我认为将 git 更新到版本 >= 2.3 并使用GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@host是赌注的选项,但如果不可能,@josh-lee 提供了一个不错的选择,但请更新缩进 ssh 配置文件的答案。

Host host
    HostName host
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
Run Code Online (Sandbox Code Playgroud)


Pav*_*mar 5

存储库级别配置,而不会影响系统级别设置

合并已经可用的答案,我选择以下步骤。这样可以确保配置更改不会对计算机级别产生影响,而只会影响正在使用的存储库。就我而言,这是必需的,因为我的脚本需要在共享的Bamboo代理上执行。

1.采用此GIT_SSH_COMMAND方法克隆存储库。

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone ssh://url
Run Code Online (Sandbox Code Playgroud)

2.克隆后,导航到存储库目录。

cd repo-dir
Run Code Online (Sandbox Code Playgroud)

3.设置core.sshCommand配置,以便将来所有的调用都可以像通常一样使用git命令运行,但在内部使用提供的git选项。

git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
Run Code Online (Sandbox Code Playgroud)


bba*_*iee 5

更安全的方法是:

git config --global core.sshCommand 'ssh -o StrictHostKeyChecking=accept-new'
Run Code Online (Sandbox Code Playgroud)

这比它更安全,StrictHostKeyChecking=no因为accept-new它仍然会对它知道已更改的键产生错误,但不会对它以前从未见过的键产生错误。no禁用所有检查。

对于一次性命令,请使用:

git -c core.sshCommand='ssh -o StrictHostKeyChecking=accept-new' clone ...
Run Code Online (Sandbox Code Playgroud)