将ssh选项传递给git clone

时间:2011-10-14 18:50:41

标签: git ssh

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

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host

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

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

7 个答案:

答案 0 :(得分:107)

最近发布的git 2.3支持一个新变量“GIT_SSH_COMMAND”,可用于定义带参数的命令。

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@host
  

$GIT_SSH_COMMAND优先于$GIT_SSH,而且是{{1}}   由shell解释,允许其他参数   包括在内。

答案 1 :(得分:40)

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

Host host
    HostName host
    User user
    SshOption1 Value1
    SshOption2 Value2

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

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

答案 2 :(得分:23)

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

这是Borisanswer

中描述的环境变量的替代方案

commit 3c8ede3 Nguyễn Thái Ngọc Duy (pclouds)(2016年6月26日) (由Junio C Hamano -- gitster --合并于commit dc21164,2016年7月19日)

  

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

     

$GIT_ASKPASS$GIT_PROXY_COMMAND类似,我们也会从中读取   首先配置文件然后回退到$GIT_SSH_COMMAND

     

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

core.sshCommand:
  

如果设置了此变量,git fetchgit 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

如果您要将其应用于所有 repos,user1300959添加in the comments,您将使用全局配置。

git config --global core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

答案 3 :(得分:18)

这是一个棘手的例子,如何使用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

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

如果您想传递私钥选项,请查看How to tell git which private key to use?

答案 4 :(得分:4)

我认为将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

答案 5 :(得分:1)

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

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

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

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone ssh://url

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

cd repo-dir

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

git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

答案 6 :(得分:0)

通过在Window机器中执行以下步骤已修复此问题: -

  • 在C:\ Users \ username.ssh文件夹下创建配置文件。

  • 将以下行添加到配置文件中。

    host <HOST>
    hostname <HOSTNAME>
    user <USER_NAME>
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes
    port <PORT_NUMBER>
    KexAlgorithms +diffie-hellman-group1-sha1
    
  • 然后再试一次。