我试图在没有ssh检查存储库主机密钥的情况下运行git clone
。我可以从ssh这样做:
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host
有没有办法将相同的ssh选项传递给git clone命令?
编辑:有一项限制,我无法修改~/.ssh/config
或该计算机上的任何其他文件。
答案 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季度)。
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 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
如果您要将其应用于所有 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
然后再试一次。