Git http - 安全地记住凭据

Joh*_*erg 67 git authentication

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

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

Edd*_*die 65

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

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

machine myRemoteServer
login myUserName
password s3cret
Run Code Online (Sandbox Code Playgroud)

有关 完整服务器端配置,请参阅/sf/ask/276327131/#7177690,这可轻松包含对ldap服务器的调用.

  • 这也是正确的,因为当Git命令运行时,它会阻止密码字符串在'ps -ax'的输出中被世界可见. (3认同)
  • 如果您没有在命令行上提供密码,git会提示您输入密码.这意味着它在bash历史记录中不可见.如果将其存储在.netrc中,则对机器具有物理访问权限或root访问权限的任何人都可以读取密码,因为密码以纯文本格式存储.但是你每次都要打字,这真的很不方便. (3认同)
  • 这比在命令中键入密码更安全,因为命令历史文件是世界可读的,而.netrc应该明确地除了拥有用户之外的任何人隐藏.bash_history文件的权限的linux/cygwin示例(-rw-r-- r-- 1 myName Domain Users 8955 Aug 24 12:53 .bash_history) (2认同)
  • 或者在一行中:`机器github.com登录jqhacker密码s3cret` (2认同)
  • @eddie我上面的建议是一个替代`.netrc`语法,而不是shell命令. (2认同)

Jak*_*ski 51

自从(我认为)git版本1.7.8,从2011年12月2日起1),git支持所谓的凭证助手.

有关详细信息,请参阅gitcredentials(7)联机帮助页
(此联机帮助页还描述了core.askpass适用于此的内容).

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

  • cache:有关详细信息,请参阅git-credential-cache(1).

    在内存中缓存凭证一小段时间.存储的凭据永远不会触及磁盘,在可配置的超时后会被忘记.请注意,它是纯Unix解决方案,因为它使用socket与守护进程通信.

  • store:有关详细信息,请参阅git-credential-store(1).

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


在KDEWallet(KDE),GNOME Keyring,Windows Credential Store(现在集成在Git for Windows中),MacOS X Keychain等中存在一些第三方凭证助手,用于存储用户名和密码.


脚注:

1)成立的Git的GitHub帮助页面中提到,

您需要git 1.7.10或更新版本才能使用凭据帮助程序

  • 谢谢 - 这对我有用:git config credential.helper store (3认同)

Von*_*onC 14

git 1.8.3(2013年5月)开始,您现在可以为git 指定加密.netrc使用:

添加了一个与文件交互的新的只读凭证帮助程序(in contrib/credential/netrc/).netrc/.authinfo.

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

-f|--file AUTHFILE
specify netrc-style files.  
Run Code Online (Sandbox Code Playgroud)

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

当没有-f给出选项,.authinfo.gpg,.netrc.gpg,.authinfo,和.netrc在你的主目录文件中的顺序使用.

要启用此凭据帮助程序:

git config credential.helper '$shortname -f AUTHFILE1 -f AUTHFILE2'
Run Code Online (Sandbox Code Playgroud)

(请注意,Git会将" git-credential-"添加到帮助程序名称并在路径中查找它.)


请参阅完整的分步示例:
"使用时是否有办法跳过密码输入https://github.com ".