有没有办法安全地让git在通过HTTP(S)连接到远程存储库时记住我的凭据?
我尝试了git-config
中详述的core.askpass
方法,让外部脚本提供我的凭据。虽然它工作得很好,但用户名和密码仍然以纯文本形式存储在小shell脚本中。
答案 0 :(得分:63)
git
在HTTP上运行时调用cURL。您可以通过在用户的主目录中设置.netrc
文件并将其设置为用户私有(Linux中为0600)来存储安全凭据。
该文件的内容提供每个远程域的用户名和密码。
machine myRemoteServer
login myUserName
password s3cret
有关完整服务器端配置的信息,请参阅https://stackoverflow.com/questions/3947530/git-push-fatal-failed/7177690#7177690,其中包含对ldap服务器的调用。
答案 1 :(得分:48)
由于(我认为)git版本1.7.8,从2011年12月2日起 1),git支持所谓的凭证帮助。
有关详细信息,请参阅 gitcredentials(7) 联机帮助页
(此联机帮助页还描述了core.askpass
适用于此的位置。)
默认的git安装包括两个帮助程序:
缓存:有关详细信息,请参阅git-credential-cache(1)。
在内存中缓存凭据一小段时间。存储的凭据永远不会触及磁盘,在可配置的超时后会被忘记。 请注意,它是纯Unix解决方案,因为它使用socket与守护进程通信。
商店:有关详细信息,请参阅git-credential-store(1)。
将凭据无限期地存储在磁盘上。该文件将设置其文件系统权限,以防止系统上的其他用户读取它,但不会加密或以其他方式受到保护。与Eddie response
.netrc
解决方案相同的安全性
有一些第三方凭据助手用于在KDEWallet(KDE),GNOME Keyring,Windows Credential Store(现在已集成在Git for Windows中),在MacOS中存储用户名和密码X钥匙扣等
<强> 脚注: 强>
1) Set Up Git GitHub帮助页面提到
您需要git 1.7.10 或更新才能使用凭证助手
答案 2 :(得分:14)
自git 1.8.3(2013年5月)以来,您现在可以为要使用的git指定加密.netrc
:
已添加 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
文件将按此顺序使用。< / p>启用此凭据帮助程序:
git config credential.helper '$shortname -f AUTHFILE1 -f AUTHFILE2'
(请注意,Git会将“
git-credential-
”添加到帮助程序名称并查找它 在路上。)
在以下位置查看完整的分步示例:
“Is there a way to skip password typing when using https://github.com
”。
答案 3 :(得分:2)
安全选项是使用具有公钥/私钥对的常规SSH。
答案 4 :(得分:1)