2016-01-21 110 views
0

我做一些腳本:Git裏,克隆與特定的私鑰,sh.exe找不到文件

#!/bin/bash 

##### 
dest_branch="4.0.8_copy" 
source="sprint24_copy" 
##### 

dest=$dest_branch 
source=$source_branch 
startDir=`pwd` 
sshFile=$startDir"/git_ssh.ssh" 
gitrepo="<some valid repo adress>" 
git_key=$startDir"/key.ssh" 

sshKey="-----BEGIN RSA PRIVATE KEY----- 
MIIJJwIBAAKCAgEAs7Rfpca8s4.... and rest of key" 

echo $sshKey > $git_key 
echo "ssh -i "$git_key" \[email protected] "> $sshFile 

export GIT_SSH=$sshFile 
export GIT_TRACE=1 

git clone [email protected]$gitrepo -b $dest 

我運行混帳擊(C這個腳本:\ Program Files文件\的Git \ BIN \ sh.exe ),並且該腳本失敗,這一點錯誤:

Cloning into 'neos'... 
10:44:26.575804 run-command.c:343  trace: run_command: 'C:/Users/<some user>/Desktop/<some dir>/git_ssh.ssh' '[email protected]<some valid adress>' 'git-upload-pack '\''<some project>'\''' 
error: cannot spawn C:/Users/<some user>/Desktop/<some dir>/git_ssh.ssh: No such file or directory 
fatal: unable to fork 

我試圖改變命令pwd靜態路徑,如C:/ ... C:/ .../C/... \ C。 C:... C:...但仍然表現不佳。可以anybady幫我具體的另一個私人密鑰克隆git回購?爲什麼這個sh.exe看不到我的文件?我確定該文件存在。我使用git版本2.6.4.windows.1。感謝您的幫助,並對我的英語感到抱歉。

+1

從未在Windows上嘗試過Git。對於bash的正常調試是將shebang更改爲'#!/ bin/bash -x'並查看輸出以驗證所有內容都按預期進行了擴展。對於sshKey-assignment,可以查看heredocs來存儲多行字符串,例如http://stackoverflow.com/questions/23929235/bash-multi-line-string-with-extra-space –

+0

使用'ssh_config' – Jakuje

回答

1

我嘗試瞭解問題。我有一些觀察。

我使用git.exe。 git.exe使用Windows路徑,但MinGW使用兩者,而ssh只使用linux:X

當我嘗試使用GIT_SSH ='path to scrip'時,那麼git使用了一些像ConvertToWindowsPatch(GIT_SSH)。最後git查找腳本,但現在SSH無法找到帶有密鑰的文件!

當我嘗試GIT_SSH =「的ssh -vvv」調試我看到

bash: ssh: command not found 

首先我覺得跆拳道...但我看到,SSH是一個別名!所以我使用GIT_SSH ='ssh.exe -vvv',現在它工作。不幸的是,我無法解決我的問題,即ssh沒有看到我的文件,但我知道,如果我將文件寫入C:\,那麼在C中這個文件不存在!該文件位於C:\ Users \\ AppData \ Local \ VirtualStore中。我不知道如何將我的ssh密鑰保存在文件中,並且ssh可以看到它,但我有其他解決方法。

在我的腳本主要功能之前,我備份了.ssh文件夾。然後我寫入.ssh中的id_rsa和known_host。然後我想要git clone,但是ssh問我關於密碼的問題......但是這個密鑰沒有通過!!好吧冷靜下來當我嘗試ssh.exe -vvv時,我發現sshKey沒有標題,因爲我沒有換行寫這個鍵!我有這樣的:

echo $sshKey > $sshKeyFile 

但正確的是

echo "$sshKey" > $sshKeyFile 

現在一切工作正常。我看到2個WTF - 第一個ssh在MinGW中看不到文件,第二個如果ssh在沒有-vvv的情況下看不到密鑰的標題,請不要看到這個,但詢問pass(wtfwtfwtfwtfwtf ...)

這是正確的腳本來操作混帳回購(合併,推等...)在bash中使用MinGW,git和Windows,以及特定的rsa私鑰。我用它來自動編寫並在Windows上的Jenkins中創建分支。

#!/bin/bash 

##### 
dest_branch="4.0.8_copy" 
source="sprint24_copy" 
##### 

dest=$dest_branch 
source=$source_branch 
sshDir="/c/Users/<user>/.ssh" 
gitrepo="<repo>" 
sshKeyFile=$sshDir"/id_rsa" 
knownHostsFile=$sshDir"/known_hosts" 

sshKey="-----BEGIN RSA PRIVATE KEY----- 
MIIJKAIBAAKCAgEApH0bkaXa0z7811Sd1ZEG87adPPNWyaya47T3GrCjjnRvVyEk 
N8jGjh/..." 

knownHosts="<some host> ecdsa-sha2-nistp256 AAAAE2VjZ..." 

if [ -a $sshDir ] ; then 
    echo "backup .ssh" 
    cp -r $sshDir $sshDir"_back" 

    echo "usuwanie starego .ssh" 
    rm -r $sshDir 

    echo "tworzenie nowego .ssh" 
    mkdir $sshDir 

    echo "zapis klucza rsa" 
    echo "$sshKey" > $sshKeyFile 

    echo "zapis znanyn hostów" 
    echo $knownHosts > $knownHostsFile 

    echo "wlaczenie debugu gita" 
    export GIT_TRACE=2 

    echo "wlaczenie debugu 

    echo "clone repo" 
    git clone [email protected]$gitrepo -b $dest 
    #other git operations 

    echo "usuwanie tymczasowego .ssh" 
    rm -r $sshDir 

    echo "odtwrzanie z backupu .ssh" 
    cp -r $sshDir"_back" $sshDir 

    echo "usuwanie backupu" 
    rm -r $sshDir"_back" 
fi 

感謝您的幫助和評論!