ChatGPT解决这个技术问题 Extra ChatGPT

Git 著名的“错误:对 .git 的权限拒绝用户”

我尝试使用谷歌搜索并阅读 https://help.github.com/en/articles/connecting-to-github-with-ssh 和各种指南。我无法 git push -u origin mastergit push origin master(相同的命令)。

我已经拥有我的 git 帐户至少 2 年左右。我已经成功地在我的笔记本电脑上创建了 repos 和 push -u origin master,但在这个桌面上我遇到了问题。

这是我尝试过的:

1. 我已经设置了我的 git 用户名

2. 我已经设置了我的 git 用户邮箱

3.我已经把我的/home/meder/.ssh/id_rsa.pub的内容上传到了github的账号页面。我已经确认我没有粘贴任何空格

4. 我用这些内容创建了一个 ~/.ssh/config:

  Host github.com
  User git
  Hostname github.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_rsa

我已将 .ssh 修改为 700,id_rsa 600

5. 我添加了正确远程来源没有打错字git remote add origin git@github.com:medero/cho.git

6. 为了确认#5,这里是我的 .git/config。该目录是正确的,而不是另一个目录:

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = git@github.com:medero/cho.git

7. ssh git@github.com -v 为我提供了成功的身份验证

8. 一件奇怪的事情是,它向我打招呼的用户名附加了 t。我的 github 用户名是 medero,而不是 medert

嗨,梅德罗!您已成功通过身份验证,但 GitHub 不提供 shell 访问权限。

9. 我不在代理或防火墙后面

10. 提供了密钥,这是 -v 的输出:

