【问题标题】:What's the best encrypted git credential helper for Linux?Linux 最好的加密 git 凭证助手是什么?
【发布时间】:2018-11-14 17:41:49
【问题描述】:

我一直在为 Linux 寻找一个好的加密 git credential helper(可以以加密方式存储密码,并在以后检索它们,符合 git-credential 协议),我真的很惊讶没有似乎发生了很多事情。

在我见过的所有 git 文档和相关的 git-credential 文档中,他们甚至都没有提到这种东西的存在。它总是提到 Mac 的 osxkeychain,但是如果您运行的是 Linux,它只会将您重定向到解释如何使用“缓存”作为帮助程序的文档。一些参考文献提到了微软用于 Windows 的 git 凭证管理器。但对于 Linux 来说没有。

如果您使用实际密码,使用缓存似乎是一个半可行的解决方案。 不可怕,但远非理想。但是,如果您使用的是个人访问令牌(如果您想为您的回购维护帐户的 2 因素安全性,则必须使用该令牌),那么这是不行的。不得不偶尔输入其中一个随机生成的 PAT,无论多么罕见,都是一个非常糟糕的主意。您实际上无法记住它们,并且将它们以纯文本形式存储在某处是一种安全妥协。 (另外,如果你想自动化一些 git 操作怎么办?行不通。)

那么——这里的解决方案是什么?如果它同时适用于 Windows 和 Mac,我敢肯定 Linux 至少有一个不错的选择,可能很多。例如,我听说你可以用 Gnome 做到这一点。但是如果你没有 Gnome,你应该怎么做?听说微软的windows管理器可以在Linux下运行,但还没试过。那是唯一的选择吗?有开源选项吗?

【问题讨论】:

    标签: git git-credential-manager


    【解决方案1】:

    这是我们在 git 源中的内容:https://github.com/git/git/tree/master/contrib/credential

    因此您可以使用gnome-keyring(已弃用)、libsecret 或 gpg 加密的.netrc

    libsecret 可以与任何没有 GNOME 的 Linux 发行版一起使用,我相信。

    git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
    

    https://stackoverflow.com/a/40312117/7976758

    这是如何使用 gpg 加密的.netrc:https://stackoverflow.com/a/18362082/7976758

    【讨论】:

    • 谢谢!这两个看起来都是不错的解决方案——我猜是时候升级我的 git 了。
    • 你不能也省略路径而只做git config --global credential.helper libsecret吗?适合我
    • 如果您注意到命令的结尾不是 libsecret 它是 git-credential-libsecret 并且由于它不在 /usr/local/bin/usr/bin 下,它可能不在 @ 的路径中987654336@ 只需libsecret 即可找到它。我在非标准系统上仅使用 libsecret 进行了尝试,但它不起作用,但希望它对大多数人有用。
    • 在 debian 10 buster 上,我实际上安装了包 gnome-keyring 包以避免 `` ** (process:12939): CRITICAL **: 12:15:04.448: lookup failed: GDBus.Error :org.freedesktop.DBus.Error.ServiceUnknown:名称 org.freedesktop.secrets 未由任何 .service 文件提供```错误。在 buster 上,您还必须 compile git-credential-libsecret。
    【解决方案2】:

    如果您已经使用 1Password 或 Lastpass 或 pass 或 gopass 之类的密码管理器,您可能可以使用它来管理您的 git 凭据,只要您只在本地系统或您信任的系统上使用它。

    我快速搜索了一下,找到了一些git-credential-APPNAME 的帮助器(gopass 应该与 pass 实现兼容)。

    【讨论】:

    • 我问的原因是在其他人也有帐户但我不信任的远程机器上使用它。我从来没有让任何凭证助手工作,但我解决了我想通过 ssh 转发解决的问题。我现在不是通过 https:// 结帐,而是始终使用 ssh:// 结帐,只要设置了转发,它就可以通过我的 ssh 代理验证我可以访问我的 github 帐户。
    • 使用 pass 或 gopass,您可以转发类似于 SSH 的密钥,并且仅在密钥存在并解锁时解密秘密。转发 SSH 代理时要记住的一件事是添加一个配置来限制它在远程主机上的重用方式。
    • 哦,所以您可以在 ssh 配置中添加一些内容,说“只允许将此密钥转发到 github.com 进行身份验证,而不允许其他主机”?谢谢,这是个好主意!
    • @reductionista 我现在正在尝试解决同样的问题,我相信很多人都想知道并且会想知道和你一样的事情。你能写出你使用相关代码进行 ssh 转发然后与 Git 交互的方法吗? (如果有帮助,我很乐意围绕这个问题提出一个问题。)我认为这对很多人来说真的很有用
    • @Mobeus Zoom 如果您已经习惯在本地使用 ssh-agent(这样您可以在未登录时使用密码保护您的 ssh 密钥,但不必重新输入每次你 ssh 到其他地方时它)那么使用 git 在外国主机上运行它并不难:重要的步骤是将行 ForwardAgent yes 添加到 ~/.ssh/config。您可以使用 ssh-add -l 测试它是否在远程主机上运行,​​然后使用 SSH 样式的 url 重新运行 git clone,或者改用 git remote add。正确设置ssh-agent 是一个较长的主题,但有很多好的答案。
    猜你喜欢
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多