ChatGPT解决这个技术问题 Extra ChatGPT

推送到 Git 返回错误代码 403 致命:HTTP 请求失败

我能够通过 HTTPS 身份验证克隆此 repo 的副本。我做了一些提交,并希望将其推送回 GitHub 服务器。在 Windows 7 x64 上使用 Cygwin。

C:\cygwin\home\XPherior\Code\lunch_call>git push
Password:
error: The requested URL returned error: 403 while accessing https://MichaelDrog
alis@github.com/derekerdmann/lunch_call.git/info/refs

fatal: HTTP request failed

还使用详细模式设置它。我还是很困惑。

C:\cygwin\home\XPherior\Code\lunch_call>set GIT_CURL_VERBOSE=1

C:\cygwin\home\XPherior\Code\lunch_call>git push
Password:
* Couldn't find host github.com in the _netrc file; using defaults
* About to connect() to github.com port 443 (#0)
*   Trying 207.97.227.239... * 0x23cb740 is at send pipe head!
* Connected to github.com (207.97.227.239) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: C:\Program Files (x86)\Git/bin/curl-ca-bundle.crt
  CApath: none
* SSL connection using AES256-SHA
* Server certificate:
*        subject: 2.5.4.15=Private Organization; 1.3.6.1.4.1.311.60.2.1.3=US; 1.
3.6.1.4.1.311.60.2.1.2=California; serialNumber=C3268102; C=US; ST=California; L
=San Francisco; O=GitHub, Inc.; CN=github.com
*        start date: 2011-05-27 00:00:00 GMT
*        expire date: 2013-07-29 12:00:00 GMT
*        subjectAltName: github.com matched
*        issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert High Ass
urance EV CA-1
*        SSL certificate verify ok.
> GET /derekerdmann/lunch_call.git/info/refs?service=git-receive-pack HTTP/1.1
User-Agent: git/1.7.4.3282.g844cb
Host: github.com
Accept: */*
Pragma: no-cache

< HTTP/1.1 401 Authorization Required
< Server: nginx/1.0.4
< Date: Thu, 15 Sep 2011 22:44:41 GMT
< Content-Type: text/plain
< Connection: keep-alive
< Content-Length: 55
< WWW-Authenticate: Basic realm="GitHub"
<
* Ignoring the response-body
* Expire cleared
* Connection #0 to host github.com left intact
* Issue another request to this URL: 'https://MichaelDrogalis@github.com/dereker
dmann/lunch_call.git/info/refs?service=git-receive-pack'
* Couldn't find host github.com in the _netrc file; using defaults
* Re-using existing connection! (#0) with host github.com
* Connected to github.com (207.97.227.239) port 443 (#0)
* 0x23cb740 is at send pipe head!
* Server auth using Basic with user 'MichaelDrogalis'
> GET /derekerdmann/lunch_call.git/info/refs?service=git-receive-pack HTTP/1.1
Authorization: Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
User-Agent: git/1.7.4.3282.g844cb
Host: github.com
Accept: */*
Pragma: no-cache

< HTTP/1.1 401 Authorization Required
< Server: nginx/1.0.4
< Date: Thu, 15 Sep 2011 22:44:41 GMT
< Content-Type: text/plain
< Connection: keep-alive
< Content-Length: 55
* Authentication problem. Ignoring this.
< WWW-Authenticate: Basic realm="GitHub"
* The requested URL returned error: 401
* Closing connection #0
* Couldn't find host github.com in the _netrc file; using defaults
* About to connect() to github.com port 443 (#0)
*   Trying 207.97.227.239... * 0x23cb740 is at send pipe head!
* Connected to github.com (207.97.227.239) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: C:\Program Files (x86)\Git/bin/curl-ca-bundle.crt
  CApath: none
* SSL re-using session ID
* SSL connection using AES256-SHA
* old SSL session ID is stale, removing
* Server certificate:
*        subject: 2.5.4.15=Private Organization; 1.3.6.1.4.1.311.60.2.1.3=US; 1.
3.6.1.4.1.311.60.2.1.2=California; serialNumber=C3268102; C=US; ST=California; L
=San Francisco; O=GitHub, Inc.; CN=github.com
*        start date: 2011-05-27 00:00:00 GMT
*        expire date: 2013-07-29 12:00:00 GMT
*        subjectAltName: github.com matched
*        issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert High Ass
urance EV CA-1
*        SSL certificate verify ok.
* Server auth using Basic with user 'MichaelDrogalis'
> GET /derekerdmann/lunch_call.git/info/refs HTTP/1.1
Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
User-Agent: git/1.7.4.3282.g844cb
Host: github.com
Accept: */*
Pragma: no-cache

* The requested URL returned error: 403
* Expire cleared
* Closing connection #0
error: The requested URL returned error: 403 while accessing https://MichaelDrog
alis@github.com/derekerdmann/lunch_call.git/info/refs

fatal: HTTP request failed

这些是我拥有的 git 和 curl 版本:

C:\Users\XPherior>git --version
git version 1.7.4.msysgit.0

C:\Users\XPherior>curl --version
curl 7.21.7 (amd64-pc-win32) libcurl/7.21.7 OpenSSL/0.9.8r zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtsp
smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate Largefile NTLM SSL SSPI libz
查看评论,该评论应作为答案发布。使它与 1.7.1 一起工作,也有缺少用户/密码提示的问题。 stackoverflow.com/a/9575906/805284 的道具 ...
检查用户是否具有对存储库的读/写访问权限
将来,在显示示例 http 标头时不要粘贴“授权:基本 ”。很容易对它进行base64解码并获取您的密码。 @mike:如果您在发布此问题后尚未更改您的 github 密码,我建议您这样做。
@FlipMcF 谢谢伙计。浑然不觉。密码已更改。
@迈克NP。现在我可以厚颜无耻地宣传我在上面写的一个小博客:goo.gl/bpae94

z
zeFree

我刚刚遇到了同样的问题,只是弄清楚是什么原因。

Github 似乎只支持 ssh 方式来读写 repo,虽然 https 方式也显示“Read&Write”。

因此,您需要将 PC 上的 repo 配置更改为 ssh 方式:

在你的 repo 目录下编辑 .git/config 文件。在 [remote "origin"] 部分下找到 url=entry。把它从:url=https://MichaelDrogalis@github.com/derekerdmann/lunch_call.git 改成:url=ssh://git@github.com/derekerdmann/lunch_call.git 也就是把@符号前面的所有文字都改到 ssh://git 保存配置文件并退出。现在你可以使用 git push origin master 在 GitHub 上同步你的 repo。


当您使用 git 只读地址(未登录时的默认值)而不是 read+write ssh 地址进行克隆时,经常会遇到这种情况。
我的 .git/config 更像 url=https://github.com/mynickname/my_repo.git 但我也像 url=ssh://git@github.com/mynickname/my_repo.git 一样改变了它,它成功了
您可以使用 git remote set-url 命令更改 repo url。请看下面我的回答。
或者简单地使用 git remote set-url <name> git@github.com:<username>/<repo>.git 从命令行更改它
对于那些寻找非 ssh 解决方案的人,请在此处查看其他一些答案。将您的用户名添加到 https url 似乎有效。 (更改配置 url 使 https://@github.com/... 为 UNAME@github.com/...
T
Thiago Macedo

为了绝对能够使用 https 协议登录,您应该首先将您的身份验证凭据设置为 git Remote URI

git remote set-url origin https://yourusername@github.com/user/repo.git

然后,当您尝试 git push 时,系统会要求您输入密码。

其实这是关于http认证格式的。您也可以设置密码:

https://youruser:password@github.com/user/repo.git

您应该知道,如果您这样做,您的 github 密码将以明文形式存储在您的 .git 目录中,这显然是不可取的。


SSH 在工作中被阻止,所以我必须使用 HTTPS。添加用户名解决了我的问题。
这应该是公认的答案。当有命令行界面时,没有理由手动编辑配置文件。
另外,对我来说,这种方式(username@github...)要求输入密码并工作,而 ssh://git@github... 未能期待公钥认证。
@Achint 这是一种身份验证格式。尽管not secure,您也可以设置密码https://youruser:password@github.com/user/repo.git
如果您遇到此问题,请注意,如果用户名或密码中有特殊字符,则需要对其进行 URL 编码。例如,@ 需要为 %40。
C
Community

Sean's answer 的一个小补充。

您可以使用 git remote set-url 命令,而不是手动编辑 .git/config 文件。

在您的情况下,它应该是:

git remote set-url origin ssh://git@github.com/derekerdmann/lunch_call.git

我发现它比处理点文件更容易、更干净。

help.github.com:更改远程的 URL


我不知道这是否只是一篇旧帖子并且 git 已更改,但今天要解决问题,我必须在 github.com 和 repo 名称之间使用冒号 git remote set-url origin ssh://git@github.com:derekerdmann/lunch_call.git
G
Gal Bracha

编辑您的 repo 目录下的 .git/config 文件

[remote "origin"] 部分下找到 url= 条目

将其从 url=https://github.com/rootux/my-repo.git 更改为 https://USERNAME@github.com/rootux/my-repo.git

其中 USERNAME 是您的 github 用户名


这个答案不适用于我的问题。我在 .git/config 中的 URL 设置为`github.com/myrepo/subproject'
Android Studio 有这个问题。工作正常。
我的直觉是,这更像是正确的答案,因为其他解决方案要么切换到 SSH 协议,要么以明文形式存储密码。
B
BMB

建议切换到 SSH 的其他答案有点忽略了这一点。支持 HTTPS,但您必须使用 GITHUB 密码登录,而不是您的 SSH 密码(这是给我同样的错误的原因)。

我遇到了同样的问题,但确保在终端密码提示符下使用我的实际 GitHub 密码修复了解决方案,而无需更改配置或诉诸 SSH。

重要的是要注意这一点,因为许多公共机构(例如我的学校)会阻止 SSH,但允许 HTTPS(这是我首先开始通过 HTTPS 进行克隆的唯一原因)。

希望对遇到同样问题的人有所帮助...


但为什么?过去我不必这样做。证书过期了还是什么?
不确定,我不是专家,这就是我如何让它在我的情况下工作:)
相同的@Thufir。我不知道为什么这突然起作用了。
我在浏览器上使用我的用户名和密码登录就好了。但是当我尝试git push时,系统提示我输入 au 和 p,结果是权限被拒绝......你知道我错过了什么吗?
A
Andrew Gans

如果您使用的是 Windows,有时可能会发生这种情况,因为 Windows 将外部 repo(在我们的例子中为 github)的凭据存储在自己的存储中。保存在那里的凭据可能与您现在需要的不同。

https://i.stack.imgur.com/XzOUh.png

所以为了避免这个问题,只需在这个存储中找到 github 并删除保存的凭据即可。在此之后,在推送时 git 将请求您的凭据并允许您推送。


“您可能需要检查 Windows 凭据管理器并删除 control panel > user accounts > credential manager > Windows credentials > Generic credentials 下的 github 条目”此帖子中的详细信息:stackoverflow.com/a/37450495
L
Laurel

Mac OS X 上的错误和解决方法相同。

一切正常,直到我在 GitHub 上创建了一个新帐户并尝试推送

$ git push -u origin master

并得到错误:

remote:对 NEWUSER/NEWREPO.git 的权限拒绝 OLDUSER。致命:无法访问“https://github.com/NEWUSER/NEWREPO.git/”:请求的 URL 返回错误:403

它应该通过为全局或当前 repo 设置 user.name 来修复

$ git config –-global user.name NEWUSER
$ git config user.name NEWUSER

但它没有。

我通过从密码部分下的钥匙串访问应用程序中删除与 GitHub 关联的 OLDUSER 来修复它。然后推送命令成功。

$ git push -u origin master

reference


从钥匙串访问应用程序中删除 OLDUSER 对我有用
我遇到了同样的错误,但出于不同但相关的原因,需要不同的解决方案。我试图推送到我没有写入权限的仓库(我不是合作者)。这更多是因为我不知道如何为不属于我的回购做出贡献。我以为我可以创建一个新分支,然后执行拉取请求。不是这样。我必须先分叉存储库,在分叉上进行更改,然后从我的分叉存储库向原始存储库发出拉取请求。对我来说可能是一个愚蠢的错误,但如果我能做到,那么我相信其他 n00b 也能做到。 :)
J
Jeff Hammond

这对我有用-:

git remote set-url origin https://username@github.com/user/repo.git

希望能帮助到你


不错的工作。设置用户!
此解决方案有助于 CentOS 6.10 x86 中的 git v1.7。我期待密码提示出现(而不是 SSH 密钥),它确实出现了(通过在远程 URL 中的 github.com 之前添加 <username>@)。谢谢!
n
nisah

我认为@deepwaters 得到了旧版本的正确答案。 HTTPS URL 需要有用户名。我有 git 1.7.0.4 并且 git push origin master 在我添加之前甚至不会要求输入密码。


g
gsf

升级你的 git。 GitHub 在 https://help.github.com/articles/error-the-requested-url-returned-error-403 回答了这个问题。


这肯定是答案的一半。另一半是我们这里所拥有的。
N
Nick Veys

403 代码是“禁止”。服务器看到您的请求并拒绝了它。您是否有权推送到该存储库?


我和一个朋友也有同样的问题。回购是我的,他不能推。我们如何解决这个问题?
如何获得许可
将您的朋友添加到 repo 的访问列表中。 help.github.jp/enterprise/2.11/user/articles/…
M
Mike

弄清楚了。我通过 HTTPS 克隆。设置我的公共 SSH 密钥、通过 SSH 克隆并通过 SSH 推送修复了它。


嗯......但是当你不能使用除了 https 之外的任何东西时,例如,因为公司防火墙?......根据 github 博客,https 访问被添加到 github 只是为了这个目的?
我真的不知道。我现在总是通过 SSH 克隆。
只是为了后代(我注意到时间戳),关于 filofel 的评论:查看我上面列出的答案。在我的学校,我有你提到的同样的限制,发现我向终端提示提供了错误的密码/密码。希望它可以帮助任何其他有同样问题的人。
L
Leos Literak

我遇到了同样的错误,原因很愚蠢——我没有提交到选定存储库的权限。我不知道我必须

fork 选定的项目首先克隆存储库在本地提交我的更改在本地推送更改到我的 github 克隆请求 pull 请求到上游

https://help.github.com/categories/63/articles中所述


不傻,这是大多数首次向公共存储库贡献者的正确答案。
非常感谢。是公共存储库的首次贡献者。这是我的问题
A
Akah

实际上,我对此有一个非常简单的解决方法。我所做的只是在克隆存储库后以不同的方式编辑 git 配置文件。远程来源 url 是您需要在默认配置文件中编辑的内容。它应该如下所示

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = https://*username*@github.com/*username*/*repository*.git
[branch "master"]
    remote = origin
    merge = refs/heads/master

^ 这个(或下面的任何一种变体)
在 github.com 之前添加用户名为我修复了它。
欢迎您@ÅdəəlÅhmåd。通过支持答案来支持这项工作,以便许多其他人可以欣赏。
p
prashantitis

这样做是为了临时修复

git push -u https://username:password@github.com/username/repo_name.git master


T
Teepeemm

单击您的存储库 在右侧,单击“设置” 在左侧选项面板上,单击“协作者” 在 GitHub 中添加您知道的人名 单击“添加协作者”

在此之后,我们的“推送到 Git”工作正常。


J
Juan Sosa

改变它

url=https://MichaelDrogalis@github.com/derekerdmann/lunch_call.git 

url=ssh://git@github.com/derekerdmann/lunch_call.git

有用!

不要忘记“@”之前的“git”。


它对我有用(在代理后面使用带有 RStudio 的 CentOS 服务器)。先设置代理:git config --global http.proxy http://proxyUsername:proxyPassword@proxy.server.com:port然后使用命令git remote set-url origin切换地址。
n
neves

这里有很多答案,但这就是解决我的问题的原因。

自 2020 年 7 月起,如果您使用 HTTPS,则必须使用 Token authentication to access GitHub

因此,您必须在您的个人资料设置页面中generate an access token并将其用作您的密码。

现在使用以下命令将您的用户名添加到 repo:

git remote set-url origin https://yourusername@github.com/user/repo.git

当您尝试推送时,它会询问您的密码。输入您新生成的令牌。

如果您仍然无法推送,请尝试将其作为个人 repo 以调试任何身份验证问题。


C
Community

对于那些在使用 ssh(根据 Xiao)或 http url 时出现权限被拒绝 403 错误的人,请尝试以下命令

>git config --global --unset-all credential.helper

>git config --unset-all credential.helper

具有管理员权限

>git config --system --unset-all credential.helper

现在每次 Git 都会询问登录名和密码。通过 git config --global credential.helper store 保存它们。
C
CKM

以上答案均不适用于我的 enterprise GitHub 帐户。按照以下步骤通过 ssh 密钥生成方式推送。

通过访问您的 git 帐户创建一个 repo。

生成 ssh 密钥:

ssh-keygen -t rsa -C "your_email@example.com"

将文件 ~/.ssh/id_rsa.pub 的内容复制到 GitHub 帐户设置中的 SSH 密钥。测试 SSH 密钥:

ssh -T git@github.com
clone the repo:
git clone git://github.com/username/your-repository

现在 cd 到您的 git clone 文件夹并执行以下操作:

git remote set-url origin git@github.com:username/your-repository.git

现在尝试编辑文件(尝试 README),然后执行以下操作:

git add -A
git commit -am "my update msg"
git push -u origin master

更新:新的 git 版本似乎建议在创建新仓库时不要有任何文件。因此制作一个空白回购。


这个答案对我有帮助,但您必须确保您的密钥具有默认名称,如 id_rsaid_rsa.pub,否则,您将继续收到错误 Permission denied (publickey,keyboard-interactive). fatal: The remote end hung up unexpectedly。因此,要么将您的密钥重命名为默认名称,要么使用 this answer 阐明如何设置 ssh 密钥的自定义路径。
K
Kapil Soni

下面是解决方案

对于 Windows,您可以在此处找到密钥:

控制面板 > 用户帐户 > 凭据管理器 > Windows 凭据 > 通用凭据

接下来,删除 Github 密钥。

在 mac

1-在 Finder 中,搜索 Keychain Access 应用程序。

2在钥匙串访问中,搜索 github.com。

3-找到 github.com 的“互联网密码”条目。

4-相应地编辑或删除条目。


s
sailfish009

如果你在 github 上遇到 403 错误,

创建令牌时确保选中所有复选框:

https://github.com/settings/tokens

我认为 github 令牌生成页面存在设计缺陷。


A
Andrew Lygin

什么对我有用:

我的回购是一个叉子,仍然与父母回购相关联。

git remote -v

会告诉你它是否是你的回购。

git remote set-url origin https://github.com/USERNAME/OTHERREPOSITORY.git

允许您将其重新配置到您的存储库,然后允许您推送。


p
patcon

对于任何好奇的人,我的 mac 机器与 lucid vm 运行 git 1.7.6 与 1.7.0.4,完全相同的 repo 可以从我的 mac(较新的 git)推送,但不能从 VM 推送

相同的卷曲版本。也许一些较旧的 git 版本不支持 https 推送?


是的,https 推送到 github 在这里工作(即使通过带密码的代理)。我使用 git 1.7.3。对我来说,它首先失败是因为我输入了错误的密码。
它适用于 git 1.7.1,但您也必须注意一件事(这是我第一次尝试时错过的):在 HTTPS-URL 中提供用户名,即 url=https://username@github.com/username/repo.git
T
Tunaki

将用户名添加为 URL 的一部分,发生此错误是因为 git 命令访问的是 http 而不是 https。所以设置网址

git remote set-url origin https://<username>@github.com/Path_to_repo.git

之后将提示您输入密码:


F
Faisal

使用管理员权限尝试以下命令。这个命令解决了我的问题。希望它能解决您的问题。

git config --system --unset-all credential.helper

此命令重置所有用户凭据。并让用户再次提供用户 ID 和令牌。对于我的案例问题,请通过此操作解决。我登录了另一个 git 帐户。
L
Lucas Ou-Yang

我想出了我自己对这个问题的看法。

问题不是将协议从 https 更改为 ssl,而是设置 Github 全局用户名和电子邮件! (我试图推送到私有存储库。

git config --global user.email "your_github_email_@email.com"

git config --global user.name "Your full name"

对我不起作用。已设置配置,请使用 github.com.. 中没有“@”
A
AndyL

Github 有专门用于解决此错误的页面:

https://help.github.com/articles/https-cloning-errors

就我而言,事实证明使用新版本的 git (1.8.5.2) 解决了这个问题。


M
Mehrdad

没有使用这些解决方案解决问题的任何人都遵循此线程:

“当在同一台机器上使用两个 git 帐户时会发生这种情况”https://stackoverflow.com/a/52046047/7861886

它有 Windows 解决方案,我还在评论中为 Mac 用户添加了 Mac 解决方案。