【问题标题】:Does Git Bash determine identify by ssh key?Git Bash 是否通过 ssh 密钥确定身份?
【发布时间】:2016-09-02 13:46:09
【问题描述】:

这是第 3 天,我仍然无法解决以下问题:

我最初在 2 年前创建了一个 GitHub 帐户。我相信我为这个帐户生成了一个 SSH 密钥。我相信我已将 ssh 密钥加载到我的 ssh-agent 程序中,然后将公钥放在我的 GitHub 帐户中。

现在我最近创建了一个新的 GitHub 帐户。我创建了一个 repo,然后将该 repo 克隆到我的 PC 上。在进行了几次提交后,我尝试将更改推送到存储库。但是,它表示我没有对该存储库的许可,说明了“对存储库的许可被拒绝 - oldusername 没有访问权限”。所以看起来 Git Bash 在尝试推送更改时引用了我的旧用户名。

我尝试通过 'git config user.name' 等更改我的配置信息。但是,这似乎并没有解决问题。然后我偶然发现了一些东西,说我需要一个 SSH 密钥。我对此进行了进一步研究,并意识到我当前的 Git Bash 正在引用与我的旧帐户关联的 ssh 密钥。所以我在我的电脑上删除了这个旧密钥,我也从我的旧 GitHub 帐户中删除了这个密钥。

然后我开始生成一个新的 SSH 公钥/私钥对。我将(或者我相信)新的私钥加载到了 ssh-agent。然后我将公钥添加到我的新 GitHub 帐户中。请注意,我也将“密码”选项留空,因为我不了解它的直接目的。

在这些更改之后,我尝试将所做的更改推送到远程仓库。但是,我再次收到错误“旧用户名无权将更改推送到存储库”。

看来我的 Git Bash 仍在引用我的旧用户名。为什么是这样? Git Bash 是否使用 ssh-agent 加载的 ssh-key 来确定您的身份?如果是这种情况,为什么它仍然引用我的旧 GitHub 用户名?附:我使用的是 Windows 10,Git 2.9.3.2。

有什么想法吗?

【问题讨论】:

  • 你重启代理了吗? ssh-add -L 将列出它知道的所有 ssh 密钥。如果它有您不期望的键,您可以使用 ssh-agent -k 停止它,然后使用 ssh-agent 重新启动它
  • 你关闭了终端吗?也许它正在使用终端中的旧会话。
  • 代理持续时间比终端会话长。您需要重新启动代理(或重新启动)。
  • @PaulHicks 所以我尝试了你的建议,甚至重新启动了计算机。我根本不知道 git 从哪里得到我的旧用户名。我是否正确,它使用 ssh 密钥来识别我?
  • 当你克隆新的 repo 时,你使用了哪个协议? HTTPS 还是 ssh?

标签: git bash github ssh


【解决方案1】:

我认为这里的关键是您使用 HTTPS 来克隆新的存储库。

我怀疑凭据助手正在缓存您的凭据。看到这个:

https://help.github.com/articles/caching-your-github-password-in-git/#platform-windows

在 Windows 上,如果您使用了 wincred 帮助程序 (git config --global credential.helper wincred),那么这会将您的凭据存储在 Windows 凭据存储中,该存储具有一个控制面板界面,您可以在其中删除或编辑存储的凭据。例如看这个:

有了这个商店,您的详细信息会受到您的 Windows 登录信息的保护,并且可以在多个会话中持续存在。这是在 Git for Windows 1.8.1.1 中添加的。

所以要么:

  1. 尝试使用以下命令清除您的 https 克隆存储库的凭据缓存,然后重试:

    git credential-osxkeychain 擦除主机=github.com 协议=https

或,

  1. 使用 Windows 控制面板的凭据管理器编辑凭据。

【讨论】:

  • 为什么我以前从未听说过这个 windows 程序?这绝对是它的样子。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 2017-07-13
相关资源
最近更新 更多