将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当您有多个参数时,它们的展开方式不同