什么是适用于Linux的最佳加密git凭证助手?

26

我一直在寻找一个好的加密git凭证助手来运行在Linux上(可以以加密方式存储密码,并在后续中检索密码,符合git-credential协议),但令人惊讶的是并没有找到多少相关资料。

在所有的git文档和相关的git凭证文档中,它们甚至没有提到这样一个存在。对于Mac,它总是提到osxkeychain,但如果你使用Linux,它只会将你重定向到解释如何使用“cache”作为辅助工具的文档。一些参考文献提到了微软的git凭据管理器用于Windows,但对于Linux则完全没有相关信息。

如果你使用实际密码,“cache”看起来是一个半可接受的解决方案。虽然不算太糟糕,但离理想还有很大差距。但是,如果你使用个人访问令牌(如果您希望为您的repo帐户保持2因素安全性,则必须使用此功能),则"cache"就无法胜任了。偶尔需要输入这些随机生成的PAT,无论频率多低,都是一个非常糟糕的想法。你不可能真正记住它们,并且在明文形式下存储它们是一种安全妥协。(另外,如果你想自动化一些git操作,存储PAT也是不可行的。)

那么,解决方案是什么呢?如果有一个适用于Windows和Mac的解决方案,我相信至少有一个很好的Linux选项,可能有很多。例如,我听说你可以使用Gnome来完成它。但是如果你没有Gnome,应该怎么办?我听说微软的Windows管理器可能在Linux下运行,但还没有尝试过。那是唯一的选择吗?是否有一个开源的选择?

3个回答

27

这是我们在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://dev59.com/WVoV5IYBdhLWcg3wLsT5#40312117

以下是使用gpg-加密的.netrc文件的方法:https://dev59.com/om435IYBdhLWcg3wkA5e#18362082


提醒: libgnome-keyring 是特定于 GNOME 的,且具有以下特点:

谢谢!这两个看起来都是不错的解决方案——我想是时候升级我的 Git 了。 - reductionista
6
你也可以省略路径,直接使用git config --global credential.helper libsecret命令吗?对我来说很有效。 - janispritzkau
如果你发现命令的末尾不是 libsecret 而是 git-credential-libsecret,由于它不在 /usr/local/bin 或者 /usr/bin 下面,所以 git 可能无法通过 libsecret 找到它。我已经尝试在一个非标准系统上只使用 libsecret 但没有成功,但希望对大多数人来说可以。 - dragon788
在 Debian 10 Buster 上,我安装了 gnome-keyring 软件包来避免错误 ** (process:12939): CRITICAL **: 12:15:04.448: lookup failed: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.secrets was not provided by any .service files。在 Buster 上,您还需要编译 git-credential-libsecret - bogec
2
在2022年的Manjaro/Arch上,路径只是/usr/lib/git-core/git-credential-libsecret(否则,您可以通过运行locate -b git-credential-libsecret来找到它)。 - joeytwiddle
1
在 Fedora 和 RHEL 系统上,路径为 /usr/libexec/git-core/git-credential-libsecret。它由 git-credential-libsecret 软件包提供。 - killjoy

0
如果您已经使用像1Password、Lastpass、Pass或Gopass这样的密码管理器,只要您只在本地系统或信任的系统上使用它,就可以将其用于管理您的Git凭据。
我进行了快速搜索,并找到了一些针对上述每个应用程序的git-credential-APPNAME助手(gopass应该与pass实现兼容)。

我问的原因是想在远程其他人也有账号且我不信任的机器上使用它。我从未成功地使用过任何凭据助手,但我通过 ssh 转发解决了我想要解决的问题。现在我总是使用 ssh:// 进行检出,只要设置了转发,它就可以通过我的 ssh 代理验证我是否可以访问我的 github 账户。 - reductionista
1
使用 pass 或 gopass,您可以转发类似于 SSH 的密钥,并且只有在密钥存在且解锁时才解密秘密。在转发您的 SSH 代理时,请记住添加一个配置,限制它在远程主机上的重复使用方式。 - dragon788
哦,所以你可以在ssh配置中添加一些内容,以便说“仅允许将此密钥转发进行身份验证到github.com,而不是其他主机”?谢谢,这是一个好主意! - reductionista
@reductionista,我现在也在尝试解决同样的问题,我相信很多人都曾经想过并且将来也会想到同样的事情。你能否写出你使用的方法以及与Git进行交互的相关代码,特别是ssh转发方面的内容?(如果需要的话,我很乐意为此创建一个问题。)我认为这对很多人来说都会非常有用。 - Mobeus Zoom
1
如果您已经习惯于在本地使用ssh-agent(这样您可以在未登录时保护ssh密钥的密码,但不必每次ssh到其他地方时重新输入密码),那么在外部主机上使用git并不难:重要的一步是将ForwardAgent yes添加到~/.ssh/config文件中。您可以通过在远程主机上运行ssh-add -l来测试它是否正常工作,然后重新运行带有SSH风格URL的git clone或使用git remote add代替。正确设置ssh-agent是一个更长的话题,但是有许多好的答案可供参考。 - reductionista

0

尝试使用git-credential-oauth,它已经包含在许多Linux发行版中,包括FedoraDebianUbuntu

不再需要密码!不再需要个人访问令牌!不再需要SSH密钥!

Git凭据助手使用OAuth安全地验证到GitHub、GitLab、BitBucket和其他锻造厂。

第一次推送时,助手将打开一个浏览器窗口进行身份验证。存储生命周期内的后续推送不需要任何交互。

这与您选择的任何存储助手兼容,例如git-credential-cache或git-credential-libsecret。


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