我现在正在使用Git for Windows 2.x的第四版候选版本,并在shell中使用GIT_SSH_COMMAND来避免SSH的主机验证。 在Git Bash中我写了这样的东西:
$ GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git push origin master
如何在Windows cmd中执行此类操作?在任何地方找不到任何答案。
答案 0 :(得分:8)
您不必再在Windows中设置环境变量。
使用git 2.10 +(2016年第3季度),您还可以为GIT_SSH_COMMAND
设置 config ,这比环境变量更容易(并且可以全局设置,或者在当地为特定的回购)
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的值。
core.sshCommand:
如果设置了此变量,
git fetch
和git push
将在需要连接到远程系统时使用指定的命令而不是ssh
。 该命令与GIT_SSH_COMMAND
环境变量的格式相同,并在设置环境变量时被覆盖。
这意味着git push
可以是:
cd /path/to/my/repo
git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
# later on
git push origin master
使用Git 2.16(2018年第一季度),您将有一个新的机制来升级现有的有线协议,并证明它可以与旧版本的Git一起使用而不会伤害它们。
commit 6464679(2017年10月16日)和commit 0cd8328(2017年9月26日)Jonathan Tan (jhowtan
)。
请参阅commit 94b8ae5,commit 3c88ebd,commit 19113a2,commit 0c2f0d2,commit 2609043,commit aa9bab2,commit dfe422d,commit 373d70e,{ {3}}(2017年10月16日)commit 5d2124b
(Brandon Williams (mbrandonw
)合并于Junio C Hamano -- gitster
--,2017年12月6日)
ssh
:介绍'simple
' ssh变种使用'
ssh
'运输,'-o
'选项用于指定 应在远程端设置的环境变量 这允许Git在联系服务器时发送附加信息, 请求通过使用不同的协议版本 'GIT_PROTOCOL
'像这样的环境变量:"-o SendEnv=GIT_PROTOCOL
"。不幸的是,并非所有ssh变体都支持发送环境 变量到远端。
为了解决这个问题,只能使用'-o
'适用于符合OpenSSH的ssh变体的选项 这是通过检查ssh命令的基名是'ssh
'来完成的。或者ssh变体被覆盖为'ssh
' (通过ssh.variant
配置)。其他选项,例如'
-p
'和'-P
',用于指定特定的 要使用的端口,或者'-4
'和'-6
',用于表示IPV4或 应该使用IPV6地址,所有ssh也可能不支持 变体。目前,如果ssh命令的基本名称不是'
plink
'要么 'tortoiseplink
',Git假设该命令是OpenSSH变体 由于用户配置的ssh命令可能不符合OpenSSH,因此请加紧 这个约束并假设'simple
'的变体。如果是的基名 命令与Git已知的变体不匹配 新的ssh变体'simple
'只会将执行的主机和命令([username@]host
命令)作为参数传递给ssh
命令。
答案 1 :(得分:2)
以下是答案:
set GIT_SSH_COMMAND=ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no & git push origin master
答案 2 :(得分:0)
有一种更好的方法来实现您的目标。虽然问题和各种答案很有趣且具有启发性,但实现目标的最佳方法不涉及 GIT_SSH_COMMAND 变量。
不要把信息放在“git”里,而是把信息放到“ssh”里。
"ssh" 命令在 Unix/Linux 中总是有一个 "config" 文件。该功能在 Windows 中也可用,至少在最近几年是这样。配置“ssh”以了解你的身份文件,然后当你去执行“git clone”命令时...
git clone <repository>
...以 ssh 协议的样式指定 <repository>
。这是 ssh 协议样式,as described on the "git" reference page for "git clone", at the sub-header "GIT URLs":
[user@]host.xz:path/to/repo.git/
注意没有scheme说明符;也就是说,没有 ssh:
或 git:
或 https:
或 ftps:
的指示。相反,冒号 :
将“主机”与“路径”分开。冒号 :
的这种使用不符合 URL 格式,这种不符合性将这种协议风格与其他风格区分开来。
在“ssh”中进行配置的一个潜在的重要好处是“ssh”允许别名。假设,对于特定机器的“ssh”会话,我通常想以自己的身份登录,但有时我想以名为“user_for_git”的其他人身份登录。进一步假设用户的身份文件不同。以下“ssh”的“配置”具有由真实域为我自己命名的条目,但具有“user_for_git”的别名。请注意,关键字“Host”引入了一个部分,而变量“HostName”是该部分中的几个参数之一。
Host go_git.example.com
# Specify the real host name
HostName = example.com
User = user_for_git
IdentityFile = ~/.ssh/id_rsa_for_git_at_example_com
Host example.com
# Specify the real host name
HostName = example.com
User = user_me
IdentityFile = ~/.ssh/id_rsa_for_normal
有了这个,“git clone”命令可以如下:
git clone go_git.example.host:/path/to/repo.git
请注意,在这种情况下,不使用语法的可选 user@
部分。远程存储库仅由 host : path
指定,但在本例中,host
是在“ssh”配置文件中定义的别名。
在 Linux/Unix 中,“ssh”配置文件名为 config
,位于隐藏目录 .ssh
中,该目录位于主目录 $HOME
下;这表示为 ~/.ssh/config
。对于 Windows 中的等效位置,请在此处查看答案:https://stackoverflow.com/a/62842368/3552393