当我尝试使用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
答案 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)。