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

如何使用Mercurial保存用户名和密码?,mercurial,hgrc,Mercurial,Hgrc,我在一个个人项目中使用了Mercurial,每次我想把东西推送到服务器上时,我都会输入我的用户名和密码 我尝试将以下内容添加到我的主目录中的.hgrc文件中,但它似乎被完全忽略了 [ui] username = MY_USER_NAME password = MY_PASSWORD 如何正确执行此操作?有三种方法:使用.hgrc文件、使用ssh或使用keyring扩展名 1.不安全的方法-更新~/.hgrc文件 适用于我的格式(在我的~/.hgrc文件中)是 [ui] 用户名=克里斯·麦考利

我在一个个人项目中使用了Mercurial,每次我想把东西推送到服务器上时,我都会输入我的用户名和密码

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

[ui]
username = MY_USER_NAME
password = MY_PASSWORD
如何正确执行此操作?

有三种方法:使用.hgrc文件、使用ssh或使用keyring扩展名

1.不安全的方法-更新~/.hgrc文件 适用于我的格式(在我的~/.hgrc文件中)是

[ui]
用户名=克里斯·麦考利
[授权]
repo.prefix=https://server/repo_path
repo.username=用户名
repo.password=密码

您可以通过添加更多前缀、用户名、密码三元组(通过预先添加唯一标记)来配置任意数量的回购协议。 这只适用于Mercurial 1.3,显然您的用户名和密码是纯文本的-不好


2.安全方法-使用SSH避免使用密码 Mercurial完全支持SSH,因此我们可以利用SSH的能力在不使用密码的情况下登录到服务器—您可以进行一次性配置以提供一个自行生成的证书。这是目前为止做你想做的事情最安全的方法。
您可以找到有关配置的更多信息


3.钥匙圈扩展 如果您想要一个安全的选项,但不熟悉SSH,为什么不试试这个呢

从文件中

扩展在第一次拉/推时提示输入HTTP密码 到/从给定的远程存储库(就像默认情况下那样),但是 保存密码(由用户名和远程密码组合输入) 密码数据库中的存储库url)。在下一次运行时,它检查 在.hg/hgrc中输入用户名,然后在 密码数据库,并在找到时使用这些凭据


有更详细的信息

一个简单的破解方法是在项目的
.hg/hgrc
文件中的推送url中添加用户名和密码:

[paths]
default = http://username:password@mydomain.com/myproject
(请注意,通过这种方式,您可以将密码存储为纯文本)

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

[rewrite]
http.//mydomain.com = http://username:password@mydomain.com
同样,由于密码是以明文形式存储的,所以我通常只存储用户名

如果您在Gnome下工作,我将在这里解释如何集成Mercurial和Gnome密钥环:


您可以在
.hgrc
Mercurial.ini
文件中创建一个auth部分,如下所示:

[auth]
bb.prefix = https://bitbucket.org/repo/path
bb.username = foo
bb.password = foo_passwd
“bb”部分是一个任意标识符,用于将前缀与用户名和密码匹配-便于管理不同站点的不同用户名/密码组合(前缀)

您还可以只指定用户名,然后在推送时只需键入密码


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

没有人提到keyring扩展。它会将用户名和密码保存到系统密钥环中,这比如上所述将密码存储在静态文件中要安全得多。执行下面的步骤,你就可以开始了。我用了大约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 = 

使用MacPorts在Mac OSX上安装mercurial_密钥环:

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 =

上面没有人向新手用户解释/澄清术语。他们被这些术语弄糊涂了

.hg/hgrc——此文件用于存储库,位于实际存储库的.hg文件夹中的local/workspace location/

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

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

这是使用mercurial keyring扩展时[auth]节/指令下的一行。确保您放置在那里的服务器名称与您在执行“hg克隆”时使用的名称相匹配,否则keyring将显示“找不到用户”。下面一行中的bb或myremote是执行“hg clone http:/…/../repo1 bb或myremote”时必须提供的“别名”,否则,它将无法工作,或者您必须确保本地存储库的.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、servername或服务器的FQDN。在您的情况下,它可能工作,也可能不工作。我发现使用Putty的Pageant生成公钥/私钥很有用

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

如果重新启动后Pageant没有为您启动,您可以将Pageant的快捷方式添加到Windows“开始菜单”中,并且该快捷方式可能需要有一个“属性”来填充您的私有(.ppk)文件的位置

有了这个,Mercurial和y
[auth]
myremote.schemes = http https
myremote.prefix = thsusncdnvm99/hg
myremote.username = c123456
[auth]
bb.prefix=https://bitbucket.org/zambezia/packagemanager
bb.username = $username
bb.password = $password