当前位置: 首页 > 知识库问答 >
问题:

配置Git客户端(如GitHub for Windows)以不请求身份验证

钮才哲
2023-03-14

我已经安装了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中的任何一个Git推送origin Master时,它会询问我的用户名。但可移植的Git并不要求用户名。请看下面的截图:

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

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

共有1个答案

越季萌
2023-03-14

对于GitHub For Windows本身,Paul Betts(GitHub工作人员)委婉地提醒大家,G4W已经包含了一个凭据帮助器(基于CryptProtect,我假设是CryptProtectData函数)
参见他的答案如下。

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

要补充我前面的回答(通过控制台/命令行推送到GitHub时):

您可以在netrc文件中存储所需的任意多个凭据。
(对于GitHub或其他回购托管提供程序
但是:

  • 您不想存储您的主GitHub密码帐户
  • 您不希望这些文件在纯文本文件中。

以下各节讨论这些问题:

这样,您就可以转到任何GAuth(Google Authenticator)客户端,输入相同2FA密钥,就可以看到通过SMS消息获得的完全相同的代码。
不过,如果您没有电话服务,它仍然有效;)

当然,首先使用的客户端是你的android手机或iPhone上的GAuth。

这意味着你不需要等待短信,你把你的2FA留在你的手机上。

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

  • Jauth,一个漂亮的双因素桌面客户端(codeon GitHub)
  • HTML5-Google-Authenticator:GAuth Authenticator客户端网页,您可以在其中看到每30秒生成一次令牌,就像您在手机上或通过SMS看到它们一样。
  • 桌面系统托盘
  • 浏览器扩展(如FireFox的gauth-authenticator)

对于所有这些客户机(在您的电话上与GAuth,或与桌面客户机或网页),您将需要您的双因素秘密密钥。

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

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

注意:如果你在Android上的Gauth客户端中添加了一个密钥,而没有记住第一个密钥,那么就不会丢失。
(但是你需要一个根手机)

$ 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

(另请参阅关于将这些代码保存在何处的最后一节)

(请参阅带有GIT1.8.3+:gpg加密的凭据帮助程序netrc)

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

machine github.com
login username
password xxxx
protocol https

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

对user/repo.git的匿名访问被拒绝

以下是您将看到的内容(gpg部分是因为我使用了netrc凭据帮助程序):

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/'  <=====

因此,转到GitHub帐户的developer部分(Personal access tokens小节),并生成一个Personal access tokens:

但与主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

您需要保存:

  • 您的GitHub帐户密码
  • 您的2fa密钥
  • 您的2FA恢复代码
  • 您的个人令牌
 类似资料:
  • 我正在尝试调整Spring Security SAML示例应用程序,以使用测试IDP(由其他人提供给我)而不是SSOCELL。单击“SAML登录”可以正确地将我重定向到IDP的SSO登录页面,但在登录并重定向回示例应用程序后,我会得到一个异常(显然是在工件解析期间),其根源是: 挖了一会儿后,我意识到服务器需要相关端口的客户端身份验证。如果我这样连接到它,我会得到一个有效的响应: 此外,如果我通过

  • 授权服务器为进行客户端身份验证的目的,为Web应用客户端创建客户端凭据。授权服务器被鼓励考虑比客户端密码更强的客户端身份验证手段。Web应用程序客户端必须确保客户端密码和其他客户端凭据的机密性。 授权不得向本地应用程序或基于用户代理的应用客户端颁发客户端密码或其他客户端凭据用于客户端验证目的。授权服务器可以颁发客户端密码或其他凭据给专门的设备上特定安装的本地应用程序客户端。 当客户端身份验证不可用

  • 在向令牌端点发起请求时,机密客户端或其他被颁发客户端凭据的客户端必须如2.3节所述与授权服务器进行身份验证。客户端身份验证用于: 实施刷新令牌和授权码到它们被颁发给的客户端的绑定。当授权码在不安全通道上向重定向端点传输时,或者 当重定向URI没有被完全注册时,客户端身份验证是关键的。 通过禁用客户端或者改变其凭据从被入侵的客户端恢复,从而防止攻击者滥用被盗的刷新令牌。改变单套客户端凭据显然快于撤销

  • 如果客户端类型是机密的,客户端和授权服务器建立适合于授权服务器的安全性要求的客户端身份验证方法。授权服务器可以接受符合其安全要求的任何形式的客户端身份验证。 机密客户端通常颁发(或建立)一组客户端凭据用于与授权服务器进行身份验证(例如,密码、公/私钥对)。授权服务器可以与公共客户端建立客户端身份验证方法。然而,授权服务器不能依靠公共客户端身份验证达到识别客户端的目的。 客户端在每次请求中不能使用一

  • 有时需要对某些网络资源(如Servlet、JSP等)进行访问权限验证,也就是说,有访问权限的用户才能访问该网络资源。进行访问权限验证的方法很多,但通过HTTP响应消息头的WWW-Authenticate字段进行访问权限的验证应该是众多权限验证方法中比较简单的一个。 通过HTTP响应消息头的WWW-Authenticate字段可以使浏览器出现一个验证对话框,访问者需要在这个对话框中输入用户名和密码,

  • 我不熟悉SSL和证书。我一直在做关于客户端证书认证的研究。我看过这个和wiki。 因此,如果我必须为我的B2B REST服务实现客户端证书身份验证解决方案,我应该执行以下操作 要求客户端生成自己的私钥,并为其公钥生成证书(CA 颁发?)。通过电子邮件或 USB 闪存盘发送该证书。 在服务器端将客户端的公共证书导入信任存储区并启用客户端身份验证 在握手期间,客户端会出示其证书并进行身份验证,因为服务