将 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.exe
s 中的任何一个执行 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 托管服务提供商)
但是:
以下部分解决了这些问题:
启用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 Account(Personal 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)配置为不要求身份验证的主要内容,如果未能解决你的问题,请参考以下文章
git 报错 error: insufficient permission for adding an object to repository database ./objects