自从我把任何东西推到GitHub以来已经有一段时间了。我最初在计算机上设置了帐户,一切都很顺利。然后我将我的帐户更改为客户的帐户(因此我可以将代码推送到他们的私人存储库)。
已经有一段时间了,现在我正在改回旧帐户,我遇到了麻烦。我生成了一个新的rsa_key,几乎跟着instructions here到了T。
然而,当我输入:ssh -T git@github.com
时,我得到:
嗨oldincorrectusername!您已成功通过身份验证,但GitHub不提供shell访问权限。
我也不能推送到我的仓库,因为这个旧客户端用户名未经授权。我在我的计算机和GitHub上的帐户设置上都仔细检查了我的ssh密钥。
我还设置了我的全局帐户变量:
git config --global user.name "Firstname Lastname"
git config --global user.email "your_email@youremail.com"
git config --global github.user username
git config --global github.token 0123456789yourf0123456789token
仍然是它给了我旧的用户名。
有什么建议吗?
谢谢,
答案 0 :(得分:58)
问题是您的本地 ssh 仍在向GitHub提供“旧”SSH密钥。当你有一个GitHub识别的密钥(即你的“旧”密钥)加载到 ssh-agent 但想要使用不同的GitHub识别密钥(即你的“新”密钥)时,通常会出现这种情况。 )。
ssh 按此顺序提供密钥:
“指定密钥”是指-i
命令行选项或IdentityFile
配置选项指定的密钥(可以通过~/.ssh/config
或-o
指定命令行选项)。
如果您的“旧”密钥已加载到代理中,但您的“新”密钥未加载,则 ssh 将始终提供您的“旧”密钥(来自第一个或第二个类别)您的“新”密钥(仅限于最后一个类别,因为它未加载),即使您使用-i
/ IdentitiesOnly
指定“新”密钥。
您可以使用ssh-add -l
检查 ssh-agent 中加载的密钥。如果列出了您的“旧”密钥,那么您可以通过从代理中卸载它来解决问题(确保还卸载任何其他GitHub识别的密钥,除了您的“新”密钥):
ssh-add -d ~/.ssh/old_key_file
如果您使用的是Mac OS X,系统可能会自动加载您的“旧”密钥,如果您在一次提示输入密码时选中了“记住我的钥匙串中的密码”;您可以通过使用命令
删除密钥的Keychain条目来禁用此自动加载
/usr/bin/ssh-add -K -d ~/.ssh/old_key_file
。其他系统可能会做类似的事情,但告诉他们“停止”的命令会有所不同。
您可以将IdentitiesOnly
配置选项设置为yes
,以告诉 ssh 跳过第二类键,而不是从代理中卸载“旧”键(未指定代理加载的密钥)。您的~/.ssh/config
可能包含以下内容:
Host github.com
User git
IdentityFile ~/.ssh/id_rsa # wherever your "new" key lives
IdentitiesOnly yes
这样,将任何其他GitHub识别的密钥加载到您的代理中都无关紧要; ssh 将始终只提供“新”密钥。
如果您预计需要访问两个GitHub帐户的存储库,并且您不想在每次要在GitHub帐户之间切换时编辑配置文件,那么您可以设置~/.ssh/config
,如下所示:< / p>
Host clientname.github.com
HostName github.com
IdentityFile ~/.ssh/client_id_rsa # or wherever your "old" client key lives
Host github.com
IdentityFile ~/.ssh/id_rsa # or wherever your "new" key lives
Host github.com *.github.com
User git
Hostname github.com
IdentitiesOnly yes
然后为您的存储库使用github.com:GitHubAccount/repository
等网址,为客户端的存储库使用clientname.github.com:GitHubAccount/repository
之类的网址(如果您愿意,可以将git@
前缀放回去,但是从那时起就没有必要以上条目设置User
配置变量。)