2011-06-30 35 views
3

我想從我的私人git倉庫克隆使用期望在一行中輸入密碼。如何使用expect和git clone?

我想是這樣的:

預計-c「重生混帳克隆用戶@。* *:/ var /.../ repository.git /;期望「(是/否)?」;發送「是\ n」;期待「密碼:」;發送「my_password \ n」;交互'

但是,它不起作用。 我在做什麼錯?我如何修復上面的命令行?

感謝,Arshavdki亞歷山大

+1

之所以想到不能按預期工作,是因爲SSH是*正確*直接寫入到終端,而不是標準輸出或標準錯誤。 – Arafangion

回答

4

你爲什麼不只是使用一種比密碼更安全,並簡化你的生活?

一個沒有密碼的ssh密鑰將是顯着更安全,而且根本不提示。

如果它必須是100%獨立的,那麼考慮讓腳本輸出SSH密鑰,使用它一次,然後將其刪除。 (這應該離開你的安全形勢不變:密碼實際上是在腳本中,這是你可以接受的。)

# Output SSH key for no-password login. (Could use mktemp instead) 
cat > /tmp/ssh_key.$$ <<EOT 
-----BEGIN RSA PRIVATE KEY----- 
blahblahblah 
-----END RSA PRIVATE KEY----- 
EOT 

# Make a SSH wrapper to do the right thing 
cat > /tmp/git_ssh.$$ <<EOT 
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /tmp/ssh_key.$$ "[email protected]" 
EOT 
chmod +x /tmp/git_ssh.$$ 
export GIT_SSH=/tmp/git_ssh.$$ 

# Done! 
git clone [email protected]:path/to/repo 

# Cleanup 
rm -f /tmp/git_ssh.$$ /tmp/ssh_key.$$ 

是劇本看起來笨重而且(模數錯誤)它是自包含的自動化非常有用。

+0

問題是我正在編寫一個部署腳本,這應該從腳本運行。 – alexarsh

+1

...所有更多的理由讓它更安全和自動化,對嗎?也許你應該檢查一下ssh的github指南? http://help.github.com/set-up-git-redirect/ – Dustin

+2

你能回答我的問題嗎? – alexarsh

1

你可以儘量避免使用通過在URL中直接輸入密碼預計

git clone https://username:[email protected]/username/repository.git