如何使用Mercurial保存用户名和密码?

时间:2010-04-06 11:28:26

标签: mercurial hgrc

我在个人项目中使用了Mercurial,每次我想将某些内容推送到服务器时,我一直在输入用户名和密码。

我尝试将以下内容添加到主目录中的.hgrc文件中,但似乎完全被忽略了。

[ui]
username = MY_USER_NAME
password = MY_PASSWORD

如何以正确的方式做到这一点?

9 个答案:

答案 0 :(得分:322)

您可以在.hgrcMercurial.ini文件中创建一个身份验证部分,如下所示:

[auth]
bb.prefix = https://bitbucket.org/repo/path
bb.username = foo
bb.password = foo_passwd

'bb'部分是一个任意标识符,用于将前缀与用户名和密码匹配 - 方便用于管理不同站点(前缀)的不同用户名/密码组合

您也可以只指定用户名,然后只需在推送时输入密码即可。

有关详细信息,请参阅:http://hgtip.com/tips/advanced/2009-10-01-configuring-user-auth-https/

我还建议您查看keyring extension。因为它将密码存储在系统的密钥环而不是纯文本文件中,所以它更安全。它与Windows上的TortoiseHg捆绑在一起,目前正在讨论如何在所有平台上将其作为捆绑扩展分发。

答案 1 :(得分:167)

有三种方法:使用.hgrc文件,使用ssh或使用密钥环扩展


1。 INSECURE方式 - 更新你的〜/ .hgrc文件

适合我的格式(在我的〜/ .hgrc文件中)是这个

[ui]
username=Chris McCauley <chris.mccauley@mydomain.com>

[auth]
repo.prefix = https://server/repo_path
repo.username = username
repo.password = password


您可以通过添加唯一标记添加更多前缀,用户名和密码三元组来配置任意数量的repos。

这仅适用于Mercurial 1.3,显然您的用户名和密码是纯文本 - 不好。


2。安全方式 - 使用SSH来使用密码进行避免

Mercurial完全支持SSH,因此我们可以利用SSH无需密码登录服务器的能力 - 您可以进行一次性配置以提供自行生成的证书。这是迄今为止最安全的做法。


您可以找到有关配置passwordless login here

的更多信息


3。密钥环扩展

如果您想要一个安全的选项,但不熟悉SSH,为什么不尝试这个呢?

来自文档...

  

第一次拉/推时,扩展名会提示输入HTTP密码   来自/来自给定的远程存储库(就像它默认完成),但是   保存密码(由用户名和远程组合键入   存储库url)在密码数据库中。在下一次运行中它会检查   对于.hg / hgrc中的用户名,然后输入合适的密码   密码数据库,如果找到则使用这些凭证。

有更详细的信息here

答案 2 :(得分:64)

没有人提到密钥环扩展。它会将用户名和密码保存到系统密钥环中,这比将密码存储在静态文件中要安全得多,如上所述。执行以下步骤,您应该很高兴。我在大约2分钟内完成了Ubuntu的运行。

>> sudo apt-get install python-pip
>> sudo pip install keyring
>> sudo pip install mercurial_keyring

**Edit your .hgrc file to include the extension**
[extensions]
mercurial_keyring = 

https://www.mercurial-scm.org/wiki/KeyringExtension

答案 3 :(得分:30)

一个简单的黑客就是在项目的.hg/hgrc文件中为推送网址添加用户名和密码:

[paths]
default = http://username:password@mydomain.com/myproject

(请注意,这样以纯文本形式存储密码)

如果您正在处理同一域下的多个项目,则可能需要在~/.hgrc文件中添加重写规则,以避免对所有项目重复此操作:

[rewrite]
http.//mydomain.com = http://username:password@mydomain.com

同样,由于密码以纯文本格式存储,我通常只存储我的用户名。

如果你在Gnome下工作,我会解释如何在这里集成Mercurial和Gnome Keyring:

http://aloiroberto.wordpress.com/2009/09/16/mercurial-gnome-keyring-integration/

答案 4 :(得分:23)

NOBODY上面向新手用户解释/澄清了条款。他们对术语

感到困惑

