在终端上切换 Github 帐户时遇到问题

Posted

技术标签:

【中文标题】在终端上切换 Github 帐户时遇到问题【英文标题】:Having Trouble Switching Github accounts on terminal 【发布时间】:2011-11-24 18:40:14 【问题描述】:

我已经有一段时间没有向 GitHub 推送任何东西了。我最初在我的电脑上设置了我的帐户,一切都很好。然后我将我的帐户更改为客户的帐户(这样我就可以将代码推送到他们的私人存储库)。

已经有一段时间了,现在我要改回旧帐户,但遇到了问题。我生成了一个新的 rsa_key 并且几乎跟随 instructions here 到一个 T。

但是,当我输入:ssh -T git@github.com 我得到:

您好,旧用户名不正确!您已成功通过身份验证,但 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

它仍然给我旧的用户名。

有什么建议吗?

谢谢,

【问题讨论】:

每个 repo 都可能有本地 git 设置,你读过那些吗? git config --local --list 在回购中。 您的原始网址是否包含用户信息? (url = user@github.com/user/project.git) 使用git remote show -vv origin了解 @knittl - 如果ssh -T git@github.com 提供旧用户名,这又有什么关系 【参考方案1】:

问题是您的本地 ssh 仍在向 GitHub 提供您的“旧”SSH 密钥。当您在 ssh-agent 中加载了一个 GitHub 识别的密钥(即您的“旧”密钥)但想要使用另一个 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,如果您在提示输入密码时选中“记住我的钥匙串中的密码”,系统可能会自动加载您的“旧”密钥;您可以通过使用命令/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

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 用于您的存储库,将clientname.github.com:GitHubAccount/repository 之类的URL 用于您客户的存储库(如果您愿意,可以将git@ 前缀放回原处,但这不是必需的,因为上述条目设置了@ 987654339@配置变量)。

【讨论】:

感谢您提供令人难以置信的完整答案。我在阅读中学到了很多东西。我最终使用了您描述的 IdentitiesOnly 方法。

以上是关于在终端上切换 Github 帐户时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Intellij Idea 中切换到另一个 git 帐户 [重复]

在 MacOS 终端上安装 MongoDB 时遇到问题

在 iOS 应用程序中创建帐户原型时遇到问题

将python库用于GCP时如何切换项目目标?

在我的 Mac 上安装 BigCommerce Stencil-CLI 时遇到问题

如何更改我的 github 帐户? [复制]