在TortoiseHg中存储密码

204

有没有一种方法可以配置TortoiseHg来存储我的密码?

我在Google Code上托管了一个项目,使用TortoiseHg进行访问。每当我想要将更改推送到Google Code时,TortoiseHg都会提示我输入用户名和密码。Google Code要求我使用自动生成的密码,每次都去查看它变得非常重复。

7个回答

269

两个现有的答案都建议以明文形式存储您的用户名和密码,这有点不可取。

相反,您应该使用Keyring扩展,因为它专门设计用于安全保存认证密码。它已经与TortoiseHg捆绑在一起,所以您只需要在mercurial.ini文件中编写以下内容来激活它:

[extensions]
mercurial_keyring=

您还需要通过编辑特定于存储库的.hg\hgrc文件来将您的用户名与推送URL关联起来,如下面的示例所示:

[paths]
default = https://<your_username>@bitbucket.org/tortoisehg/thg

如需将您的用户名与URL相关联的更多详细信息,请参阅Keyring扩展页面的存储库配置(SMTP)部分。


3
我刚试过这个解决方案,在Windows 7上运行得非常好。非常棒!谢谢! - mateuscb
3
正确的方法是使用 auth 部分来配置用户名。你不应该在仓库路径中包含认证信息,例如 [auth] \n bitbucket.org.prefix = bitbucket.org \n bitbucket.org.username = schlamar - schlamar
@Seth 这跟代理配置没有任何关系吧?! - schlamar
“keyring扩展已经与TortoiseHg捆绑在一起,所以您只需要通过在mercurial.ini文件中编写以下内容来激活它。”这似乎不适用于Linux。我在/.hgrc中添加了扩展,但是TortoiseHg将我的用户名和密码以明文形式存储在同一文件/.hgrc中。比将其存储在存储库目录中要好,但仍然不能称之为安全。因此,在Linux中,要么通过在.hgrc中添加[extensions] mercurial_keyring=来启用keyring扩展,要么它实现的“keyring”概念相当差。 - matteo
mercurial.ini 在 Windows 8.1 上的确切位置是什么? - Dmitri Nesteruk
显示剩余5条评论

152

三个步骤,请观看截图注意:此操作会以纯文本形式存储您的密码。

输入图像描述


37
看起来这个程序会以明文形式存储密码 - 如果你启用了钥匙扩展的话,密码字段就会变成禁用状态。 - Vlad Iliescu
5
仅在使用HTTPS协议时才有效,当设置为HTTP时,锁形图标会消失。 - Despertar
接受过时的答案很糟糕,应该有一个绿色的勾勾! - William T. Mallard

72

安全警告

尽管这个答案在2017-09-15被接受,但这不是一个推荐的解决方案。您永远不应该以明文形式存储密码。相反,应该使用mercurial_keyring扩展。请参见此处的另一个答案。


您可以将推送URL更改为https://username:password@hostname.com/repo

此方法在Google CodeMercurial的常见问题解答中有说明。

编辑:Mercurial FAQ解释了另一种实现方式:

从Mercurial 1.3版本开始,您也可以在hgrc文件中添加auth部分:
[auth]
example.prefix = https://hg.example.net/
example.username = foo
example.password = bar

51
这是一个糟糕的答案!你永远不应该在任何文件中存储明文密码...!! 另一种选项(有更多票数)使用mercurial_keyring才是正确的做法! - Lars Corneliussen
6
考虑到hg push是非破坏性的(您总是可以使用hg strip命令删除不需要的变更集),因此将代码库推送到远程存储库并不是一项高度特权的操作。因此,只要意识到安全影响,明文密码存储通常就足够了。 - Søren Løvborg
4
问题不在于有人可能彻底破坏存储库,而在于:(1)人们会重复使用密码,因此一旦有人成功访问这个文本文件,他们就能够访问不相关的资源;(2)随意的黑客攻击可能会被悄悄地插入到源代码中...(3)代码可能是机密的(并非所有开发都是开源的),而被盗取的代码并不总是令人愉快的。 - max
6
也许从理论上讲是对的,但 OP明确说明他正在使用自动生成的密码。版本控制可以防止此类情况发生,您可以查看所有已检入的更改,这怎么可能成为问题呢?如果有人可以访问存储在您计算机上的明文密码,则他们也可以访问您的代码。密码在这里毫无意义,因为他们可以将您的代码转移到一个设备中。 - goldenratio
4
这并不是一个糟糕的答案。并非每种情况都需要那种安全级别。密钥环扩展是一种选择,就像这个一样。 - Cypher
显示剩余3条评论

12

2

只需要修改本地代码库 .hg 目录下的 hgrc 文件,使其看起来像这样:

[paths]
default = https://name:password@yourproj.googlecode.com/hg/

其中,name 是您的 Google Code 登录名(不包括 gmail/googlemail 部分),例如 'fredb' (而不是 fredb@gmail.com),password 是由 Google 生成的密码,yourproj 是您的 GC 项目名称。因此,示例可能如下:

default = https://fred:xyz123@fredproj.googlecode.com/hg/

11
永远不要以明文方式存储密码。绝对不要!使用mercurial_keyring - TortoiseHG,然后只需输入一次密码即可。 - Lars Corneliussen
1
永远不要说“永远不要” :) 是的,SSH密钥比Keyring更可取,Keyring比明文更可取,但实际情况有所不同。 附言:我赞同“keyring”答案和这个答案。 - Alex Shesterov

0

这对我来说使用SSH是有效的。我知道密码是明文的,但在这个项目中这不是问题。 您必须更改myUser和MyOPas为您的凭据以及路径:TortoisePlink.exe。 编辑mercurial.ini文件。

[reviewboard]
password = myPass
[ui]
username = myUser
ssh = "C:\Program Files\TortoiseHg\lib\TortoisePlink.exe" -l myUser -pw  myPass

0

如果您想在mercurial.ini中存储密码,但在升级到TortoiseHg 4.9或更高版本后无法正常工作,则可能的解决方案是将端口添加到前缀中:

[auth]
tax.prefix = http://server:8080
tax.username = cerveser
tax.password = mypassword

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接