我经常搜索。但是执行“ git push -u origin master”后仍然报告错误。 最后,我成功执行了'git push -u origin master',但是我真的不知道错误在哪里。请耐心阅读以下内容。
1,我有一个git帐户“ HelenZeng”,现在我有另一个帐户“ Snowbabe”
2,我生成两个ssh密钥,一个是id_rsa_helen,另一个是id_rsa_snow
3,我触摸〜/ .ssh / config
@Test
public void testGetFruitItemMap() {
Map<String, Fruit> fruitItemMap = new HashMap<>();
FruitItemImpl doa1 = Mockito.spy(dao);
Mockito.doReturn(fruitItemMap.values().iterator()) // Here!
.when(doa1).getAllItemsBelongingToApple("Apple");
Assert.assertEquals(fruitItemMap.size(), doa1.getFruitItemMap().size());
}
4,老实说,我尝试过谷歌搜索,我真的不知道为什么要使用ssh-add
#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
5,我创建了一个react app项目,我想将其推送到gitHub存储库(到git帐户“ Snowbabe”)。
$ 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)
6,这是我的.git / config
$ git init
$ git remote add origin git@github.com:Snowbabe/React-study.git
这是正确的网址
7,最后一步
[remote "origin"]
url = git@github.com:Snowbabe/React-study.git
fetch = +refs/heads/*:refs/remotes/origin/*
尝试解决:
$ 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
现在,执行'git push -u origin master'
$ 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)
成功。
答案 0 :(得分:2)
我想您想知道ssh-add
的作用,以及为什么第一种使用ssh-add
的方法失败而第二种方法成功了。我正在考虑这个假设。
ssh-add
为何起作用
ssh-add
用于在ssh代理中加载特定身份。您有几个可用的身份,并且您的ssh代理会按照我不完全了解的顺序将它们提供给您尝试连接的任何服务器。
在典型情况下,给定服务器将仅接受您的身份之一。例如,假设我添加了id_rsa_server1
以连接到host1,并添加了id_rsa_server2
以连接到host2。当我连接到host1时,ssh将id_rsa_server1
提供给服务器并成功连接。当我连接到host2时,ssh首先提供id_rsa_server1
,但失败了,然后尝试下一个is_rsa_server2
,现在它成功了。
加载两个身份时,您的问题是github.com
既知道海伦又知道雪。您想用snow登录,因为那是拥有该特定存储库权限的帐户,但是ssh层会成功获得第一个接受的密钥helen,该密钥没有必需的权限。
因此,当您卸载身份并仅加载正确的身份时,事情就起作用了,因为这一次您像大雪一样登录github.com
,并具有进行推送所需的权限。
我希望这有助于弄清正在发生的事情。
使用.ssh/config
的替代和推荐解决方案
由于您要使用该名称连接到github.com
,因此我认为您的.ssh/config
不会执行任何操作。仅当您以服务器名称连接到github.com-Snowbabe
时,它才会起作用。
这应该有效:
.ssh/config
和User = 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
中定义的别名指定用户名(在git
上始终为github.com
)和身份(Snow的RSA密钥)。您仍然需要像以前一样ssh-add id_rsa_snow
,但是此配置会覆盖通过ssh连接时首先提供的身份。
编辑:在回答similar question的情况下,我现在已经很好地测试了此过程,并更正了该过程中的一些错误。