通过HTTP(S)连接到远程存储库时,是否有办法安全地让git记住我的凭据?
我尝试了core.askpass
详细介绍的方法git-config
,让外部脚本提供我的凭据。尽管效果很好,但用户名和密码仍以纯文本格式存储在小型Shell脚本中。
通过HTTP(S)连接到远程存储库时,是否有办法安全地让git记住我的凭据?
我尝试了core.askpass
详细介绍的方法git-config
,让外部脚本提供我的凭据。尽管效果很好,但用户名和密码仍以纯文本格式存储在小型Shell脚本中。
Answers:
git
通过HTTP运行时调用cURL。您可以通过设置一个.netrc
在用户的主目录中文件并将其设置为用户专用(Linux中为0600)。
该文件的内容提供了每个远程域的用户名和密码。
machine myRemoteServer
login myUserName
password s3cret
有关 完整的服务器端配置,请参阅/programming/3947530/git-push-fatal-failed/7177690#7177690,其中可以轻松包括对ldap服务器的调用。
machine github.com login jqhacker password s3cret
.netrc
语法,而不是shell命令。
自(我认为)git版本1.7.8(自2011年12月2日起1)以来,git支持所谓的凭据助手。
有关详细信息,请参见gitcredentials(7)联机帮助页
(此联机帮助页还描述了core.askpass
适合该页的位置)。
默认的git安装包括两个助手:
cache:有关详细信息,请参见git-credential-cache(1)。
在短时间内将凭据缓存在内存中。存储的凭据永远不会接触磁盘,并且在可配置的超时后会被忘记。请注意,这是仅Unix的解决方案,因为它使用套接字与守护程序通信。
store:有关详细信息,请参见git-credential-store(1)。
将凭据无限期地存储在磁盘上。该文件将设置其文件系统权限,以防止系统上的其他用户读取该文件,但不会被加密或受到其他保护。与Eddie响应中的.netrc
解决方案相同的安全性
有一些第三方凭据助手,用于在KDEWallet(KDE),GNOME Keyring,Windows Credential Store(现在已集成到Windows的Git中),MacOS X Keychain等中存储用户名和密码。
脚注:
1)将成立的Git的GitHub帮助页面中提到,
您需要git 1.7.10或更高版本才能使用凭据帮助器
从git 1.8.3(2013年5月)开始,您现在可以指定加密.netrc
的git才能使用:
已添加一个新的只读凭证帮助器(in
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会在“
git-credential-
在助手名称 ”,并在路径中查找它。)
请参阅以下完整的分步示例:
“使用https://github.com
“时是否可以跳过密码输入。
安全选项是对公共/专用密钥对使用常规SSH。
AuthorizedKeysCommand
,sshd_config
其中提供了一个选项,该选项指定运行的程序或脚本来获取用户的公共密钥。我不知道支持它的最低版本的OpenSSH,但是它已经存在了几年。一方面,这是在Google Cloud VM中实现ssh身份验证以允许登录到新VM的方式(公钥存储在VM或项目配置中,或者以另一种方式添加到用户的Google帐户中,以实现SSO)。