2010-06-11 62 views
0

我試圖第一次使用fabric,並且我非常喜歡它,但是在部署腳本中的某個時候,我想克隆一個mercurial repository。當我到了這一點,我得到一個錯誤:如何在需要http授權的情況下通過結構啓動的ssh連接克隆mercurial存儲庫?

err: abort: http authorization required

我的倉庫需要HTTP授權和麪料不提示我的用戶名和密碼。我可以從改變我的倉庫地址解決這個問題:

https://hostname/repository

到:

https://user:[email protected]/repository

但我寧願不走這條路線有多種原因。 有沒有其他方法可以繞過這個問題?

回答

2

這裏有四個選項各種安全權衡和需要不同數量的系統管理員的魔力:

隨着新善變的,你可以在本地用戶的.hgrc文件的[auth]部分把密碼。密碼仍然會在純文本的磁盤,但至少不會在URL

或者

您可以在本地設置呈現爲無身份驗證本地並執行AUTH你,當一個HTTP代理與遠程通信。

或者

諸位是能夠改變,你可以將它設置在主機服務器上配置(Apache的?)不要求用戶名/密碼從本地主機訪問時,再使用SSH隧道使本地機器看起來它來自本機時,訪問服務器:

ssh -L 8080:localhost:80 [email protected] # run in background and leave running 

,然後讓織物連接到http://localhost:8080/repository

或者

更新的mercurial的支持客戶端認證證書,所以你可以配置你的Apache榮譽作爲授權/認證,然後調整你的本地hg提供證書。

0

您可以使用fabric的local()命令克隆mercurial存儲庫,然後運行'hg archive'命令來準備tarball。然後,您可以使用fabric put()上載該tarball,並使用結構run()將其解包到正確的位置。

一個代碼片段克隆,包,放看起來有點像下面這樣:

from fabric.api import local 

def task(): 
    local("hg clone ssh://[email protected]/repo tmpdir") 
    with lcd("tmpdir"): 
     local("hg archive ../repo.tgz") 
    local("rm tmpdir") 
    put("repo.tgz") 
相關問題