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 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
Gerrit- 推送到 gerrit 时出现 Git 推送错误(不适用(解包程序错误))
推送到 Elastic Beanstalk 时出现 Rails 捆绑错误