HTTPS 用户认证配置

作者:Zachary Voase
日期:2009-10-01

配置 Mercurial 以便每次凭借 HTTPS 进行 push/pull 时不再提示输入密码。

如果你将 HTTPS 作为你对一个库进行 push/pull 操作的选择,你会发觉你每次这样做时 Mercurial 都会向你寻求认证。幸运的是,这里只需在你的 ~/.hgrc 文件做一个简单的配置便可解决这个问题。

Note

这是一个 Mercurial 1.3 推出的新特性。如果你的版本比其更老你需要更新以使用此贴士!

Warning

本贴士涉及到将你的用户名与密码作为普通文本放到 ~/.hgrc 中。这通常会比下面这样做带来更多的安全问题:

  • 使用 SSH 和 ssh-agent (参见 这篇文章 ),或是
  • 每次都输入你的密码

如果你不是 100% 的确认你是唯一一个能够访问你的 ~/.hgrc 的人,那就此停下。

你的 ~/.hgrc 文件中的 [auth] 段包含了 HTTP 认证需要的凭证。每一组凭证都可以任意取名;根据本贴士的目的我们假定你使用 BitBucket 托管你的代码库,所有将这组凭证叫做 bb

将下面内容添加到你的~/.hgrc中

[auth]
bb.prefix = https://bitbucket.org
bb.username = {username}
bb.password = {password}

{username}{password} 替换为你的 BitBucket 认证。

你也可以指定拥有不同 prefix 的多组认证。比如说,你有两个 BitBucket 帐号:

[auth]
bb1.prefix = https://bitbucket.org/foo/
bb1.username = foo
bb1.password = foo_passwd

bb2.prefix = https://bitbucket.org/bar/
bb2.username = bar
bb2.password = bar_passwd

当向任意 URI 以 http://bitbucket.org/foo/ 为起始的库 push 时将会使用 ‘foo’ 帐号,’bar’ 同理。这样的话,不管怎样,你可以利用这一情况让 Mercurial 始终选择与指定 prefix 最匹配的那组认证。因此,假设你有如下配置:

[auth]
bb1.prefix = https://bitbucket.org/
bb1.username = foo
bb1.password = foo_passwd

bb2.prefix = https://bitbucket.org/bar/
bb2.username = bar
bb2.password = bar_passwd

这样所有的非 /bar/ 库都会使用 ‘foo’ 帐号,因为它是唯一匹配的认证。 /bar/ 则会使用 ‘bar’ 帐号,虽然它们都能够匹配上但是 ‘bar’ 更准确。

最后,你可以告诉 Mercurial 一个 prefix 能够 同时 匹配 HTTP 与 HTTPS,通过去掉 prefix 字段的协议部分并添加一个 schemes 字段到认证中:

[auth]
bb.prefix = bitbucket.org
bb.username = foo
bb.password = foo_passwd
bb.schemes = http https

想要了解更多的信息,请查阅 hgrc 的 auth 文档