无法在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按此顺序提供密钥:

  1. 已经加载到代理中的指定密钥
  2. 已经加载到代理中的其他密钥
  3. 指定的密钥尚未加载到代理中

“指定键”指的是由-i命令行选项或IdentityFileconfiguration选项(可通过~/.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 。 其他系统可能会做类似的事情,但告诉他们“停止”的命令将会有所不同。


您可以将IdentitiesOnlyconfiguration选项设置为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@前缀放回去,但是这不是必须的,因为上面的条目设置了Userconfigurationvariables)。