将 Git 客户端(如 GitHub for Windows)配置为不要求身份验证

Posted

技术标签:

【中文标题】将 Git 客户端(如 GitHub for Windows)配置为不要求身份验证【英文标题】:Configure Git clients, like GitHub for Windows, to not ask for authentication 【发布时间】:2012-11-27 19:51:22 【问题描述】:

我已经安装了 GitHub for Windows 和 GitExtensions,并且在我的路径中有多个版本的 git.exe。

C:\Users\Rajat\AppData\Local\GitHub\PortableGit_93e8418133eb85e81a81e5e19c272776524496c6\cmd\git.exe
C:\Users\Rajat\AppData\Local\GitHub\PortableGit_93e8418133eb85e81a81e5e19c272776524496c6\bin\git.exe
E:\cygwin\bin\git.exe
C:\Program Files (x86)\Git\cmd\git.exe
C:\Program Files (x86)\Git\bin\git.exe

现在,当我对最后三个 git.exes 中的任何一个执行 git push origin master 时,它会询问我的用户名。但是便携式 Git 不要求输入用户名。请看以下截图:

心形字符只是一个^C,所以忽略它。

在这种情况下如何处理身份验证?最终,我希望最后三个 Git 不要求授权。这怎么可能?

我在 GitHub 的 Git 中发现了两个额外的文件,但我怀疑它们是否重要:

【问题讨论】:

查看 my answer below 以了解新的 GitHub 双重身份验证对缓存您的凭据的影响。 【参考方案1】:

如果您使用的是 Windows 版 GitHub,您只需:

    确保您已至少登录一次 GUI 应用程序 点击“Git Shell”链接

GitHub 已经在命令行上为你解决了这个问题,无论是基于 HTTPS 还是基于 SSH 的遥控器

【讨论】:

【参考方案2】:

对于 GitHub for Windows 本身,Paul Betts (GitHub staff) 温和地提醒大家,G4W 已经包含一个凭证助手(基于 CryptProtect,我想@ 987654323@) 见his answer below。

对于那些不使用 G4W 的人,请继续阅读。


添加到我的previous answer(通过控制台/命令行推送到 GitHub 时):

~/.netrc(在 Unix 上)或 %HOME%/_netrc(在 Windows 上)之类的文件可以帮助您避免在每次 git 推送到 GitHub 时输入您的凭据

您可以在netrc 文件中存储任意数量的凭据。 (适用于 GitHub 或其他 repo 托管服务提供商) 但是:

您不想存储主 GitHub 密码帐户 您不希望将它们放在纯文本文件中。

以下部分解决了这些问题:


启用two-factor authentication (2FA) on your GitHub account

(2013 年 9 月 3 日)

通过应用程序配置 2FA,始终通过应用程序,从不通过短信,如果可以避免的话。

原因是,通过该激活过程,您可以访问您的双因素密钥,该密钥用于每 30 秒生成一次第二因素身份验证:

这样您就可以转到任何 GAuth (Google Authenticator) 客户端,输入相同的 2FA 密钥,然后查看您通过 SMS 获得的准确相同的代码留言。 除此之外,如果您没有电话服务,它仍然可以工作;)

当然,first client to use is GAuth 在你的安卓手机或你的 iPhone 上。

这意味着您不必等待短信,并且可以将 2FA 保存在手机上。

但是,拥有您的密钥可以让您不局限于手机上的客户端。 您可以访问任何其他客户端,例如:

JAuth,一个漂亮的两因素桌面客户端,(codeon GitHub) html5-google-authenticator:GAuth Authenticator client web page,您可以在其中看到每 30 秒生成一次的令牌,就像您在手机上或通过短信看到的一样。 desktop system tray 浏览器扩展程序(例如 gauth-authenticator for FireFox)

对于所有这些客户端(在您的手机上使用 GAuth,或者使用桌面客户​​端或网页),您将需要您的双因素密钥

如果您通过短信激活了 2FA:

您不知道自己的密钥 您不能使用任何其他 GAuth 客户端 您只能通过手机接收令牌(如果您有电话服务和/或如果您有手机)

注意:如果您在 android 上的 Gauth 客户端中添加了密钥,但没有记住第一个密钥,all is not lost。 (不过你需要一部有根手机)

