2FA在推送到GitHub时出现问题

30

我在我的树莓派上克隆了一个GitHub项目,创建了一个新分支并将所有内容推送到仓库。为此,我需要执行以下命令:

git clone https://www.github.com/heinpauwelyn/my_repo
git checkout -b raspberry
git push origin raspberry

我遇到的问题是无法将分支推送到GitHub.com。 我需要输入用户名和密码,但我不能使用2FA进行身份验证。 这是Git或GitHub中的错误吗?是否有一种方法可以获得身份验证密钥并输入它?

我不会在GitHub上启用2FA。


这个回答解决了你的问题吗?Git push结果显示“Authentication Failed” - bobobobo
5个回答

37

好的答案,解决了我的问题:我在启用2FA后无法git push,但如何让它免密码?我不想每次git push时都被提示输入用户名和密码(个人访问令牌)。提前感谢! - Fisher Coder
4
使用SSH克隆代码库,可以采用以下命令:git clone [用户名]@[主机名]:[路径]。其中,用户名是远程主机的用户名,主机名是远程主机的IP地址或域名,路径是需要克隆的代码库在远程主机上的路径。例如,如果要克隆名为"myproject"的代码库,其位于远程主机example.com上的/home/user/myproject路径下,并且远程主机的用户名为"john",则可以使用以下命令:git clone john@example.com:/home/user/myproject。 - pedrorijo91

12

8
如果您已经通过https克隆并希望继续使用它,出于任何原因,您可以编辑.git/config以包含根据https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line生成的个人访问令牌。
一个示例.git/config条目:
[remote "<YOUR-REMOTE-NAME>"]
    url = https://<YOUR-USERNAME>:<YOUR-TOKEN>@github.com/<etc your repo url>

这是将你的令牌密钥放入计算机上的纯文本文件中,这很糟糕,但如果你需要一个快速的解决方法来使事情正常运行,它可以工作。
祝福!

1
在你的术语中,感谢这个“快速hack”。现在这是唯一对我有用的。 - JCarlosR

5
使用2FA时,您需要在推送代码时生成个人访问令牌。这个个人令牌将在推送代码到Github时用作密码。您可以从https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line了解如何创建个人访问令牌。当您使用http url克隆存储库时,它将被使用。它将适用于所有存储库。 如果您通过SSH克隆了存储库,则可以在启用2F身份验证后很容易地推送更改,而不需要进行任何更改以保持正常行为。对于这个问题,您可以使用SSH密钥密码作为密码。
首先需要您根据存储库创建SSH密钥。您可以从https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent生成SSH密钥。 它仅适用于单个存储库,即仅适用于生成此SSH密钥的特定存储库。

0

在将2FA添加到您的GitHub帐户后,您可以使用存储库的HTTPS URL或SSH URL进行推送、拉取、克隆或提取操作。它们之间的区别如下:

使用HTTPS URL:现在,对于推送、拉取、提取或克隆操作,您必须从GitHub帐户生成个人访问令牌,并在需要密码时将其用作密码。您必须保护好这个令牌。

请访问:为命令行创建个人访问令牌

使用SSH URL:通过存储库的SSH URL进行推送、拉取、提取或克隆操作,您需要为您的帐户设置私钥和公钥对。这需要一些时间,但是一旦您完成了私钥和公钥的设置,您将不再提示输入用户名或密码,因为现在GitHub知道您的身份。

有关创建私钥和公钥对的详细信息,请阅读:使用SSH连接到GitHub

使用HTTPS URL和SSH URL的区别

虽然HTTPS不会被任何防火墙或网络阻止,但有时可能会阻止SSH,您可能无法使用它,但这种情况很少发生。在使用HTTPS时,正如所说,您经常会被要求输入用户名和密码(即您的个人访问令牌),您可以使用credential.helper缓存它,但它将保存为纯文本。

而对于SSH,您可以为私钥生成一个密码,如何为未设置密码的OpenSSH私钥添加密码?

现在您的私钥将得到保护,但每次推送、拉取、克隆或提取时都会要求输入密码。为了避免这种情况,您可以使用SSH代理,SSH密钥-仍然要求密码和口令


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