2FA 推送到 GitHub 时出现问题

Posted

技术标签:

【中文标题】2FA 推送到 GitHub 时出现问题【英文标题】:2FA give problems when pushing to GitHub 【发布时间】:2017-04-18 10:39:03 【问题描述】:

我在 GitHub 上的 Raspberry Pi 上克隆了一个项目,创建了一个新分支并将所有内容推送到存储库。为此,我需要下一个命令:

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 results in "Authentication Failed" 【参考方案1】:

使用 2FA,您必须创建一个个人访问令牌,以在使用 HTTPS URL 的命令行上对 GitHub 进行身份验证时用作密码:https://help.github.com/articles/which-remote-url-should-i-use/#when-2fa-is-enabled

或者您可以使用 ssh https://help.github.com/articles/which-remote-url-should-i-use/#cloning-with-ssh-urls 进行克隆(也可能有用:https://help.github.com/articles/generating-an-ssh-key/)

【讨论】:

不错的答案,这解决了我的问题:启用 2FA 后我无法 git push,但如何使其无密码?我不想每次 git push 时都被提示输入我的用户名和密码(个人访问令牌)。提前致谢! 通过 ssh 使用克隆【参考方案2】:

您必须生成访问令牌并使用访问令牌而不是密码。 例如:

$ git clone https://github.com/username/repo.git
Username: your_username
Password: your_token

文档:https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line

【讨论】:

【参考方案3】:

如果您已通过 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>

这会将您的令牌密钥放在您机器上的纯文本文件中,这很糟糕,但如果您需要快速破解以使事情顺利进行,它可以工作。

干杯!

【讨论】:

用您的话来说,感谢您的“快速破解”。现在唯一为我工作的人。【参考方案4】:

使用 2FA,您需要在推送代码时生成个人访问令牌。在将代码推送到 Github 时,该个人令牌将用作密码。您可以看到如何从https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line 创建个人访问令牌。当您使用 http url 克隆 repo 时将使用它。 它将适用于所有存储库。

如果您已通过 SSH 克隆,那么在启用 2F 身份验证后,您可以非常轻松地推送您的更改,而不会改变正常行为。为此,您使用 SSH 密钥密码作为密码。 首先,它要求您针对您的存储库创建 SSH 密钥。您可以从https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent 生成 SSH 密钥 它将仅适用于已生成此 SSH 密钥的特定存储库的单个存储库。

【讨论】:

【参考方案5】:

在您的 GitHub 帐户上添加 2FA 后,您可以使用 repo 的 HTTPS URL 或 SSH URL 从本地服务器进行推送、拉取、克隆或获取操作。不同之处在于:

使用 HTTPS URL 时:现在,对于推送、拉取、获取或克隆操作,您必须从您的 GitHub 帐户生成一个个人访问令牌,这将是每当您被要求输入密码时用作密码。你必须保证令牌的安全。

访问:Creating a personal access token for the command line

使用 SSH URL 时:要通过 repo 的 SSH URL 推送、拉取、获取或克隆,您需要为您的帐户设置私钥和公钥对。这将花费一些时间,但是一旦您完成了私钥和公钥的设置,您将永远不会被提示输入用户名或密码,因为现在 GitHub 知道您的身份。

要创建私钥和公钥对,请阅读:Connecting to GitHub with SSH

使用 HTTPS URL 和 SSH URL 的区别

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

对于 SSH,您可以为您的私钥生成密码,How do I add a password to an OpenSSH private key that was generated without a password?

现在您的私钥将受到保护,但无论您何时推送、拉取、克隆或获取,每次都会询问密码。为避免这种情况,您可以使用 SSH 代理,SSH Key - Still asking for password and passphrase

【讨论】:

以上是关于2FA 推送到 GitHub 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

推送到 heroku 时出现“预编译资产失败”错误

Gerrit- 推送到 gerrit 时出现 Git 推送错误(不适用(解包程序错误))

推送到 Elastic Beanstalk 时出现 Rails 捆绑错误

将 Rails 应用程序推送到 Heroku 时出现啥错误

使用 Eclipse DDMS 将大文件推送到模拟器/SD 卡时出现问题

推送更改时出现Github远程错误问题[重复]