在终端上切换 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 帐户 [重复]