[英]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.