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

2FA give problems when pushing to GitHub

我已经在 Raspberry Pi 上的 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。

使用 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 (may also be useful: https://help.github.com/articles/generating-an-ssh-key/)

使用 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 密钥的特定报告仅在单个存储库中工作。

您必须生成访问令牌并使用访问令牌代替密码。 例如:

$ 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

在 [=41] 上添加 2FA 后,您可以使用 repo 的 HTTPS URL 或 SSH URL 从本地服务器推送、拉取、克隆或获取操作=] 帐户。差异将是:

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

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

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

要创建私钥和 public 密钥对,请阅读: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

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

这会将您的令牌密钥放入您计算机上的纯文本文件中,这很糟糕,但如果您需要快速破解才能让事情顺利进行,它会起作用。

干杯!