我刚启用2FA(我想不出我做的任何其他更改),git要求我输入用户名和密码。我提供了两者,但他们“错了”。我在这里尝试了很多解决方案:Git push requires username and password但这不起作用。特别是,当从https切换到ssh时,ssh键会给出
权限被拒绝(publickey)。 致命的:无法从远程存储库读取。
$ git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:
git config --global push.default matching
To squelch this message and adopt the new behavior now, use:
git config --global push.default simple
See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)
Username for 'https://github.com': **********
Password for 'https://mlbileschi@github.com':
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/mlbileschi/scala.git/'
任何提示?
答案 0 :(得分:84)
答案 1 :(得分:25)
感谢Gergo Erdosi。他的答案基本上是正确的,只是Github更改了设置页面。截至2016年底,您需要从Personal access tokens page 生成访问令牌。
在命令行中使用此访问令牌作为您的密码。
您可以通过将用户名包含在项目远程网址中来保留用户名。其中一种方法是修改.git/config
以将url
行修改为以下格式:
url = https://YOUR_USERNAME_HERE@github.com/owner/repo.git
您只需运行一次即可保留密码:
$ git config credential.helper store
然后您的未来git密码将使用格式https://user:PlaintextPassword@example.com
以纯文本格式存储在〜/ .git-credentials中。
以明文存储密码通常会被视为安全风险。但在这种2FA情况下,凭证不是您的真实密码,而是随机生成的字符串。因此它与使用 ssh私钥一个无密码短语的ssh私钥一样安全。 CAVEAT:请记住,如果你碰巧在这台机器上也使用了另一个没有2FA的git帐户,那些真实的密码也将以明文形式存储。
PS:或者,您可以选择使用基于ssh的登录,使用受密码保护的ssh私钥,这样会更安全,更不方便,但它超出了本答案的范围。
答案 2 :(得分:13)
我有类似的问题。我不得不改变git命令中使用的url来包含我的用户名。
git push https://YOUR_USERNAME_HERE@github.com/mlbileschi/scala.git
然后,当它要求PW使用您创建的访问令牌时,请遵循Gergo Erdosi的回答中的说明。
答案 3 :(得分:6)
在Linux上,您可以使用SSH密钥验证您的GitHub身份。
打开终端。
粘贴下面的文字,替换为您的GitHub电子邮件地址。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
这会使用提供的电子邮件作为标签创建一个新的ssh密钥。
打开终端并复制生成的公钥
cat ~/.ssh/id_rsa.pub
应该输出某些内容
ssh-rsa AAAAB3NzaC1y ... mKAKw== your_email@example.com
导航至https://github.com/settings/keys并点击New SSH Key
,为其添加标题并复制粘贴公钥。
https://
更改为ssh
打开终端,cd
到您的存储库位置并输入
git remote set-url origin git@github.com:<github username>/<repository name>
答案 4 :(得分:3)
不确定这是否适用于所有人,但将我的 git version 从 2.27.0 更新到最新版本(当前为 2.30.0)已解决我的问题,而尝试在命令行中使用个人访问令牌作为密码却没有。
更新后,在尝试推送时,系统提示我通过浏览器登录 GitHub,而不是在对话框或命令行中输入我的凭据。
答案 5 :(得分:0)
这对我有用:
转到[your-git-repo] /。git / config
在[remote "origin"]
下,将URL
键从http协议更改为git。
示例
如果url
的值为https://github.com/。git将其更改为git@github.com:<repo-url>.git
答案 6 :(得分:0)
如果您已经在使用ssh密钥,则启用2FA后,它将强制您使用SSH进行远程读写。您真的不需要添加个人令牌,而只需继续使用现有的SSH密钥对即可。
只需将您的远程URL从HTTPS更改为SSH:
git remote set-url origin git@github.com:<github-username>/<repo-name>
答案 7 :(得分:0)
在Github上启用2FA后,这对我有用:
创建个人访问令牌:complete one。
注意:请记住为令牌选择正确的权限。
运行:
git clone https://github.com/username/repo.git
用户名:your_username
密码:your_token
答案 8 :(得分:0)
当我为我的一个私人仓库启用2FA(两因素身份验证)时,我在现有仓库上遇到了这个问题。 我可以在ubuntu 19.0终端上按照以下步骤解决问题:-
添加密钥后,转到终端,然后更新原始URL
git remote set-url origin git@github.com:<USERNAME>/<BRANCH-NAME>
就这样。希望对您有帮助
答案 9 :(得分:0)
切换到旧笔记本电脑时遇到了这个问题。真正的问题只是我正在运行旧版本的git。使用新的跨平台凭据管理器将我更新到最新版本的git后,便可以使用2FA完美地为我签名(看起来它会自动为您创建PAT)。