【问题标题】:Push to .git but denied to wrong user , finally solved推送到.git但拒绝错误的用户,终于解决了
【发布时间】:2019-08-17 17:00:46
【问题描述】:

我经常用谷歌搜索。但是执行'git push -u origin master'后还是报错。 最后我执行'git push -u origin master'成功,但我真的不知道错误在哪里。请耐心阅读以下内容。

1,我有一个 git 帐户“HelenZeng”,现在我有另一个帐户“Snowbabe”

2、我生成了两个ssh key,一个是id_rsa_helen,一个是id_rsa_snow

3、我触摸~/.ssh/config

#github.snowbabe
  Host github.com-Snowbabe
          HostName github.com
          User Snowbabe
          IdentityFile ~/.ssh/id_rsa_snow

  #github.helenzeng
  Host github.com-HelenZeng
          HostName github.com
          User HelenZeng
          IdentityFile ~/.ssh/id_rsa_helen

4,我试过google,说实话,我真的不知道为什么要使用ssh-add

$ ssh-add ~/.ssh/id_rsa_helen
$ ssh-add ~/.ssh/id_rsa_snow
$ ssh-add -l
  4096 SHA256:Ky5cNi8JKMUuguV0Snt4epmwFn2MgAk19nzF3MJujWU 
  /Users/'username'/.ssh/id_rsa_helen (RSA)
  4096 SHA256:hMfQyemWSz+f+AHrmsbZdhrDb11U+wA4xXeG3X1u28E 
  /Users/'username'/.ssh/id_rsa_snow (RSA)

5,我创建了一个 react 应用项目,我想将它推送到 gitHub 存储库(到 git 帐户 'Snowbabe')。

$ git init
$ git remote add origin git@github.com:Snowbabe/React-study.git

6,这是我的 .git/config

[remote "origin"]
       url = git@github.com:Snowbabe/React-study.git
       fetch = +refs/heads/*:refs/remotes/origin/*

网址是正确的

7、最后一步

$ git push -u origin master
  ERROR: Permission to Snowbabe/React-study.git denied to HelenZeng.
  fatal: Could not read from remote repository.

  Please make sure you have the correct access rights

尝试解决:

$ ssh-add -l
 4096 SHA256:Ky5cNi8JKMUuguV0Snt4epmwFn2MgAk19nzF3MJujWU 
 /Users/'username'/.ssh/id_rsa_helen (RSA)
 4096 SHA256:hMfQyemWSz+f+AHrmsbZdhrDb11U+wA4xXeG3X1u28E 
 /Users/'username'/.ssh/id_rsa_snow (RSA)

/** delete all **/
$ ssh-add -D
 All identities removed.

/** just ssh-add id_rsa_snow **/
$ ssh-add ~/.ssh/id_rsa_snow
$ ssh-add -l
 4096 SHA256:hMfQyemWSz+f+AHrmsbZdhrDb11U+wA4xXeG3X1u28E 
 /Users/yaxian/.ssh/id_rsa_snow (RSA)

现在,执行'git push -u origin master'

$ git push -u origin master
Counting objects: 18, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (18/18), done.
Writing objects: 100% (18/18), 165.52 KiB | 0 bytes/s, done.
Total 18 (delta 0), reused 0 (delta 0)
To github.com:Snowbabe/React-study.git
 * [new branch]      master -> master

成功了。

【问题讨论】:

  • 你的问题是什么?
  • 如果您将其发布为对格式良好的问题的回答会更好。你遇到了什么问题?你尝试了什么?然后在答案中发布您的解决方案。
  • 请参阅this guide 了解关于自我回答的信息。允许并鼓励这样做,但仍需要遵循问答格式。
  • @HelenZe 仅供参考,我在下面改进了我的答案。

标签: git github ssh git-push


【解决方案1】:

我想你想知道ssh-add 做了什么,以及为什么使用ssh-add 的第一种方式失败而第二种方式成功了。我带着这个假设来回答。

为什么ssh-add 会这样工作

ssh-add 用于在您的 ssh 代理中加​​载特定身份。您有几个可用的身份,您的 ssh 代理会将它们提供给您尝试连接的任何服务器,我不完全理解的顺序。

在典型情况下,给定的服务器只会接受您的一个身份。例如,假设我添加了id_rsa_server1 以连接到主机1,并添加id_rsa_server2 以连接到主机2。当我连接到 host1 时,ssh 向服务器提供id_rsa_server1 并成功连接。当我连接到 host2 时,ssh 首先提供 id_rsa_server1,但失败了,然后尝试下一个 is_rsa_server2,现在成功了。

当你加载这两个身份时,你的问题是github.com 知道 helen 和 snow。您想使用 snow 登录,因为这是对该特定 repo 具有权限的帐户,但 ssh 层使用第一个接受的密钥 helen 成功,它没有所需的权限。

因此,当您卸载身份并仅加载正确的身份时,一切正常,因为这一次您以 snow 身份登录 github.com,并拥有执行推送所需的权限。

我希望这有助于澄清发生了什么。

.ssh/config 的替代和推荐解决方案

因为您使用该名称连接到github.com,所以我认为您的.ssh/config 没有任何作用。只有当您连接到github.com-Snowbabe 作为服务器名称时,它才会起作用。

这应该可行:

.ssh/config 与用户=git

Host github.com-Snowbabe
   HostName github.com
   User git
   IdentityFile ~/.ssh/id_rsa_snow

将您的 Git 存储库设置为使用此远程名称:

git remote set-url origin github.com-Snowbabe/React-study.git

通过这些设置,您的 ssh 代理将在使用该主机名时使用正确的身份文件:.ssh/config 中定义的别名指定用户名(在github.com 上必须始终为git)和身份(Snow 的 RSA钥匙)。您仍然需要像以前一样ssh-add id_rsa_snow,但此配置会覆盖通过 ssh 连接时首先提供的身份。

编辑:我现在已经在回答similar question 的情况下很好地测试了这个程序,并纠正了上述过程中的一些错误。

【讨论】:

  • 这对我来说是最好的完美答案。我很想给你投票,但是这个声望不到15的新账号不能给任何人投票。非常感谢。原谅我糟糕的英语。
  • 我将在北京时间今天下午测试程序,再次感谢您。
  • 很高兴我能帮上忙。让我知道替代解决方案是否有效,然后我会根据您提供的任何反馈更新答案。
  • 我真的不知道为什么这不起作用。我必须每次删除所有身份并添加想要的身份。
  • 首先,抱歉回复晚了。我测试你说的,用 User=git 更改 .ssh/config,React-study.git pull 在 ssh-add id_rsa_snow 情况下工作。我真的知道我缺乏 git 信息,所以我会仔细阅读 git 的帮助文档。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 2017-03-01
  • 2013-12-26
  • 2013-01-17
  • 1970-01-01
相关资源
最近更新 更多