.hg / hgrc - 此文件用于存储库,位于本地/工作空间位置/实际存储库的.hg文件夹中。

〜/ .hgrc - 此文件与下面的文件不同。该文件位于〜或主目录。

myremote.xxxx = ..... bb.xxxx = ......

这是[auth] section / directive下的一行,同时使用mercurial keyring扩展名。确保你放在那里的服务器名称,与你在做“hg clone”时使用的服务器名称匹配,否则密钥环会说,用户找不到。在下面的行中的bb或myremote是你在做“hg clone http:/.../../ repo1 bb或myremote”时必须给出的“别名”,否则它不会工作或你必须确保你的本地repository的.hg / hgrc文件包含相同的别名,即(你在做hg clone时作为最后一个参数给出了什么)。

PS以下链接以获取详细信息,对不起快速书面语法。

例如:如果位于〜/ .hgrc(Linux / Unix中的用户主目录)或Windows用户主目录中的mercurial.ini,则包含以下行,如果你这样做

`"hg clone http://.../.../reponame myremote"`

,然后每个http repo链接不会多次提示您输入用户凭据。在[extensions]下的〜/ .hgrc中,有一行“mercurial_keyring =”或“hgext.mercurial_keyring = /path/to/your/mercurial_keyring.py”..其中一行应该在那里。

[auth]
myremote.schemes = http https
myremote.prefix = thsusncdnvm99/hg
myremote.username = c123456

我正在尝试找出如何设置PREFIX属性,以便用户可以在没有用户名/密码提示的情况下克隆或执行任何Hg操作,而不必担心他在http://..../中提到的内容。 ..使用Hg repo链接时的servername。它可以是IP,服务器名称或服务器的FQDN

答案 5 :(得分:3)

使用MacPorts在Mac OSX上安装mercurial_keyring:

sudo port install py-keyring
sudo port install py-mercurial_keyring

将以下内容添加到〜/ .hgrc:

# Add your username if you haven't already done so.
[ui]
username = email@address.com

[extensions]
mercurial_keyring =

答案 6 :(得分:2)

如果您使用的是TortoiseHg,则必须执行附加屏幕截图中显示的这三个步骤,这将为您正在使用的特定存储库添加凭据。

enter image description here

要添加全局设置,您可以访问文件 C:\ users \ user.name \ mercurial.ini 并添加

部分
[auth]
bb.prefix=https://bitbucket.org/zambezia/packagemanager
bb.username = $username
bb.password = $password

希望这有帮助。

答案 7 :(得分:0)

虽然它可能适用于您的情况,但我发现使用Putty的Pageant生成公钥/私钥很有用。

如果您还使用bitbucket(.org),它应该能够为您的用户帐户提供公钥,然后将自动保护到存储库的命令。

如果重新启动时,Pageant没有为您启动,则可以向Windows“开始菜单”添加Pageant的快捷方式,并且快捷方式可能需要填充私有位置的“属性”(。 ppk)文件。

有了这个,Mercurial和你的本地存储库将需要设置为使用SSH格式推/拉。

以下是Atlassian针对Windows或Mac / Linux的网站的详细说明。

你不必接受我的话,毫无疑问是其他方法。也许这些步骤described here更适合您:

  
      
  1. 从开始启动PuttyGen - &gt; PuTTY-&GT;的puttygen
  2.   
  3. 生成新密钥并将其另存为没有密码的.ppk文件
  4.   
  5. 使用Putty登录要连接的服务器
  6.   
  7. 将PuttyGen中的公钥文本附加到〜/ .ssh / authorized_keys
  8. 的文本中   
  9. 从“开始”创建.ppk文件的快捷方式 - &gt;腻子开始 - &gt;启动
  10.   
  11. 从“启动”菜单中选择.ppk快捷方式(这将在每次启动时自动发生)
  12.   
  13. 查看系统托盘中的Pageant图标?右键单击它并选择“新会话”
  14.   
  15. 在“主机名”字段
  16. 中输入username @ hostname   
  17. 您现在将自动登录。
  18.   

答案 8 :(得分:0)

使用密匙环扩展名。将下面的条目添加到mercurial.ini文件。

[扩展名] mercurial_keyring =