[英]Using GIT_SSH_COMMAND in Git for Windows
我现在使用 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 中做这样的事情? 在任何地方都找不到任何答案。
您不必再在 Windows 中设置环境变量。
使用 git 2.10+(2016 年第 3 季度),您还可以为GIT_SSH_COMMAND
设置配置,这比环境变量更容易(并且可以全局设置,也可以针对特定存储库在本地设置)
请参阅Nguyễn Thái Ngọc Duy ( pclouds
) 的commit 3c8ede3 (26 Jun 2016 ) 。
(由Junio C gitster
合并-- gitster
-- in commit dc21164 ,2016 年 7 月 19 日)
添加了新的配置变量
core.sshCommand
以指定每个存储库使用的 GIT_SSH_COMMAND 值。
core.sshCommand:
如果设置了这个变量,
git fetch
和git push
将在需要连接到远程系统时使用指定的命令而不是ssh
。
该命令与GIT_SSH_COMMAND
环境变量的形式相同,并在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 一起使用而不会损害它们。
见犯6464679 (2017年10月16日),并提交0cd8328通过(2017年9月26日)乔纳森·谭( jhowtan
) 。
参见commit 94b8ae5 、 commit 3c88ebd 、 commit 19113a2 、 commit 0c2f0d2 、 commit 2609043 、 commit aa9bab2 、 commit dfe422d 、 commit 373d70e 、 commit 5d2124b (16) Brandon 威廉姆斯 ( mbrandonw
)
(由Junio C gitster
合并-- gitster
-- in commit 4c6dad0 ,2017 年 12 月 6 日)
ssh
: 引入一个“simple
”的 ssh 变体使用“
ssh
”传输时,“--o
”选项用于指定应在远程端设置的环境变量。
这允许 Git 在联系服务器时发送附加信息,通过“GIT_PROTOCOL
”环境变量请求使用不同的协议版本,如下所示:“-o SendEnv=GIT_PROTOCOL
”。不幸的是,并非所有 ssh 变体都支持将环境变量发送到远程端。
为了解决这个问题,只对符合 OpenSSH 的 ssh 变体使用“-o
”选项。
这是通过检查 ssh 命令的基本名称是否为“ssh
”或将 ssh 变体覆盖为“ssh
”(通过ssh.variant
配置)来完成的。其他选项,如“
-p
”和“-P
”,用于指定要使用的特定端口,或“-4
”和“-6
”,用于指示应使用 IPV4 或 IPV6 地址,可能也并非所有 ssh 变体都支持。当前,如果 ssh 命令的基本名称不是“
plink
”或“tortoiseplink
”,Git 会假定该命令是 OpenSSH 变体。
由于用户配置的 ssh 命令可能与 OpenSSH 不兼容,因此如果命令的基本名称与 Git 已知的变体不匹配,请收紧此约束并假定为“simple
”的变体。
新的 ssh 变体“simple
”将仅将主机和要执行的命令([username@]host
命令)作为参数传递给ssh
命令。
这是答案:
set GIT_SSH_COMMAND=ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no & git push origin master
有更好的方法来实现您的目标。 虽然问题和各种答案很有趣且具有启发性,但实现目标的最佳方法不涉及 GIT_SSH_COMMAND 变量。
不是将信息放入“git”,而是将信息放入“ssh”。
“ssh”命令在 Unix/Linux 中总是有一个“config”文件。 该功能在 Windows 中也可用,至少在最近几年是这样。 配置“ssh”以了解您的身份文件,然后当您执行“git clone”命令时...
git clone <repository>
...以ssh协议的风格指定<repository>
。 这是 ssh 协议样式,如“git clone”的“git”参考页面中所述,位于子标题“GIT URLs” :
[user@]host.xz:path/to/repo.git/
请注意,没有方案说明符; 也就是说,没有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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.