传递 ssh 选项到 git 克隆

我尝试不通过 ssh 检查存储库主机的密钥来运行 git clone,我可以像这样通过 ssh 来运行:

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

是否有办法将相同的 ssh 选项传递给 git 克隆命令?

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

102406 次浏览

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

Host host
HostName host
User user
SshOption1 Value1
SshOption2 Value2

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

如果您必须在命令行上配置此选项,请设置 abc0环境变量以指向一个包含您的选项的脚本。

下面是一个棘手的示例,说明如何使用 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

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

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

最近发布的 GIT 2.3支持一个新变量“ GIT _ SSH _ COMMAND”,该变量可用于定义一个命令 WITH 参数。

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

$GIT_SSH_COMMAND优先于 $GIT_SSH 由 shell 解释,这允许将其他参数设置为 包括。

另一个用于指定不同键的选项是使用 git 2.10 + (Q32016)的 git config core.sshCommand

这是一个替代的环境变量所描述的 鲍里斯回答)

第三季,第3集(2016年6月26日) by 易懂的泰语(pclouds)
(朱尼奥 · C · 哈马诺 gitster于2016年7月19日在 提交 dc21164合并)

添加了一个新的配置变量 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

如果您想将其应用于 所有回购协议,因为 User1300959添加了 在评论中,您将使用一个全局配置。

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

我认为更新 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

这个问题已经通过在窗口机器中做下面的步骤解决了:-

  • 在 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
    
  • then try again.

不影响系统级设置的存储库级配置

巩固已有的答案,我选择以下步骤。这样可以确保配置更改不会在机器级别产生影响,而只是对正在处理的存储库产生影响。在我的案例中需要这样做,因为我的脚本需要在一个共享的竹代理上执行。

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'

更安全的方法是:

git config --global core.sshCommand 'ssh -o StrictHostKeyChecking=accept-new'