$ adb shell
# sqlite3 /data/data/com.google.android.apps.authenticator/databases/databases
sqlite> select * from accounts;
1|your@email.address|your2factorkey|0|0
sqlite> .quit
#exit

不要忘记获取并保存相关的恢复代码(在Account Settings section of your GitHub account 中):

(另请参阅关于 哪里 保存这些代码的最后一节)


加密您的_netrc 文件

(见credential helper netrc with git1.8.3+:gpg加密)

您需要在该文件中至少加密这两个凭据:

machine github.com
login username
password xxxx
protocol https

machine gist.github.com
login username
password xxxx
protocol https

然后您只保留~/.netrc.gpg%HOME%/_netrc.gpg

但是,如果您启用上述新的双重身份验证,“xxxx”将不是您的 GitHub 帐户:请参阅下一节“个人访问令牌”。


生成个人访问令牌

如果您已激活 2FA,您将无法使用您的 GitHub 密码进行推送。

Anonymous access to user/repo.git denied

这是你会看到的(gpg 部分是因为我使用了netrc credential helper):

C:\Users\VonC\prog\git\git>git push origin
Using GPG to open %HOME%/_netrc.gpg: [gpg2 --decrypt %HOME%/_netrc.gpg]

You need a passphrase to unlock the secret key for
user: "auser <email@email.com>"
2048-bit RSA key, ID A2EF56, created 2012-09-12 (main key ID DC43D6)

remote: Anonymous access to VonC/git.git denied.                      <=====
fatal: Authentication failed for 'https://VonC@github.com/VonC/git/'  <=====

所以转到Developer section of your GitHub AccountPersonal access tokens 小节),并生成一个个人访问令牌

该令牌不需要双重身份验证:您可以在_netrc 文件中将其用作密码,然后您就可以推送到 GitHub。

但与您的主 GitHub 帐户密码的区别在于:您可以撤销个人访问令牌(并生成一个新的),同时仍保持您的主密码不变。

如果您在 ~/.netrc.gpg 文件中加密了您的主 GitHub 密码,您可以用新的个人令牌替换它:

gpg -d %HOME%\_netrc.gpg | sed "s/yourPassord/YourPersonalAccessToken/g" | gpg -e -r auser --yes -o %HOME%\_netrc.gpg

为了便于阅读,在多行中:

gpg -d %HOME%\_netrc.gpg | 
  sed "s/yourPassord/YourPersonalAccessToken/g" | 
  gpg -e -r auser --yes -o %HOME%\_netrc.gpg

借助类似于 unix 的 GoW (Gnu on Windows) 命令(包括 sed),即使在 Windows 上也可以使用。


保存您的 GitHub 凭据

我推荐像 lastpass.com

这样的在线凭证存储

你需要保存:

您的 GitHub 帐户密码 您的 2FA 密钥 您的 2FA 恢复代码 您的个人令牌

【讨论】:

@lunakid 你每天只保留一点时间:这是很好的培训。 (我的意思是:每个。单。一天。meta.stackexchange.com/q/122976/6309) 这个答案可能很长,但也确实不正确。没有人应该这样做。你能把它删掉吗? @PaulBetts 为什么不正确?为什么没有人应该这样做? @Juliano 在 2014 年的时候,Paul 已经与 GitHub for Windows 集成了一个密码缓存管理器。而现在(2016 年),您甚至不需要使用带有 github.com/Microsoft/Git-Credential-Manager-for-Windows(Windows 的 Git 凭据管理器)的 Git For Windows (github.com/git-for-windows/git/releases)。但我还是更喜欢我自己的方式来缓存密码;) 请注意,github 的个人访问令牌现在位于“开发者设置”而不是“应用程序”下【参考方案3】:

https://help.github.com/articles/set-up-git

密码缓存部分说:

如果您不想使用 GitHub for Windows,可以下载 此处为您的操作系统提供帮助:

这样做,任何其他 git.exe 都可以在不询问密码的情况下运行。 :)

【讨论】:

这才是正确答案,大家都说“使用_netrc”太落伍了。

以上是关于将 Git 客户端(如 GitHub for Windows)配置为不要求身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Windows下Git客户端和Github设置

git 报错 error: insufficient permission for adding an object to repository database ./objects

git for windows+TortoiseGit客户端的使用二

如何用Git将代码上传到GitHub

如何用Git将代码上传到GitHub

如何用Git将代码上传到GitHub