Git http-安全地记住凭证

当通过 HTTP (S)连接到远程存储库时,有没有一种方法可以让 git 安全地记住我的凭据?

我已经尝试了 git-config中详细介绍的 core.askpass方法,让外部脚本提供我的凭据。虽然它工作得很好,但是用户名和密码仍然存储在小 shell 脚本中的纯文本中。

71742 次浏览

安全选项是使用带有公钥/私钥对的常规 SSH。

git在 HTTP 上运行时调用 cURL。您可以通过在用户的主目录中设置一个 .netrc文件并将其私有化(Linux 中为0600)来存储安全凭据。

该文件的内容提供每个远程域的用户名和密码。

machine myRemoteServer
login myUserName
password s3cret

有关完整的服务器端配置,请参见 https://stackoverflow.com/questions/3947530/git-push-fatal-failed/7177690#7177690,它可以很容易地包括对 ldap 服务器的调用。

自从(我认为) git 版本1.7.8,从20111)的12月2日开始,git 就支持所谓的 证件助手

有关详细信息,请参阅 Gitcredentials.html”rel = “ noReferrer”> git 凭证(7) 手册
(这个手册还描述了 core.askpass在哪里适合这个)。

默认的 git 安装包括两个助手:

  • Cache : 有关详细信息,请参见 Git-credential-cache (1)

    在内存中缓存一段短时间的凭据。存储的凭据永远不会触及磁盘,并且在可配置的超时后会被遗忘。< em > 注意,它是仅 Unix 解决方案,因为它使用套接字与守护进程通信。

  • Store : 有关详细信息,请参见 Git-credential-store (1)

    在磁盘上无限期地存储凭据。该文件将设置其访问许可权,以防止系统上的其他用户读取它,但不会加密或以其他方式保护。Eddie 响应中与 .netrc解决方案相同的安全性


在 KDEWallet (KDE)、 GNOME Keyring视窗资料库(现在集成在 适用于 Windows 的 Git中)、 MacOS X Keychain 等中存储用户名和密码时,有一些第三方凭证助手。


脚注:

1) 设置 Git GitHub 帮助页面提到

您需要 git1.7.10或更新的版本才能使用凭据助手

自从 Git 1.8(2013年5月)以来,您现在可以指定一个 加密 .netrc供 git 使用:

已经添加了一个 新的只读凭证助手(在 contrib/credential/netrc/中)来与 .netrc/.authinfo文件进行交互。

该脚本将允许您使用 使用 gpg 加密的 netrc 文件,从而避免将凭据存储在纯文本文件中的问题。

-f|--file AUTHFILE
specify netrc-style files.

带有 .gpg扩展名的文件在解析之前将由 GPG 解密。
多个 -f参数没有问题。它们按顺序处理,找到的第一个匹配条目通过凭据助手协议返回(参见下面)。

如果没有给出 -f选项,则按照以下顺序使用主目录中的 .authinfo.gpg.netrc.gpg.authinfo.netrc文件。

启用此凭据帮助程序:

git config credential.helper '$shortname -f AUTHFILE1 -f AUTHFILE2'

(注意,Git 将在 helper 名称前面加上“ git-credential-”,并查找它 在路上。)


完整的一步一步的例子:
在使用 https://github.com时是否有办法跳过输入密码”。