Git-系统配置了两个帐户,但是git push使用了错误的帐户

时间:2019-02-02 17:11:10

标签: git github

当我尝试使用git push origin RC-01时,出现错误消息:

  

错误:拒绝user2对user1 / repo1.git的权限。致命的:不能   从远程存储库读取。

     

请确保您具有正确的访问权限和存储库   存在。

键入git config -l给出

credential.helper=osxkeychain 
core.repositoryformatversion=0 
core.filemode=true 
core.bare=false 
core.logallrefupdates=true 
core.ignorecase=true 
core.precomposeunicode=true 
remote.origin.url=git@github.com-personal:user1/repo1.git 
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* 
branch.master.remote=origin branch.master.merge=refs/heads/master 
user.name=user1 
user.email=user1@hotmail.co.uk

~/.ssh/config有两个条目:

# Work account (associates to user2)
Host github.com
 HostName github.com
 User git
 AddKeysToAgent yes
 UseKeychain yes
 IdentityFile ~/.ssh/id_rsa_work

# Personal account (associates to user1)
Host github.com-personal
 HostName github.com
 User git
 UseKeychain yes
 AddKeysToAgent yes
 IdentityFile ~/.ssh/id_rsa_personal

当我做ssh -T git@github.com-personal时, 我得到

  

您好,user2!您已经成功通过身份验证,但是GitHub没有   提供shell访问权限。

我看不到user2的显示方式-应该是user1-我怀疑这是我的问题,但是如何使push命令起作用?

根据jingx的建议,添加了ssh -Tv git@github.com-personal输出:

$ ssh -Tv git@github.com-personal
OpenSSH_7.6p1, LibreSSL 2.6.2
debug1: Reading configuration data /Users/named/.ssh/config
debug1: /Users/named/.ssh/config line 10: Applying options for github.com-personal
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to github.com port 22.
debug1: Connection established.
debug1: identity file /Users/named/.ssh/id_rsa_personal type 0
debug1: Authenticating to github.com:22 as 'git'
debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /Users/named/.ssh/known_hosts:1
debug1: Authentication succeeded (publickey).
Authenticated to github.com ([140.82.118.3]:22).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: pledge: network
debug1: Sending environment.
debug1: Sending env LANG = en_GB.UTF-8
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
Hi user2! You've successfully authenticated, but GitHub does not provide shell access.
debug1: channel 0: free: client-session, nchannels 1
debug1: Exit status 1

1 个答案:

答案 0 :(得分:1)

当您使用ssh连接到GitHub时,GitHub看到的唯一用户名git

ssh -T git@...

所以,GitHub上需要一些方法来搞清楚你是谁。

他们使用的方式是查看您提供的密钥。您提供了以下来源的密钥:

identity file /Users/named/.ssh/id_rsa_personal

他们旁边有一个巨大的桌子,上面摆放着钥匙和用户名。他们浏览密钥表,找到与您刚发送的密钥相匹配的密钥表,并说:此密钥适用于用户user2

这就是GitHub知道您user2的方式:表是这样的。

要更新其表,请使用其Web界面。告诉他们:您以用户X的身份认识我(这是证明我的凭据)。现在,我的新的密钥,你从来没有见过为Y 的。他们将在宇宙中每个用户的巨型表中添加一个 Y = X 条目。下一次有人进来自称是用户git,并提供关键的Ÿ的,他们会知道,这个人是的真正的用户的 X

很显然,您现在提供的密钥与user2前一段时间给他们的密钥相同,并且已经存储在其巨型表中。 (他们是否已经存储都user2 的你,我不知道,但他们的查找发现只有{{1}在user2删除该键。如果{{ 1}}删除他的钥匙,他们突然开始寻找你,它告诉我们,他们的巨大的表实际上确实有这两个项目现在,一个证明有趣的一点,在将来的某个GitHub的攻击向量可能是有用的,但任何事情立即不是真的有用。)

(如果使用HTTPS连接到GitHub上,这一切都不适用于所有这一切都具体到SSH)。