【问题标题】:How to save username and password with Mercurial?如何使用 Mercurial 保存用户名和密码?
【发布时间】:2011-02-04 18:41:24
【问题描述】:

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

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

[ui]
username = MY_USER_NAME
password = MY_PASSWORD

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

【问题讨论】:

    标签: mercurial hgrc


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 为什么当服务器是: ssh://HGSERVER 时这不起作用? “ssh://username:password@HGSERVER”格式也不起作用..
    • @Oren -- 看看下面的评论 -- 如果你使用 SSH,为什么不使用基于密钥的登录?
    • @santafebound 正如文中所说,它是“任意的”,仅用于将用户名和密码与前缀相关联,因此请提供任何对您有意义的标签。
    • 我真的不建议以纯文本形式存储密码(这就是这个答案的作用,即使它也简要提到了一个更好的选择)。
    【解决方案2】:

    有三种方法可以做到这一点:使用 .hgrc 文件、使用 ssh 或使用密钥环扩展名


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

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

    [ui]
    username=Chris McCauley <chris.mccauley@mydomain.com>
    
    [auth]
    repo.prefix = https://server/repo_path
    repo.username = username
    repo.password = password
    


    您可以通过添加更多前缀、用户名、密码的三元组来配置任意数量的存储库,方法是在前面添加一个唯一标记。

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


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

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


    你可以找到更多关于配置passwordless login here的信息


    3。密钥环扩展

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

    来自文档...

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

    有更详细的资料here

    【讨论】:

    • Satoru,Chris 不是在谈论 mercurial,而是在谈论 ssh:可以设置 ssh,这样您就不必使用密码来识别自己(如此处所述:debian-administration.org/articles/152)。
    • 方法 2 是真正唯一安全处理事情并维护远程系统上的用户级权限的方法。
    • user570626 使用密钥环集成的答案比其中任何一个都要好得多。 @Peter Rowell:如果您有几个用户和存储库,ssh 设置真的很痛苦;您需要本地 unix 用户,并且不得不限制可以使用 .ssh/authorized_keys 和 shell 包装器运行的命令。不完全是一个干净的解决方案。
    • @Peter Rowell:1. 这有什么不同?我说他的解决方案最好不要早点。 2.它与托管环境无关,它纯粹是客户端(不像您的SSH解决方案需要在服务器端进行更改以支持它)。 3. 抛砖引玉,我仍然说这不是一个干净的解决方案。你需要一个本地用户,你必须给他们 shell 访问权限然后限制它。 Shell 访问并不总是一个明智的选择。令我惊讶的是,像您这样的人没有遇到不想授予您的服务外壳访问权限的系统管理员。
    • @Draemon:我想我们有不同的经历。就个人而言,我不会在没有 shell 提示的系统上工作。它使我完全依赖其他系统来安装我需要的东西。我的一般经验是,如果我无法获得提示,我几乎肯定无法获得我认为对我的工作流程至关重要的其他服务。不同的人使用不同的(键)击键。
    【解决方案3】:

    没有人提到密钥环扩展。它将用户名和密码保存到系统密钥环中,这比将密码存储在如上所述的静态文件中要安全得多。执行以下步骤,您应该一切顺利。我在大约 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

    【讨论】:

    • 这是我最喜欢的解决方案。 ... 只是为了支持 @hadrien 所说的,在描述的三个动作之后,它在 Mac OS X 上就像一个魅力。
    • 我也支持 @ngeek 支持我!
    • 在 Windows 上至少 TortoiseHg 支持密钥环扩展:全局设置 -> 扩展 -> mercurial_keyring
    • 不幸的是,目前密钥环扩展在 Windows 上存在一个错误,即一次只能保存一个密码。见this question
    • 这似乎是最好的解决方案,但是当我尝试在 OSX 上使用它时,尝试从钥匙串获取密码时出现 python 段错误。
    【解决方案4】:

    一个简单的技巧是将用户名和密码添加到项目的.hg/hgrc 文件中的推送 url:

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

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

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

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

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

    如果您在 Gnome 下工作,我将在此处解释如何集成 Mercurial 和 Gnome Keyring:

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

    【讨论】:

    • 我已经下载了扩展,但是,当我尝试推送时,密码提示拒绝让我通过 :( 可能是我做错了。我以前从未使用过 Gnome Keyring . 谢谢大家。
    • 您可能希望使用 --debug 和 --verbose 选项来进行 hg push 看看出了什么问题...
    • 非常适合手头的情况...如果您使用的是 ssh,则不需要传递密码...这就是密钥 a 的用途
    • 当然,假设您拥有一台可以获取公钥的设备。
    【解决方案5】:

    上面的 NOBODY 向新手用户解释/澄清了条款。他们对这些术语感到困惑

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

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

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

    这是 [auth] 部分/指令下的行之一,同时使用 mercurial 密钥环扩展。确保您放在那里的服务器名称与您在执行“hg clone”时使用的名称匹配,否则密钥环会说,找不到用户。下面一行中的 bb 或 myremote 是您在执行“hg clone http://.../../repo1 bb 或 myremote”时必须提供的“别名”,否则,它将不起作用,或者您必须确保您的本地存储库的 .hg/hgrc 文件包含相同的别名,即(您在执行 hg clone 时给出的 .. 作为最后一个参数)。

    PS以下链接以获得清晰的细节,抱歉快速写出语法。

    ex:如果在 ~/.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 回购链接时的服务器名称。它可以是 IP、服务器名或服务器的 FQDN

    【讨论】:

      【解决方案6】:

      使用 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 =
      

      【讨论】:

      • 运行这些命令并更新我的 .hgrc 文件后,我在 TortoiseHg 中得到“没有名为 mercurial_keyring 的模块”。
      • 确保您拥有正确的 Python 版本,如下所述:stackoverflow.com/questions/5173197/…
      【解决方案7】:

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

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

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

      希望这会有所帮助。

      【讨论】:

        【解决方案8】:

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

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

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

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-07
          • 2021-12-07
          • 2012-08-31
          • 1970-01-01
          相关资源
          最近更新 更多