如何在Linux终端的密钥链中存储您的Github https密码?

15

随着新的双重认证,每次终端需要密码时都必须创建一个新令牌,因此这一点现在变得更加重要。基本上,我正在寻找一个类似于 OS X 中可用的 osxkeychain 的替代品,可以在 Linux 桌面和服务器上使用:

git config --global credential.helper osxkeychain

我搜寻了所有可能的解决方案,但目前为止都不喜欢:

  • ssh代替https-不建议,并且GitHub上的链接不容易访问
  • cache --timeout=3600 - 它最终会过期,而新的2FA需要重新输入密码
  • gnome-keyring-在无头服务器上不起作用(至少不太优雅 - ssh密钥环要好得多)
  • 我的硬盘上加密的.netrc文件方法-穷人版手动密钥环实现?

得了吧,肯定有一些适用于Linux的正常终端键链可以连接到git的credential.helper!


1
你有一个存储库 git config --global credential.helper store,尽管密码将以未加密的方式存储在硬盘驱动器上。 - Willem Van Onsem
是的,这就是我所说的 .netrc 方法 - 它可以加密,但需要手动操作。 - metakermit
Kerberos认证怎么样?http://blog.gegg.us/2012/12/the-perfect-gitolite-server-with-kerberos-authentication-and-more/ - Willem Van Onsem
好的,我给VonC下面的评论也适用 - 我相信它可以工作,但我不觉得自己有足够的能力来复制脚本并手动编写密码文件和加密它们。如果有人真正知道他在做什么,并通过必要的审核进入例如Debian的软件包存储库,将其打包以适应git的credential.helper接口,那么我会很高兴使用它。 - metakermit
@kermit666 但是我在 https://dev59.com/om435IYBdhLWcg3wkA5e#18362082 中描述了所有步骤 ;) - VonC
显示剩余2条评论
3个回答

6

我仍然建议使用我在“在使用https://github.com时有一种跳过密码输入的方法”中描述的方法。

加密你的.netrc文件允许你在一个文件中存储多个凭据(GitHub、BitBicket等),并通过git凭据助手netrc来使用它(git1.8.3+)。

而且它与Github的两步验证兼容,如我在“配置Git客户端(如GitHub for Windows)以不要求身份验证”中所详细说明的那样。

它适用于Windows(和Linux或Mac)。 并且您可以限制几分钟/小时内gpg不会再次要求您输入私钥密码。


是的,那似乎是个不错的选择,但是当涉及到安全处理时,我不喜欢手动步骤的概念。你认为将其打包成更黑盒子的东西会很难,比如osxkeychain或ssh-agent(ssh的密码短语管理器叫什么?)吗? - metakermit
@kermit666 是哪个手动步骤?除了对 .netrc 文件进行初始加密外,其余步骤都是完全自动化的(当然,输入 gpg 密钥密码到 gpg-agent 的步骤除外)。 - VonC
据我所了解,我需要将netrc脚本复制到'/usr/local/bin'并使其可执行,创建带有密码短语的文件,设置其权限并加密它。相比之下,当使用osxkeychain或ssh-agent时,我不需要安装任何东西(它们是操作系统的一部分),它们会要求我在第一次(第一次添加内容到钥匙串/第一次创建RSA密钥对时)输入密码短语,并且它们会处理其他所有事情 - 只提示我解锁它。 - metakermit
@kermit666 我明白,但它确实有效 :) 而且你可以将 netrc 脚本复制到任何存在于你的 PATH 中的文件夹中。请确保你已经安装了 gpg2,而不仅仅是 gpg。 - VonC

2
2022年的答案是使用微软跨平台的GCM(Git凭据管理器)
请参见Git Credential Manager:为所有人提供身份验证(确保安全访问您的源代码比以往任何时候都更重要。Git凭据管理器有助于轻松实现这一点),作者是@github的高级软件工程师Matthew John Cheetham

Hello, Linux!

https://github.blog/wp-content/uploads/2022/04/4-gcm-linux.png?resize=1024%2C418?w=1024

为了成为 Git 认证的通用解决方案,我们努力让 GCM 在各种 Linux 发行版上运行良好,特别是以 Debian 为基础的发行版。

今天我们提供了 Debian 包可以从我们的GitHub 发布页面下载,同时也提供其他发行版的 tarballs(仅支持64位 Intel)。由于它是建立在 .NET 平台上的,这意味着构建和运行应该会更加简单,只要有 .NET 运行时即可。随着时间的推移,我们希望通过添加 ARM64 支持来扩展我们的发行版和 CPU 架构支持矩阵。

由于 Linux 发行版的广泛和多样性,GCM 提供了多种不同的凭据存储选项非常重要。除了 GPG 加密文件外,我们还通过 libsecret 添加了对 Secret Service API 的支持(还请参考 GNOME Keyring),这提供了类似于我们在 Windows 和 macOS 上提供的体验。

请参考Linux安装附加配置

-8

不建议使用此方法,但如果你赶时间,且其他方法都无效,那么可以尝试添加一个新的远程库:

git remote -rm origin 

git remote add origin https://username:mypassword@github.com/path/to/repo.git

就是这样,现在你不需要一遍又一遍地输入密码了

注意:此方法不适用于双重认证账户


6
所以你主张将密码以明文形式存储,让任何人都可以看到,如果你选择在一些开发人员坐在旁边时执行“git remote -v”? - Thomas Beauvais
我认为你永远不会遇到那种情况。但是如果你确实遇到了这种情况,你可以使用这个命令:"git config --global credential.helper store"。当你匆忙地克隆工作并推拉到某个仓库时,上述命令可能会有所帮助。 - Tarun Gupta
只要在GitHub中生成自定义应用凭据,这就没问题了。密码无论如何都不能在双重身份验证下使用。 - Andrew Mao
2
请不要对答案进行负评,因为这只是通过git提供的一种方式,我甚至不建议使用它。只是帮助人们了解另一种在某些情况下可能有用的方法。 - Tarun Gupta
2
明文密码不应存储在系统中。您应该使用个人访问令牌(PAT- Personal Access Token),然后URL将为https://username:PERSONAL_ACCESS_TOKEN@github.com/user/project.git。在这种情况下,如果泄露了PAT,您可以撤销它。那么密码就是安全的! - KargWare

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