debug1:主机 'github.com' 是已知的并且与 RSA 主机密钥匹配。 debug1:在 /home/meder/.ssh/known_hosts 中找到密钥:58 debug1:ssh_rsa_verify:签名正确 debug1:SSH2_MSG_NEWKEYS 已发送 debug1:期待 SSH2_MSG_NEWKEYS debug1:SSH2_MSG_NEWKEYS 已收到 debug1:SSH2_MSG_SERVICE_REQUEST 已发送 debug1:SSH2_MSG_SERVICE_ACCEPT 已收到可继续进行的身份验证验证:公钥调试: debug1:下一个认证方法:publickey debug1:提供公钥:/home/meder/.ssh/id_rsa debug1:Remote:强制命令:gerve mederot debug1:Remote:端口转发已禁用。 debug1:远程:X11 转发已禁用。 debug1:远程:代理转发已禁用。 debug1:远程:已禁用 Pty 分配。 debug1:服务器接受密钥:{ 一些东西,不知道我是否应该分享它 debug1:远程:强制命令:gerve mederot debug1:远程:端口转发已禁用。 debug1:远程:X11 转发已禁用。 debug1:远程:代理转发已禁用。 debug1:远程:已禁用 Pty 分配。 debug1:认证成功(公钥)。

11.这是我使用的命令

mkdir cho
git init
touch README
git add README
git commit -m 'test'
git remote add origin git@github.com:medero/cho.git
git push -u origin master

12. 我不想创建新的 SSH 密钥。

13. 如果我使用 ssh 进行 git clone 并进行编辑、提交和 git push,我会得到完全相同的结果。

14. 这是实际错误:

$ git push
ERROR: Permission to medero/cho.git denied to mederot.
fatal: The remote end hung up unexpectedly

15. 我已经设置了我的 github 用户名和 github 令牌:

$ git config --global github.user medero $ git config --global github.token 0123456789yourf0123456789token 为系统上所有 git 实例设置 GitHub 令牌

16. 我已确认我的 github 用户名不是 mederot,并且我的 github 令牌在我的每个帐户页面上都是正确的(验证了前 2 个字符和后 2 个字符)。

17. 确认#16,~/.gitconfig 包含

[github]
    token = mytoken...
    user = medero

18. 如果有必要,我做了ssh-key add ~/.ssh/id_rsa...

理论:

我怀疑有些可疑,因为当我通过 ssh 身份验证时,用户问候语是 mederot 而不是 medero,这是我的帐户。我的 github 帐户中的某些内容可能被错误地缓存了吗?

我还怀疑一些本地 ssh 缓存怪异,因为如果我 mv ~/.ssh/id_rsa KAKAmv ~/.ssh/id_rsa.pub POOPOO 并执行 ssh git@github.com -v,它仍然对我进行身份验证并说当我重命名它时它为我的 /home/meder/.ssh/id_rsa 服务?!一定要缓存?!

我正在使用“Github for Windows”并且在两个 Github 帐户之间切换时遇到了类似的问题。这是我的解决方案:stackoverflow.com/questions/18565876/…
如果您希望从 2 个不同的本地存储库推送到其相应的源远程存储库,请检查:stackoverflow.com/q/63291726/12033855

t
thesquaregroot

谷歌搜索了几天后,我发现这是唯一与我的情况相似的问题。

但是,我刚刚解决了这个问题!所以我把我的答案放在这里是为了帮助其他人寻找这个问题。

这是我所做的:

打开“Keychain Access.app”(您可以在 Spotlight 或 LaunchPad 中找到它)在类别搜索“git”中选择“所有项目”删除每个旧的和奇怪的项目再次尝试推送,它就可以工作了


竖起大拇指哥们。你是英雄。
是的,终于,在与无数 SSH 密钥斗争之后,这就是有效的答案!似乎 Mac 和 https 访问使用钥匙串。疯狂的。
祝你好几个星期一直在努力解决这个问题
看起来很有帮助,但不清楚什么是 old & strange。我是不是要把一大堆东西搞砸了..?
@geotheory old & strange 表示旧日期项目和不正确的电子邮件或用户名。您可以按 Date Modified 对表格进行排序。
F
FAHID

如果 Windows 出现问题,则从 Windows 历史记录中删除凭据。

转到凭据管理器

转到 Windows 凭据

删除通用凭据下的条目

再次尝试连接。这一次,它应该提示您输入正确的用户名和密码。

https://i.stack.imgur.com/5KePZ.png

remove credentials from git


完美的。我使用不再使用的帐户进行 403 访问。现在解决了。
只删除 github.com 凭据对我来说就足够了
在那里你可以改变你的用户名和任何东西。就是这样。
实际上这对我也有效,但如果我有 2 个不同的帐户,我会怎么做?
这是完美的答案。谢谢
T
TheOneTeam

在第 18 步中,我假设您的意思是 ssh-add ~/.ssh/id_rsa?如果是这样,这就解释了这一点:

我还怀疑一些本地 ssh 缓存怪异,因为如果我 mv ~/.ssh/id_rsa KAKA 和 mv ~/.ssh/id_rsa.pub POOPOO,并执行 ssh git@github.com -v,它仍然会验证我并说它服务我重命名时的/home/meder/.ssh/id_rsa?!一定要缓存?!

...因为 ssh-agent 正在缓存您的密钥。

如果您在 GitHub 上查看,则有一个 mederot 帐户。你确定这与你无关? GitHub 不应允许将相同的 SSH 公钥添加到两个帐户,因为当您使用 git@github.com:... URL 时,它会根据 SSH 密钥识别用户。 (确认这不应该被允许 here。)

因此,我怀疑(按可能性降序)以下情况之一是:

您之前创建了 mederot 帐户并将您的 SSH 密钥添加到其中。其他人获得了您的公钥副本并将其添加到 mederot GitHub 帐户。 GitHub 中有一个可怕的错误。

如果不是 1,那么我会将此报告给 GitHub,以便他们检查 2 或 3。

更多的 :

ssh-add -l 检查是否存在多个标识如果存在,通过 ssh-add -d "that key file" 将其删除


伟大的帮助马克!这也为我修复了它。
就是这样。你让我头疼不已。现在我只需要记住每次我想切换我的 github/ssh 登录时都运行 ssh-add ...
由于某种原因,ssh-add -d <keyfile> 不起作用。 (手动删除文件确实如此。)您提到的缓存必须以某种方式手动重新加载。如何?
ssh-add -d -> “无法打开与您的身份验证代理的连接。”
ssh-add 是为我做的。谢谢!
l
leanne

在 Mac 上,如果您有多个 GitHub 登录并且未使用 SSH,请使用以下命令强制正确登录:

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

如果您在推送到私有存储库时遇到问题,这也有效。


谢谢,这对我有用。它提示我输入密码,并且在我提供密码后我能够推送。非常感激!
...但这并没有解决我在 Windows 上的问题,仅在 Mac 上
...但是上面的@Fahid 建议清理 Windows 上的凭据有帮助
你是英雄。
如果您有令牌 @jxramos 仍然可以工作 - 只需在要求输入密码时输入令牌文本。有关说明,请参阅 Creating a personal access token。而且,this SO question 解释了为推送活动设置令牌所需的最小范围。
G
Gowtham

是因为冲突。

从 ssh-agent 清除所有密钥

ssh-add -d ~/.ssh/id_rsa
ssh-add -d ~/.ssh/github

添加 github ssh 密钥

ssh-add   ~/.ssh/github

它现在应该可以工作了。


ssh-add -D 还会删除所有身份,如果代理进入无效状态,这可能很有用。
ssh-add 终于成功了!
11 岁的答案,但仍然有用:D
D
Deepak Bhatta

我正在使用 Mac,通过从钥匙串访问应用程序中删除 github 记录解决了这个问题:这是我所做的:

打开“Keychain Access.app”(您可以在 Spotlight 或 LaunchPad 中找到它)在类别搜索“git”中选择“所有项目”删除所有旧的和奇怪的项目再次尝试推送,它只是工作

为方便起见,以上步骤是从@spyar 复制的。


T
Tomerikoo

我发现解决方案与@spyar 提供的解决方案相同,后者是存储旧用户名的钥匙串访问应用程序。

这种情况有两种解决方案:

通过打开钥匙串访问应用程序删除钥匙串访问中的信息搜索GitHub删除相应的凭据

或者

如果你想使用 ssh 密钥。您只需将您的回购网址从 https://github.com/username/repo.git 更改为 git@github.com:username/repo.git


P
PhilVarg

我最近在使用 https 推送的机器上的旧仓库上遇到了这个问题。第 5 步和第 6 步通过将我的 repo 的远程 url 从使用 https url 重新设置为 ssh url 解决了我的问题

检查遥控器是否使用 https url

> git remote -v
origin  https://github.com/ExampleUser/ExampleRepo.git (fetch)
origin  https://github.com/ExampleUser/ExampleRepo.git (push)

然后重新设置源以使用 ssh url

> git remote set-url origin git@github.com:ExampleUser/ExampleRepo.git

验证新遥控器

> git remote -v
origin  git@github.com:ExampleUser/ExampleRepo.git (fetch)
origin  git@github.com:ExampleUser/ExampleRepo.git (push)

现在可以成功git push -u origin

我仍然不确定当遥控器是 https 时我会更改哪些设置可能导致推送失败,但这是我的问题的解决方案


错误:对 unrealcv/synthetic-computer-vision.git 的权限被 monajalal 拒绝。致命:无法从远程存储库中读取。请确保您具有正确的访问权限并且存储库存在。
B
BenC

我和你有同样的问题。经过长时间的谷歌搜索,我发现我的错误是由多个用户在他们的帐户中添加了相同的密钥引起的。

所以,这是我的解决方案:删除错误用户的 ssh-key(我可以这样做,因为错误用户也是我的帐户)。如果错误的用户不是您的帐户,您可能需要更改您的 ssh-key,但我认为这不会发生。

而且我认为您的问题可能是由于您的帐户名称输入错误引起的。


这是我这边的同样问题。删除错误用户的 ssh-key 后,如果仍然无法使用,请执行以下操作: ``` 1. 回到您的“正确”帐户,删除并重新添加您的 ssh 密钥 2. 关闭终端并重新打开您的终端,然后推送你的代码```
M
Martin Smith

我在使用 Travis CI 到 deploy content 时遇到了这个错误,这涉及将编辑推送到存储库。

我最终通过更新与具有 public_repo 范围访问权限的 Travis 帐户关联的 GitHub personal access token 解决了这个问题:

https://i.stack.imgur.com/01DDn.png


C
Cesar Celis

推送到存储库时观察到相同的问题:

$ git push --set-upstream origin new-operator-test
ERROR: Permission to redhat-openshift-ecosystem/redhat-marketplace-operators.git denied to cniackz.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

所做的是确保您克隆您的分叉存储库:

git clone git@github.com:cniackz/redhat-marketplace-operators.git
git checkout -b new-branch
<performed the changes>
git add <files>
git commit -m <files>

它奏效了:

$ git push --set-upstream origin new-branch
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 10 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (7/7), 643 bytes | 643.00 KiB/s, done.
Total 7 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
remote: 
remote: Create a pull request for 'new-branch' on GitHub by visiting:
remote:      https://github.com/cniackz/redhat-marketplace-operators/pull/new/new-branch
remote: 
To github.com:cniackz/redhat-marketplace-operators.git
 * [new branch]      new-branch -> new-branch
Branch 'new-branch' set up to track remote branch 'new-branch' from 'origin'.

怀疑一开始,它没有使用分叉存储库,而是来自 redhat 的存储库,这可以解释问题,因为 cniackz 用户无权访问该存储库,而只能访问分叉。


J
JavaHopper

我在 Mac OS 上遇到了类似的问题。

概括

确保使用正确/预期的用户名克隆 repo 如果您尝试在不指定 GitHub 用户名的情况下克隆 repo,它会获取已缓存在 OSX 的 Keychain Access 实用程序中的 GitHub 用户名因此我必须在克隆 repo 时指定用户名 - git clone https://username@github.com/username/repository.git 当提示输入密码时,您可能必须使用个人访问令牌 (PAT),因为 GitHub 已于 2021 年 8 月 13 日删除了对密码身份验证的支持.这里有一些关于个人访问令牌 (PAT) 以及如何设置和使用的文档 初始推送可能还需要指定用户名 git push https://username@github.com/username/repository.git 并提供 PAT 作为密码 在后续推送中,当它们被缓存到 OSX 钥匙串访问实用程序时,不会提示密码。此外,我不必使用完整的 URL 来推送。只是 git push 工作正常

有关我的设置/情况/问题的更多详细信息

本质上,我试图使用两个不同的 GitHub (github.com) 帐户(1. 工作帐户/电子邮件和 2. 个人帐户/电子邮件)

我的情况有点特殊,因为在将我们的存储库迁移到公共 github.com 之前,当我们的组织在本地时,我的个人电子邮件生成了一个现有的 SSH 密钥,并且该密钥还为 Bastion AWS(亚马逊网络服务)配置。我无法使用相同的电子邮件重新生成新密钥,而且我没有使用工作电子邮件生成新密钥,这需要更新为 Bastion AWS 配置的密钥

注意:我最初的设置本身是不正确的,因为当时我对如何使用或使用 SSH 密钥了解不多,所以我意识到我设置错误

以下方法对我有用(请注意,这是一种解决方法)。我转而使用 GitHub 个人访问令牌 (PAT)。

git clone https://username@github.com/username/repository.git

提示密码,我在这里输入了我的 PAT(然后缓存到 OSX Keychain Access)

接着

git push https://username@github.com/username/repository.git

在我随后的推送中,没有密码提示,我也不必使用完整的 URL 来推送。刚刚 git push <origin/remote/upstream> <branch> 工作正常


B
Bash

这个问题也是由以下原因引起的:

如果您在 mac/linux 上,并且在 ~/.ssh/config 中使用“ControlMaster”,则可能有一些 ssh 控制主进程正在运行。

要找到它们,请运行:

ps aux | grep '\[mux\]'

并杀死相关人员。


b
bluefalcon

我也遇到了这个问题,对我来说造成这种情况的原因是,在克隆我正在推送我的更改的仓库时,我在没有登录的情况下从一个隐身选项卡中获取了克隆 URL。(我仍然不知道它是如何影响的)。出于某种原因,这导致 git 选择了另一个用户帐户。当我从正确的登录页面再次尝试时,它对我来说就像往常一样工作。


R
Rahul Singh

在我的 MAC 上工作时,我也碰巧遇到了这个问题所以,问题是这样的。我曾经从我的一个旧 GitHub 帐户登录。现在,我正在使用不同的 GitHub 帐户。我使用以下步骤解决了 -

打开“Keychain Access.app” 在类别搜索“Github”中选择“所有项目”打开该条目,并将帐户更改为新的 github 用户名。

再次尝试推送,它将起作用


e
enthusiast

对我有帮助的步骤:

删除 github 上所有现有的 PAT 并创建一个新的。确保在创建新 PAT 时检查 repo 部分。以下是来自 github 的图像作为示例:对我来说,这一步是错误的来源,因为我正确地遵循了上述步骤 1。在本地机器 windows 或 mac 中更新你的 github 密码

这就是我想的。