将ssh选项传递给git clone

将ssh选项传递给git clone,git,ssh,Git,Ssh,我正在尝试运行git clone,而不使用ssh检查存储库主机的密钥。我可以通过ssh这样做: ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host 有没有办法将相同的ssh选项传递给git clone命令 编辑:有一个限制,我不能修改~/.ssh/config或该计算机上的任何其他文件。将它们添加到您的~/.ssh/config: Host host HostName host Us

我正在尝试运行
git clone
,而不使用ssh检查存储库主机的密钥。我可以通过ssh这样做:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host
有没有办法将相同的ssh选项传递给git clone命令


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

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

Host host
    HostName host
    User user
    SshOption1 Value1
    SshOption2 Value2
Host
条目是您将在命令行上指定的,而
HostName
是真正的主机名。它们可以相同,或者
主机
条目可以是别名。如果未在命令行上指定
User@
,则使用
User
条目


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

下面是一个棘手的示例,说明如何使用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文件,使其可执行并执行


如果要传递私钥选项,请检查。

最近发布的git 2.3支持一个新变量“git\u SSH\u COMMAND”,该变量可用于定义带参数的命令

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@host
$GIT\u SSH\u命令
优先于
$GIT\u SSH
,并且 由shell解释,允许添加其他参数 包括在内


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

这是中描述的环境变量的替代项(s)

参见(2016年6月26日)作者。
(于2016年7月19日被合并)

已将新的配置变量
core.sshCommand
添加到 指定每个存储库要使用的GIT_SSH_命令的值

类似于
$GIT\u ASKPASS
$GIT\u PROXY\u命令
,我们还阅读了 先配置文件,然后返回到
$GIT\u SSH\u命令

这对于选择针对 同一主机(如github)

如果设置了此变量,
git fetch
git push
将在需要连接到远程系统时使用指定的命令,而不是
ssh

该命令与
GIT\u SSH\u命令的形式相同,并且在设置环境变量时被覆盖

这意味着
git克隆可以是:

cd /path/to/my/repo
git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' 
# later on
git clone host:repo.git
如前所述,如果您想将其应用于所有回购协议,您将使用全局配置

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

我认为应该将git更新到版本>=2.3,并使用git克隆user@host
是下注选项,但是如果不可能,@josh lee给出了一个很好的选项,但是请更新您的答案,缩进ssh配置文件

Host host
    HostName host
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
host <HOST>
hostname <HOSTNAME>
user <USER_NAME>
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
port <PORT_NUMBER>
KexAlgorithms +diffie-hellman-group1-sha1

已通过在Window machine中执行以下步骤解决此问题:-

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

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

    Host host
        HostName host
        StrictHostKeyChecking no
        UserKnownHostsFile /dev/null
    
    host <HOST>
    hostname <HOSTNAME>
    user <USER_NAME>
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes
    port <PORT_NUMBER>
    KexAlgorithms +diffie-hellman-group1-sha1
    
    主机
    主机名
    使用者
    IdentityFile~/.ssh/id_rsa
    唯一相同的是
    港口
    Kexalgoriths+diffie-hellman-group1-sha1
    
  • 然后再试一次


在不影响系统级设置的情况下进行存储库级配置

综合已有的答案,我选择以下步骤。这确保了配置更改不会影响机器级别,而只影响正在处理的存储库。在我的例子中,这是必需的,因为我的脚本需要在共享代理上执行

1.采用
GIT\u SSH\u命令
方法克隆存储库

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone ssh://url
2.克隆后,导航到存储库目录

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

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

我忘了说我不能修改那台机器上的任何文件。否则,您的解决方案将正常工作。使用
GIT_SSH
环境变量。是否在
GIT clone
之前有新行,或者代码是否正确?这应该是正确的,如果没有新行,则应为以下命令设置变量。如果你添加一个换行符,你将需要导出变量,然后它也应该工作。谢谢你,我已经被困在这两天了!好极了!谢谢。这对于初始的
git clone
特别有用,因为在同一远程git服务器上托管的repo使用不同的SSH密钥,即在
SSH\u config
选项主机名和用户无法区分克隆不同的repo的情况下。更有可能的是,您还没有repo,既然您使用了
git clone
,那么您可能需要全局配置git ssh命令:
git config--global core.sshCommand…
@user1300959很好,谢谢。我已经在答案中加入了你的评论,以提高知名度。这是最好的答案。你试图做的事情非常危险,你可能不应该这样做。在大多数情况下,如果远程SSH服务器的标识是一个坏主意,则禁用验证。您可以有效地禁用通过SSH获得的所有安全性,并向中间人攻击开放自己。实际上,这正是您想要做的。你有一个内部回购协议。如果有人设法欺骗了你,那么你就有麻烦了。这根本不是“非常危险”。实际上,您多久对主机密钥进行一次带外检查?(你应该这样做)。我上面提到的
core.sshCommand
的使用很好。向上投票,很好!问题:
$*
“$@”
似乎都能工作。通常我使用
“$@”
,因为另一个似乎不推荐使用。在这种情况下,是否有理由选择
$*
?@mh8020当您有多个参数时,它们的展开方式不同