Git push无法工作,出现错误“您必须使用个人访问令牌或SSH密钥”。

24

Git出现错误

"C:\Program Files (x86)\Git\bin\git.exe" push -u --recurse-submodules=check - 
-progress "origin" refs/heads/dev_civaplugin:refs/heads/dev_civaplugin
remote: Password authentication is not available for Git operations.
remote: You must use a personal access token or SSH key.
remote: See https://github.build.ge.com/settings/tokens or 
https://github.build.ge.com/settings/ssh
fatal: unable to access 
'https://github.build.ge.com/108012572/NextGenUT.git/': The requested URL 
returned error: 403
Done

 Press Enter or Esc to close console...

我使用git扩展成功地克隆了远程存储库,并能够创建新分支,但在尝试推送更改时出现上述错误。

我使用工具>putty>生成或导入密钥创建了公钥和私钥,我的电脑用户中没有.SSH文件夹。在GitHub上,我还创建了个人访问令牌,方法是Settings>Developer settings>Personal access tokens。对问题不是很清楚,任何输入都是很好的帮助。

2个回答

45

如果您使用单点登录,请从步骤#1开始,否则直接转到第6步

  1. 在本地计算机上生成SSH密钥(创建密钥时输入密码)
ssh-keygen -t rsa
  1. 复制以 ssh-rsa 开头的公钥
  2. 进入 Github > 设置 > SSH 和 GPG 密钥
  3. 点击 New SSH key 并粘贴之前复制的私钥,然后创建它

enter image description here

  1. 现在,启用 SSO 并授权您的组织

enter image description here

  1. 确保新创建的 SSH 私钥已添加到 SSH 认证代理中
ssh-add <your-private-key>
(e.g., ssh-add id_rsa)

注意:默认情况下,它只会有您的id_rsa主密钥;因此,您需要在其中添加您的自定义私钥。


4
第二步更正:复制以ssh-rsa开头的公钥(而不是私钥)。公钥文件应该以.pub结尾;私钥文件应该没有.pub文件结尾,并且其内容应该清晰地显示-----BEGIN OPENSSH PRIVATE KEY-----。绝对不要将你的私钥交给第三方,例如Github。-- 此外,由于你只需要粘贴你的公钥,只要你的私钥没有被泄露,你就不必模糊公钥的摘要信息。 - George Pantazes
2
我已经按照这个教程成功地将我的私钥添加到GitHub中。但是当使用以下命令时:git push https://<GITHUB_ACCESS_TOKEN>@github.com/<GITHUB_USERNAME>/<REPOSITORY_NAME>.git我的密码仍然被要求,并提示输入令牌标识。remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.有人遇到过同样的问题吗? - Drosera_capensis

14

查看您的git remote show origin - 您拥有远程origin的URL,如https://github.build.ge.com/108012572/NextGenUT.git/。HTTP(S)协议肯定不使用SSH密钥,对于SSH密钥,您必须更改URL以使用ssh://协议。或者您必须在HTTP(S)URL中传递您的Github名称。 所以,要么

git remote set-url origin https://user@github.build.ge.com/108012572/NextGenUT.git

使用Github令牌或

git remote set-url origin ssh://user@github.build.ge.com/108012572/NextGenUT.git

使用SSH密钥。


1
HTTP(S)协议肯定不使用SSH密钥。谢谢,这就是我缺失的部分。 - wip
1
对我来说,唯一有效的语法是(使用您的示例):git remote set-url origin git@github.build.ge.com:108012572/NextGenUT.git - Chaarmann
@Chaarmann git remote set-url origin ssh://git@github.build.ge.com/108012572/NextGenUT.git 也应该可以工作。 - phd
是的,对我来说也只有去掉“ssh://”部分才有效。不确定为什么。 - Amila Fonseka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接