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

我在一个个人项目中使用Mercurial,每次我想向服务器推送一些东西时,我都要输入我的用户名和密码。

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

[ui]
username = MY_USER_NAME
password = MY_PASSWORD

如何正确地做到这一点?

178548 次浏览

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

< br >

1. 不安全的方式-更新您的~/。hgrc文件

适合我的格式(在我的~/。HGRC文件)是这样的

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


[auth]
repo.prefix = https://server/repo_path
repo.username = username
repo.password = password
< p > < br > 您可以通过添加前缀、用户名、密码的三重组合来配置尽可能多的repo。

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

< br >

2. 安全方式-使用SSH,避免使用密码

Mercurial完全支持SSH,所以我们可以利用SSH不需要密码就能登录到服务器的能力 -你做一次关闭配置,以提供一个自生成的证书。这是目前为止最安全的方法。


你可以找到有关配置无密码登录

的更多信息

< br >

3.密匙环扩展

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

从医生那里…

扩展在第一次拉/推时提示输入HTTP密码 到/从给定的远程存储库(就像默认情况一样),但是 保存密码(由用户名和remote组合输入) 密码数据库中的存储库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 Keyring:

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

你可以在你的.hgrcMercurial.ini文件中创建一个认证部分,如下所示:

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

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

您也可以只指定用户名,然后在按下按钮时只需输入密码。

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

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

在Mac OSX上使用MacPorts安装mercural_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 =

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

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

~ /。HGRC——这个文件与下面的文件不同。该文件位于~或主目录。

< p > myremote.xxxx =… bb.xxxx =……< / p >

这是[auth]节/指令下的一行,同时使用mercurial keyring扩展。确保你放在那里的服务器名称,与你在做“hg克隆”时使用的名称相匹配,否则keyring会说,用户未找到。bb或myremote在下面的行,是“别名”,你必须给,而做“hg克隆http:/…否则,它不会工作,或者你必须确保你的本地存储库的。hg/hgrc文件包含相同的别名,即(你在做hg克隆时给出的..作为最后一个参数)。

PS以下链接为清晰的细节,抱歉太快写语法。

  • 14270648 < a href = " https://stackoverflow.com/questions/12468634/opensuse-apache-windows-ldap-group-user-authentication-mercurial/14270648 " > https://stackoverflow.com/questions/14267873/mercurial-hg-no-changes-found-cant-hg-push-out/14269997 14269997 < / >
  • 14270648 < a href = " https://stackoverflow.com/questions/12468634/opensuse-apache-windows-ldap-group-user-authentication-mercurial/14270648 " > http://www.linuxquestions.org/questions/showthread.php?p=4867412 post4867412 < / >
  • 14270648 < a href = " https://stackoverflow.com/questions/12468634/opensuse-apache-windows-ldap-group-user-authentication-mercurial/14270648 " > https://stackoverflow.com/questions/12503421/hg-push-error-and-username-not-specified-in-hg-hgrc-keyring-will-not-be-used/14270602 14270602 < / >
  • . href="https://stackoverflow.com/questions/12468634/opensuse-apache-windows-ldap-group-user-authentication-mercurial/14270648#14270648">OpenSUSE Apache - Windows LDAP -组用户认证- Mercurial . href="https://stackoverflow.com/questions/12468634/opensuse-apache-windows-ldap-group-user-authentication-mercurial/14270648#14270648">

如果在~/。hgrc (Linux/Unix中用户的主目录)或Windows中的mercury .ini在用户的主目录中,包含,下面的行,如果你做

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

,那么在每个HTTP回收链接中,用户凭证的提示永远不会超过一次。在~ /。HGRC下的[扩展]一行“mercural_keyring =”或“hgeext。mercural_keyring = /path/to/your/ mercural_keyring .py" ..这里应该有一条线。

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

我试图找出如何设置前缀属性,以便用户可以克隆或执行任何Hg操作,没有用户名/密码提示,而不用担心他在http://..../中提到的…当使用Hg repo链接时,为服务器名。它可以是IP、服务器名或服务器的FQDN

虽然它在您的情况下可能工作,也可能不工作,但我发现使用Putty的Pageant生成公钥/私钥非常有用。

如果你也在使用bitbucket (.org),它应该能让你为你的用户帐户提供一个公钥,然后到达存储库的命令将被自动保护。

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

有了这些,需要将Mercurial和本地存储库设置为使用SSH格式进行推送/拉取。

下面是Atlassian的网站上针对Windows或Mac/Linux的一些详细说明。

你不必相信我的话,毫无疑问还有其他方法可以做到这一点。也许这些步骤这里描述更适合你:

  1. 从“Start -> PuTTY-> PuttyGen . sh”开始PuttyGen
  2. 生成一个新密钥,并将其保存为.ppk文件,不带密码短语
  3. 使用“Putty”登录待连接的服务器
  4. 将PuttyGen中的公钥文本附加到~/.ssh/authorized_keys的文本中
  5. 从Start -> Putty到Start -> Startup创建。ppk文件的快捷方式
  6. 从启动菜单中选择.ppk快捷方式(这将在每次启动时自动发生)
  7. 看到系统托盘中的Pageant图标了吗?右键选择“新建会话”
  8. 在“主机名”字段中输入username@hostname
  9. 现在您将自动登录。

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

enter image description here

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

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

希望这能有所帮助。