【问题标题】:2FA give problems when pushing to GitHub2FA 推送到 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 github git-push two-factor-authentication


【解决方案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

      【讨论】:

        猜你喜欢
        • 2016-04-26
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 2021-06-11
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        • 2012-10-29
        相关资源
        最近更新 更多