麻烦切换终端上的Github帐户

时间:2011-09-25 19:51:16

标签: git ssh github ssh-keys

自从我把任何东西推到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

仍然是它给了我旧的用户名。

有什么建议吗?

谢谢,

1 个答案:

答案 0 :(得分:58)

问题是您的本地 ssh 仍在向GitHub提供“旧”SSH密钥。当你有一个GitHub识别的密钥(即你的“旧”密钥)加载到 ssh-agent 但想要使用不同的GitHub识别密钥(即你的“新”密钥)时,通常会出现这种情况。 )。

ssh 按此顺序提供密钥:

  1. 已加载到代理中的指定键
  2. 已加载到代理中的其他密钥
  3. 尚未加载到代理中的指定密钥
  4. “指定密钥”是指-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配置变量。)