【问题标题】:Test ssh connection with github shows wrong username用 github 测试 ssh 连接显示错误的用户名
【发布时间】:2021-03-05 16:49:59
【问题描述】:

问题

当我使用ssh -T git@github.com 测试我与 github 的 ssh 连接时,它显示的用户名不正确 -

Hi <WRONG USERNAME>! You've successfully authenticated, but GitHub does not provide shell access.

因此,当我尝试使用 SSH 进行克隆时,我收到一个致命错误,提示我无权访问它。

  1. 为什么这个用户名没有正确显示?
  2. 如何更改此用户名?

我尝试过/检查过的内容

  • 我已使用 git config --global user.name 检查了我的 git 全局用户名。
  • 我已在 Windows 凭据中重置了我的 git 凭据 经理。
  • 我检查了正确的密钥是否已存储在 github 上。

其他说明

  • 我使用的是 Windows 10 操作系统。
  • 我有 3 个 ssh 密钥。

非常感谢任何和所有帮助。

【问题讨论】:

  • 唯一重要的是你用来向 github 识别你自己的私有 ssh 密钥。看起来好像您正在使用为您想要的用户以外的用户配置的密钥。尝试使用显式 -i /path/to/key 使用 ssh 命令,以确保您使用的是正确的密钥(并且可能确保您的 ssh 代理中没有密钥,如果您正在运行一个)。
  • @larsks 使用显式路径显示正确的用户名(我从 ssh 代理中删除了密钥)。是否需要对我的 .gitconfig 进行编辑或对我的 ssh 代理进行更改以保持您提供的检查结果?
  • @bk2204 我按照此常见问题解答中的步骤操作并更新了 .ssh/config。上面的问题依然存在。
  • 我唯一的建议是常见问题解答中的建议(具体来说,(a)使用主机别名,(b)为该别名设置IdentityFile,(c)为此设置IdentitiesOnly别名)。

标签: git github ssh


【解决方案1】:

我按照此常见问题解答中的步骤操作并更新了 .ssh/config

为了使用该配置条目(意味着使用 IdentityFile 引用的正确私钥),您需要在 SSH URL 中使用该 %USERPROFILE%\.ssh\config 文件中的 Host 条目:

Host ghuser2
  Hostname github
  User git
  IdentityFile /path/to/user2/private-key

你的网址变成

cd c:\path\to\repo
git remote set-url origin ghuser2:<user2>/<repo.git>

【讨论】:

  • #VonC 感谢您的回复。使用您关于 URL 的注释。当我测试 SSH 连接时,显示正确的用户名 -
  • #VonC 感谢您的回复。使用您关于 URL 的注释。当我测试 SSH 连接时,正确的用户名会显示 - ssh -T git@github.com- 但是,当我要克隆存储库时,例如使用 - git clone git@github.com-/.git 我仍然收到错误消息,说我需要检查访问权限。在我的 ~/.ssh 文件夹中有一个“know_hosts”文件——它看起来有几个指纹。该文件的内容会导致问题吗?再次感谢。
  • @eest 同样,如果你想测试配置文件中定义的 URL,测试将是 ssh -T ghuser2:这将使用正确的私钥,与添加的公钥相关联的私钥到正确的用户 GitHub 个人资料。 ssh -T ghuser2 成为ssh -T -i /path/to/private/key git@github.com 的快捷方式
  • 感谢@VonC。我可能对我上次的评论感到困惑。简而言之,我遵循了您所概述的内容,并且测试与 github 的连接可以返回正确的用户,但克隆不会。我不确定为什么我仍然收到错误克隆。如果我可以提供更多信息来帮助更准确地诊断问题,请告诉我。再次感谢。
  • @eest 是的,您在执行git clone 时使用的是什么 URL? (你有最新的 2.29.2 Git for Windows 吗?
【解决方案2】:

参见VonC's answer,注意如果你使用的是ssh代理,你可以将配置好的身份文件指向public键,从而选择合适的公钥/私钥对发送到 GitHub。然后 ssh 代码将从代理获取私钥。

(我发现当您使用 ssh 代理时,如果您将私钥指向公钥文件,ssh 将不会获取私钥,即使两个文件都存在在机器上,这有点烦人。另一种说法是:如果您确实使用代理,IdentityFile 可以是任一文件,然后您可以将公钥存储在中间机器和跳转主机,这通常是一个好主意。但如果你不使用代理,你显然必须在机器上存储公钥和私钥,然后IdentityFile必须命名私钥对。因此,如果您总是使用代理,则可以在任何地方使用相同的 ssh 配置文件,但如果您有时使用代理,则不能使用到处都是相同的 ssh 配置文件。)

【讨论】:

  • 谢谢@torek。我不得不说你的回答有点超出我的想象,但我认为在实施你的建议之前我可能需要克服一两个障碍。
猜你喜欢
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
相关资源
最近更新 更多