0

我第一次尝试使用fabric,到目前为止我真的很喜欢它,但是在我的部署脚本中的某个时刻,我想克隆一个mercurial存储库。当我到达那一点时,我收到一个错误:

错误:中止:需要http授权

我的存储库需要 http 授权,并且 Fabric 不会提示我输入用户名和密码。我可以通过更改我的存储库地址来解决这个问题:

https://主机名/存储库

到:

https://user:password@hostname/repository

但由于种种原因,我宁愿不走这条路。还有其他方法可以绕过这个问题吗?

4

2 回答 2

2

以下是具有各种安全权衡并需要不同数量的 sys admin mojo 的四个选项:

使用较新的 mercurial,您可以将密码放在[auth]本地用户.hgrc文件的部分中。密码仍会以明文形式保存在磁盘上,但至少不在 URL 中

或者

您可以在本地设置一个 HTTP 代理,在本地显示为 no-auth,并在与远程通信时为您执行身份验证。

或者

您可以更改托管服务器上的配置,您可以将其(Apache?)设置为在从 localhost 访问时不需要用户/密码,然后使用 SSH 隧道使本地计算机看起来像是来自 localhost它访问服务器:

ssh -L 8080:localhost:80 user@hostname # run in background and leave running

然后让织物连接到http://localhost:8080/repository

或者

较新的 mercurial 支持客户端证书进行身份验证,因此您可以配置您的 Apache 以将其作为授权/身份验证,然后调整您的本地 hg 以提供证书。

于 2010-06-11T17:15:44.817 回答
0

根据您的 fabfile,您可能能够重新构建问题。您可以在本地系统上执行 mercurial 命令,而不是在远程系统上执行 hg 克隆,然后将您构建的工件与结构一起发送。

具体来说,您可以使用 fabric 的 local() 命令克隆 mercurial 存储库,并运行“hg archive”命令来准备一个 tarball。然后,您可以使用 fabrics put() 上传该压缩包,并使用 fabrics run() 将其解压缩到正确的位置。

克隆、打包、放置的代码片段可能如下所示:

from fabric.api import local

def task():
    local("hg clone ssh://hg@host/repo tmpdir")
    with lcd("tmpdir"):
        local("hg archive ../repo.tgz")
    local("rm tmpdir")
    put("repo.tgz")
于 2014-03-14T01:47:25.513 回答