Git .netrc 文件认证问题

11

我正在使用GitHub。我创建了一个仓库并在我的Ubuntu机器上克隆了它。我已经在.netrc文件中做了以下条目:

machine https://github.com/xxx/yyy.git
login xxx
xxx

我希望在.netrc文件中添加这个条目后,Git不再要求我输入用户名和密码。但是即使这样做了,Git仍然提示我输入凭据。

我有什么地方没做对吗?


你为什么期望git能做这样的事情呢? - ckruczek
1
git默认在每次进行push或pull请求时都会提示输入用户名和密码。为了避免这种情况,你可以在.netrc文件中添加一条记录。链接 - Arul Selvam
3
据我所知,machine 应该只是主机名,没有任何协议或路径。因此,在您的情况下只需使用 github.com。在 .netrc 中,除了主机名之外,没有更细粒度的登录定义。 - sschuberth
2个回答

12

~/.netrc文件(在Windows上为%HOME%\_netrc)不足以保护您的信息安全。

最好使用gpg + netrc对该文件进行加密,就像我在这里所做的那样

或者使用一个管理加密的脚本。
在第二种情况下,您需要:

  • git-credential-netrc.perl文件复制到$PATH/%PATH%中的任何位置,

  • 添加:

      cd yourRepo
      git config credential.helper "netrc -d -v"
    

(一旦工作正常,您可以删除-d-v:这些都是调试标志)

  • 在远程URL中使用您的登录信息:

  git set-url origin https://yourLogin@github.com/yourLogin/yourRepo

参见“Git - 如何在Windows上使用.netrc文件保存用户名和密码”获取凭据“netrc”助手(Git 1.8.3+)的一般原理。


我认为这是一个不错的解决方案,但我有一些安全方面的担忧。您将用户名和密码放在计算机上可被几乎所有人读取的文件中。更好的选择是使用SSH密钥,并将SSH密钥放入SSH代理中。 - ckruczek
2
@ckruczek 我知道,我同意您的观点!我自己只使用gpg2加密的_netrc文件:请参阅https://dev59.com/om435IYBdhLWcg3wkA5e#18362082。相同的凭据帮助程序,但具有gpg加密。 - VonC
@sschuberth 很有意思!我看了一下 https://github.com/git/git/blob/master/contrib/credential/netrc/git-credential-netrc.perl,并没有看到 log(password)。但是现在(2021年,6年后),我会使用 GCM-core,而不是 netrc,无论是否加密:https://github.com/GitCredentialManager/git-credential-manager(最近更名为GCM:https://github.com/GitCredentialManager/git-credential-manager/pull/542) - VonC
看起来用户和密码被记录了,因为我在 git config credential.helper "netrc -d -v" 中使用了 -v。我应该省略它。 - sschuberth
谢谢确认。我有些困惑,因为你的回答说仅拥有 .netrc 文件是不够的。 - sschuberth
显示剩余6条评论

2

正如 @sschuberth 所提到的,删除协议 http:// 或 https:// 对我有用。


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接