无法在terminal上切换Github帐户
自从我把任何东西推到GitHub以来已经有一段时间了。 我最初在我的电脑上设置了我的账户,一切都很顺利。 然后我改变了我的帐户到客户的帐户(所以我可以推送代码到他们的私人存储库)。
已经有一段时间了,现在我正在改回旧帐户,而且我遇到了麻烦。 我生成了一个新的rsa_key,几乎按照这里的说明来一个T.
但是,当我键入: ssh -T git@github.com
我得到:
嗨oldincorrectusername! 您已成功通过身份validation,但GitHub不提供shell访问权限。
我也无法推送到我的回购,因为这个旧的客户端用户名是不被授权的。 我已经在我的计算机上和我在GitHub上的帐户设置中双击了我的ssh密钥。
我也设置了我的全局帐户variables:
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
还是给我旧的用户名。
有什么build议么?
谢谢,
问题是你的本地SSH仍然提供你的“旧”SSH密钥给GitHub。 当你有一个GitHub认可的密钥(也就是你的“旧”密钥)加载到ssh代理中,但想要使用不同的GitHub认可密钥(即你的“新密钥”)时,通常会出现这种情况。
ssh按此顺序提供密钥:
- 已经加载到代理中的指定密钥
- 已经加载到代理中的其他密钥
- 指定的密钥尚未加载到代理中
“指定键”指的是由-i
命令行选项或IdentityFile
configuration选项(可通过~/.ssh/config
或-o
命令行选项指定)指定的那些键。
如果您的“旧”密钥已加载到代理中,但您的“新密钥”不是,那么ssh将始终在您的“新密钥”之前提供您的“旧密钥”(来自第一或第二类)最后一个类别,因为它没有被加载),甚至当你用-i
/ IdentitiesOnly
指定你的“新”键。
你可以用ssh-add -l
来检查你的ssh-agent加载了哪些密钥。 如果您的“旧”密钥已列出,那么您可以通过从代理中卸载它来解决问题(确保也卸载任何其他GitHub认可的密钥,除了可能是您的“新”密钥):
ssh-add -d ~/.ssh/old_key_file
如果您使用的是Mac OS X,则系统可能会自动加载您的“旧”密钥,如果您在提示input密码时选中了“记住我的密钥链中的密码” 您可以通过使用该命令删除密钥的钥匙串条目来禁用此自动加载
/usr/bin/ssh-add -K -d ~/.ssh/old_key_file
。 其他系统可能会做类似的事情,但告诉他们“停止”的命令将会有所不同。
您可以将IdentitiesOnly
configuration选项设置为yes
,而不是从代理卸载“旧”密钥,以告诉ssh跳过第二类密钥(非指定的代理加载密钥)。 你的~/.ssh/config
可能包含这样一个部分:
Host github.com User git IdentityFile ~/.ssh/id_rsa # wherever your "new" key lives IdentitiesOnly yes
这样,GitHub认可的其他密钥是否加载到您的代理中并不重要。 ssh将始终只提供您的“新”密钥。
如果您预计需要访问两个GitHub账户的存储库,并且您不想在GitHub账户之间切换时编辑configuration文件,那么您可以像这样设置~/.ssh/config
:
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
这样的URL来存储您的存储库和URL,比如clientname.github.com:GitHubAccount/repository
(如果你喜欢,你可以把git@
前缀放回去,但是这不是必须的,因为上面的条目设置了User
configurationvariables)。