微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SSH 使用可能缓存的旧用户连接到 GitHub

如何解决SSH 使用可能缓存的旧用户连接到 GitHub

Mac OS (High Sierra) 在这里我有一个 SSH 密钥 example-gh-user,当我运行 pbcopy < ~/.ssh/example-gh-user.pub 并将其粘贴到编辑器中时,我看到:

ssh-ed25519 <SOME_REALLY_LONG_ALPHANUM> me@example.org

显然出于安全原因,我将<SOME_REALLY_LONG_ALPHANUM>me@example.org实际 值替换为上面的虚拟值。但看起来一切正常。

在 GitHub 上,我有一个用户 example-gh-user,正在使用 me@example.org 电子邮件,我可以使用该用户登录并查看我的所有存储库。一切看起来都很好。

我已关注 GitHub guide on adding an SSH key 到我的 example-gh-user GitHub 帐户。因此,此 SSH 密钥应与我的 GH 帐户关联的同一电子邮件地址相关联。

在我的 ~/.ssh/config 文件中,我有以下条目:

Host example-dev
  Hostname   github2.com
  AddKeysToAgent yes
  IdentityFile ~/.ssh/example-gh-user

Host github.com
  User git
  Hostname   github.com
  AddKeysToAgent yes
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/example-gh-user

到目前为止,我认为很好。

但是,当我从命令行运行以下命令时:

ssh -Tv git@github.com

我得到了一个巨大的输出转储,有趣的是,它以这样的方式结束:

debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
Hi my-old-gh-user! You've successfully authenticated,but GitHub does not provide shell access.
debug1: channel 0: free: client-session,nchannels 1
Transferred: sent 3452,received 2724 bytes,in 0.1 seconds
Bytes per second: sent 28403.1,received 22413.1
debug1: Exit status 1

看那个! my-old-gh-user!这是一个GH用户,我多年没用过!

SSH 和/或 git/GitHub 在哪里寻找 my-old-gh-user 的来源?! SSH 是否缓存一些旧数据?如果我理解一切正常工作,~/.ssh/config 明确指示 SSH 在以 ~/.ssh/example-gh-user 用户身份连接到 git 时使用 github.com,对吗?我哪里出错了?

解决方法

如何知道当前最新的 some-service/client 版本是什么,以及如何更新 go.mod 以使用它?

简单的go get github.com/SomeExampleOrg/some-service/client(假设原始行仍在go.mod中)

这会将 go.mod 更新为该存储库的最新版本,并且关于客户端的 go.mod 行将显示可用的最新版本。

如果该存储库是公共存储库,Go 将使用普通的 HTTPS URL,并且不需要您的 SSH 配置。


讨论中提到了 TheOP

ssh -Tv git@github.com` generates the following output:

Hi my-old-gh-user! You've successfully authenticated,but GitHub does not provide shell access. 

my-old-gh-user 是我多年未使用的老 GH 用户,必须为其配置 SSH。

SSH/GitHub 从哪里获取 my-old-gh-user?

默认情况下,ssh 会查找 ~/.ssh/id_rsa(.pub)。如果该旧公共 kay 已注册到旧 GitHub 用户帐户 SSH 配置文件设置(如 documented by GitHub),这将解释为什么 SSH 在默认情况下使用旧 GitHub 帐户识别您。

在您的新帐户中注册一个新的公钥,并确保用您的新密钥(或 use an ~/.ssh/config file)替换默认的公钥,SSH 将使用新帐户对您进行身份验证。

我生成了 ~/.ssh/example-gh-user

然后您需要添加到您的 ~/.ssh/config 文件中:

Host newgh
    HostName github.com
    User git
    IdentityFile ~/.ssh/example-gh-user

然后

ssh -Tv newgh

cd /path/to/repo
git remote set-url origin newgh:<me>/<repo>
,

这个有趣场景的答案在于 ssh-agent 的工作方式以及在 MacOS 的钥匙串上缓存身份(SSH 密钥)的方式。

您可以执行 ssh-add -L 来获取所有当前加载的身份,其中您应该看到旧的 git ssh 用户的身份。

您可以使用 ssh-add -Dssh-add -d 刷新身份或使用以下方法重新加载 ssh-agent

eval "$(ssh-agent -s)"
ssh-add

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?