2011-05-31 95 views
65

当通过HTTP(S)连接到远程存储库时,有没有办法让git记住我的凭据?Git http - 安全地记住凭据

我试过core.askpass方法中详述的git-config让外部脚本提供我的凭据。虽然它的效果很好,但用户名和密码仍然以纯文本形式存储在小型shell脚本中。

+4

自2011年12月以来(git版本1.7.8),您可以使用所谓的**凭据助手**,请参阅我的答案:http://stackoverflow.com/a/12938677/46058 – 2012-10-17 16:14:41

+1

您现在可以使用加密的' netrc'文件!请参见[我的答案](http://stackoverflow.com/a/16164673/6309) – VonC 2013-04-23 08:38:19

回答

61

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

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

machine myRemoteServer 
login myUserName 
password s3cret 

全服务器端的配置,它可以很容易地包括到您的LDAP服务器通话时看到https://stackoverflow.com/questions/3947530/git-push-fatal-failed/7177690#7177690

+2

这是更安全的,然后在命令中输入密码,因为命令历史文件是世界可读的,而.netrc应该明确地隐藏起来,除了拥有的用户以外的任何人..在linux/cygwin的bash_history文件的权限(-rw-r - r-- 1 myName域用户8955 Aug 24 12:53 .bash_history) – Eddie 2011-08-24 19:35:39

+3

也是如此,因为它可以防止密码字符串在'ps -ax'的输出中是世界可见的Git命令正在运行。 – 2012-01-06 00:28:20

+0

另请参阅[Git - 如何在Windows上使用.netrc文件以保存用户和密码](http://stackoverflow.com/questions/6031214/git-how-to-use-netrc-file-on-windows-to -save-user-and-password) – 2012-06-01 08:48:19

2

安全选项是使用普通的SSH与公钥/私钥对。

+1

@John,我正在downvoting:在Git客户端和服务器之间,正确的,经过身份验证的HTTPS传输与SSH一样安全。在大型组织中,用户访问的集中式单帐户配置/撤销是一个非常常见的限制。 AFAIK,OpenSSH只能处理本地文件中的用户pubkeys,而不能通过目录查找(例如LDAP)。 – 2012-01-06 01:13:29

+2

@ RyanB.Lynch:仅供参考OpenSSH-LPK将公钥存储在LDAP中,但它被*修补* OpenSSH http://code.google。com/p/openssh -lpk/ – 2012-10-17 15:52:11

44

因为(我认为)Git版本1.7.8,从2 2011年12月1),git的支持所谓的凭据助手
看到gitcredentials(7)手册页

(该手册页还描述了适合于此的core.askpass)。

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

  • 缓存:详见git-credential-cache(1)

    将内存中的凭证缓存一段时间。存储的凭证永远不会触及磁盘,并在可配置的超时后被遗忘。

  • 店面:详情请见git-credential-store(1)

    将凭据无限期地存储在磁盘上。该文件将设置其文件系统权限,以防止系统上的其他用户读取它,但不会被加密或以其他方式受到保护。同样的安全性.netrc解决方案Eddie response


有在KDEWallet(KDE)中存储的用户名和密码,在GNOME Keyring一些第三方证书帮手,在Windows Credential Store,在MacOS X的钥匙扣等


脚注:

1)Set Up Git GitHub的帮助页提到

你需要的git 1.7.10或更新使用证书帮手

+1

凭证缓存方法在Ubuntu 12.04下的Git 1.7.9.5中没有问题。感谢指针。 – MKroehnert 2012-11-15 09:32:47

+3

谢谢 - 这为我做了诡计: git config credential.helper store – 2012-12-19 19:34:02

13

由于git 1.8.3(5月,2013年),现在你可以指定一个加密.netrc的git的使用方法:

一个new read-only credential helper(在contrib/credential/netrc/)与.netrc/.authinfo文件交互已添加。

该脚本将允许您使用GPG加密NETRC文件,避免其存储在一个纯文本文件的凭据的问题。

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

文件与.gpg扩展将通过GPG解析之前被解密。
多个-f参数都可以。它们按顺序处理,找到的第一个匹配条目通过凭证助手协议返回(见下文)。

当没有-f选项,则.authinfo.gpg.netrc.gpg.authinfo.netrc文件在你的home目录中的顺序使用。

要启用此凭据帮手:

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

(需要注意的是Git会在前面加上 “git-credential-” 的助手名和路径寻找它 )


查看完整的分步示例 at:
Is there a way to skip password typing when using https://github.com”。