2010-04-01 26 views
7

假設我不能跑這樣的事情與面料:面料和svn密碼

run("svn update --password 'password' .")

怎麼就傳遞到織物的密碼遠程交互式命令行的正確方法?

的問題是,回購被檢出爲SVN + ssh和我沒有一個HTTP/HTTPS/SVN選項

回答

7

嘗試SSHkey。它允許您無需密碼即可連接到服務器。 在這種情況下,您必須在遠程服務器和回購站之間設置sshkey。

在遠程服務器:生成密鑰對

$ ssh-keygen -t dsa 

離開passphase空! 這將產生2個文件

  • 的〜/ .ssh/id_dsa的(私鑰)
  • 的〜/ .ssh/id_dsa.pub(公鑰)

然後,在追加的id_dsa的內容.pub到〜/ .ssh/authorized_keys在回購服務器上。

您的遠程服務器將能夠在不需要任何密碼的情況下更新源代碼樹。

+0

希望有人在觀看...... - 是不是將密碼留空是一個壞主意? – rutherford 2012-11-23 20:37:39

+1

是的,一個空的密碼短語一般並不好 - 但並不比將密碼放入腳本更糟 - 在這種情況下,如果密碼不爲空,您需要腳本輸入SSH密碼而不是遠程密碼,所以如果有的話,它不會取得多大成就 – 2013-05-09 15:40:33

0

您可能需要提供用戶呢?如果不是的話,你可能會有更好的運氣導出你的repo,並將其tar(本地)上傳+部署在服務器上。如果你在本地運行svn命令,你將能夠得到提示輸入你的用戶名和/或密碼。

+0

我已經試過供應--username開關爲好,沒有任何的運氣。 – hyperboreean 2010-04-01 15:41:37

2

之前我們遇到了類似於此的問題,並且實際上爲Fabric提出了一項新功能,但我們所採用的開發人員建議使用此功能。

import getpass 
password = getpass.getpass('Enter SVN Password: ') 
run("svn update --password '%s'" % password) 

當織物運行此命令時,這將提示您輸入密碼。

我相信會在結構日誌中顯示您的密碼,但是,更好的選擇是讓SVN提示您輸入密碼並在其中回顯密碼。

run('echo %s | svn update --password' % password) 

雖然我不使用SVN,所以恐怕我不確定這是否可能。我希望別人能幫到那裏!

+0

正如我上面所述svn update --password完全不起作用,因爲該選項僅適用於http/https。 – hyperboreean 2010-04-06 13:43:32

+0

我在找的是一種交互式傳遞密碼的自動方式。 – hyperboreean 2010-04-06 13:44:35

+0

那麼,將你的命令回覆到SVN可能還是值得一試的。您應該能夠在交互提示中回顯密碼,但是您的里程可能會有所不同。 – mac 2010-04-07 08:25:11

2

我對自動交互式命令行的標準答案是「使用Expect」,但是您使用的是Python,所以我會稍微改進以「使用Pexpect」。

將Pexpect集成到Fabric中可能需要一些想法,或者您可能最終會在這種特殊情況下單獨迴歸Pexpect。但這絕對是我會走的路。

0

你應該看看Fabric's env documentation。有國家說,你應該這樣的事情:

from fabric.api import env 

env.user = 'your_user' 
env.password = 'your_password' 

希望它有幫助!

3

如果YOUT只想隱藏日誌您的密碼,你可以用這樣的:

from fabric.state import output 

def xrun(command, hidden='', *args, **kwargs): 
    old_state = output.running 
    output.running = False 
    print '[%s] run: %s' % (env.host_string, command) 
    run(command + hidden, *args, **kwargs) 
    output.running = command 

xrun('svn update', '--password "your password"')