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

Posted

技术标签:

【中文标题】Git 著名的“错误:对 .git 的权限拒绝用户”【英文标题】:Git's famous "ERROR: Permission to .git denied to user" 【发布时间】:2011-07-17 03:38:33 【问题描述】:

我尝试使用谷歌搜索并阅读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 没有 提供外壳访问。

9.没有在代理或防火墙之后

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

debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /home/meder/.ssh/known_hosts:58
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /home/meder/.ssh/id_rsa
debug1: Remote: Forced command: gerve mederot
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Server accepts key:  some stuff, dont know if i should share it

debug1: Remote: Forced command: gerve mederot
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Authentication succeeded (publickey).

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 帐户之间切换时遇到了类似的问题。这是我的解决方案:***.com/questions/18565876/… 如果您希望从 2 个不同的本地仓库推送到其对应的原始远程仓库,请检查:***.com/q/63291726/12033855 【参考方案1】:

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

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

这是我所做的:

    打开“Keychain Access.app”(您可以在 Spotlight 或 LaunchPad 中找到)

    在类别中选择“所有项目”

    搜索“git”

    删除所有旧的和奇怪的项目

    再次尝试 Push 就成功了

【讨论】:

点赞哥们。你是英雄。 地狱是的,终于,在与无数 SSH 密钥斗争之后,这就是有效的答案!似乎 Mac 和 https 访问使用钥匙串。疯了。 祝福你已经尝试解决这个问题好几个星期了 看起来很有帮助,但不清楚 old & strange 是什么。我是不是要把一大堆东西搞砸了..? @geotheory old & strange 表示旧的日期项目和不正确的电子邮件或用户名。您可以通过Date Modified对表格进行排序。【参考方案2】:

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

转到凭据管理器 转到 Windows 凭据 删除通用凭据下的条目 再次尝试连接。这一次,它应该会提示您输入正确的用户名和密码。

remove credentials from git

【讨论】:

完美。我使用不再使用的帐户进行 403 访问。现在解决了。 只删除 github.com 凭据对我来说就足够了 您可以在那里更改您的用户名和任何内容。就是这样。 其实这也适用于我,但如果我有 2 个不同的帐户,我该怎么办? 这是完美的答案。谢谢【参考方案3】:

在第 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 是为我做这件事的那个位。谢谢!【参考方案4】:

在 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 解释了为推送活动设置令牌所需的最小范围。【参考方案5】:

这是因为冲突。

从 ssh-agent 中清除所有密钥

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

添加 github ssh 密钥

ssh-add   ~/.ssh/github

它现在应该可以工作了。

【讨论】:

同样ssh-add -D 会删除所有身份,如果代理进入无效状态会很有用。 ssh-add 终于成功了!【参考方案6】:

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

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

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

【讨论】:

【参考方案7】:

我发现解决方案与 @spyar 提供的解决方案相同,即 Keychain Access 应用程序存储了旧用户名。

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

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

或者

    如果你想使用 ssh 密钥。您只需从 https 更改您的回购网址

    https://github.com/username/repo.git

    进入

    git@github.com:用户名/repo.git

【讨论】:

【参考方案8】:

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

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

我认为您的问题可能是由于您的帐户名称输入错误造成的。

【讨论】:

【参考方案9】:

我最近在我的机器上使用 https 推送的旧 repo 上遇到了这个问题。第 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 拒绝。致命:无法从远程存储库中读取。请确保您具有正确的访问权限并且存储库存在。【参考方案10】:

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

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

【讨论】:

【参考方案11】:

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

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

要找到它们,请运行:

ps aux | grep '\[mux\]'

并杀死相关的。

【讨论】:

【参考方案12】:

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

【讨论】:

【参考方案13】:

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

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

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

【讨论】:

以上是关于Git 著名的“错误:对 .git 的权限拒绝用户”的主要内容,如果未能解决你的问题,请参考以下文章

Git原理与命令大全

github简介

Git GUI简易使用

Git之多个用户ID适配

Linux及Git介绍

Git在windows环境下的使用教程