2011-10-14 212 views
56

我試圖在沒有ssh的情況下運行git clone檢查存儲庫主機的密鑰。我可以這樣做從這樣的SSH:將ssh選項傳遞給git克隆

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected] 

有沒有什麼辦法可以將相同的SSH選項傳遞給git clone命令?

編輯:有一個限制,我不能修改~/.ssh/config或該機器上的任何其他文件。

+1

你試圖做的事情非常危險,你可能不應該這樣做。在大多數情況下,如果遠程SSH服務器的身份是一個壞主意,則禁用驗證。您可以有效地禁用通過使用SSH獲得的所有安全性,並打開自己的中間人攻擊。 – aef

回答

32

它們添加到您的~/.ssh/config

Host host 
    HostName host 
    User user 
    SshOption1 Value1 
    SshOption2 Value2 

Host項是什麼,你會在命令行中指定,而HostName是真正的主機名。它們可以是相同的,或者Host條目可以是別名。如果您沒有在命令行中指定[email protected],則使用User條目。

如果您必須在命令行上對其進行配置,請將GIT_SSH環境變量設置爲指向一個包含您的選項的腳本。

+2

我忘了說我無法修改該機器上的任何文件。否則,是的,你的解決方案將工作。 –

+21

使用'GIT_SSH'環境變量。 –

+0

謝謝,這工作! –

16

這裏是棘手的例子,如何使用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 [email protected] 

注:以上線路都是你應該粘貼到你的終端終端的命令行。它會創建一個文件ssh,使其可執行並執行它。

如果您想通過私鑰選項,請檢查How to tell git which private key to use?

67

最近發佈的git 2.3支持一個新變量「GIT_SSH_COMMAND」,它可以用來定義一個帶有參數的命令。

​​

$GIT_SSH_COMMAND優先於$GIT_SSH,並且是 由外殼,其允許額外的參數被包括 解釋。

+0

'git clone'之前是否應該有新行或代碼是否正確? –

+5

這應該是正確的,沒有換行符,應該爲以下命令設置變量。如果你添加一個換行符,你需要導出變量,那麼它也應該工作。 – Boris

+0

謝謝,我已經堅持了2天! –

11

另一種選擇由以指定不同的密鑰是git config core.sshCommand與GIT 2.10+(Q3 2016)

這是Borisanswer

commit 3c8ede3參見描述的環境變量的替換(26 2016年6月)作者:Nguyễn Thái Ngọc Duy (pclouds)
(由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 fetchgit 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 

如果你想申請,對所有回購,如user1300959增加in the comments,你可以使用一個全局配置

git config --global core.sshCommand ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no 
+2

更有可能你還沒有回購,因爲你做'git clone' - 在這種情況下,你可能想要全局配置git ssh命令:'git config --global core.sshCommand ...' – iurii

+0

@ user1300959好點,謝謝。我已將您的評論納入答案中,以獲得更多的知名度。 – VonC

2

我認爲更新git版本> = 2.3並使用GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone [email protected]是賭注選項,但如果不可行,@ josh-lee給出了一個不錯的選擇,但請更新您的答案縮進SSH配置文件。

Host host 
    HostName host 
    StrictHostKeyChecking no 
    UserKnownHostsFile /dev/null