配置 SSH 时, Github 是怎么知道我的用户名的?

2023-10-24 00:33:52 +08:00
 hiwenvv

我在尝试配置 SSH 访问 Github 。我执行了下面的操作:

1 、使用 ssh-keygen 生成一对密钥。

2 、将 公钥传到 Github 上。

3 、windows 启动 ssh-agent ,使用 ssh-add 添加私钥。

操作说明告诉我:ssh -T git@github.com 来测试连接,我测试了,确实可以。

我没有输入我的用户名,Github 是如何得到我的用户名的?

(我以为应当使用 ssh -T myname@github.com ,然而并不是)

1753 次点击
所在节点    GitHub
16 条回复
duduke
2023-10-24 00:37:57 +08:00
非对称加密和用户名有啥关系😂
Cu635
2023-10-24 00:38:47 +08:00
ssh 鉴权的时候是看私钥和公钥能否对应,而公钥不是通过“传到 Github 上”跟用户名关联起来了么……
leoleoasd
2023-10-24 00:42:45 +08:00
SSH 鉴权仅通过 public key 与 private key ;但是服务器端可以知道你用的具体哪个 key ,通过 key 来反查你的 github username
比如你可以试一试 同一个 public key 加到两个 github 账户里,第二个应该会不让你加
leoleoasd
2023-10-24 00:43:17 +08:00
SSH 鉴权通过 ssh 的 public key ; git 操作鉴权(如 private repo )等是通过你的 key 反查你的 github username 的
nkloveni
2023-10-24 00:44:05 +08:00
nkloveni
2023-10-24 00:45:56 +08:00
@nkloveni 重点看这个,是 SSH 认证提供的能力,认证的时候 ssh 客户端会把自己对应的公钥发给服务端,这样服务端可以直接查表了
leoleoasd
2023-10-24 00:47:19 +08:00
你本地的电脑也可以做到类似效果,比如让某一个 key 只能 sftp ,没有 shell access:

http://man.he.net/man5/authorized_keys#:~:text=two%20is%20applied.-,command%3D%22command%22,-Specifies%20that%20the
nyxsonsleep
2023-10-24 00:56:53 +08:00
是指没设参数自动获取计算机用户名的相关信息吧。
hiwenvv
2023-10-24 01:04:53 +08:00
@leoleoasd 那么是说,github 根据我提交的私钥的信息,运算后找到了我的公钥,然后再从公钥关联的账户信息里得到用户名?

(以我蠢笨的想法,总是以为:他要知道我的用户名,然后从我的用户配置里得到公钥,然后和私钥提交的信息进行验算)
NauxLiu
2023-10-24 01:26:02 +08:00
@hiwenvv #9 有个东西叫做 [Public Key Fingerprint]( https://en.wikipedia.org/wiki/Public_key_fingerprint)
baobao1270
2023-10-24 01:35:41 +08:00
@hiwenvv GitHub 不知道你的私钥……你的私钥总是留在本地的
他们数据库里有 username <-> ssh public key 的双向映射,而在 ssh 登录的时候,会自动发送公钥,所以 lookup 一下就行了
leoleoasd
2023-10-24 01:49:10 +08:00
@hiwenvv 对的,这么理解没问题
github 根据你 ssh 客户端提供的私钥相关信息(对应的公钥的指纹)找到公钥
比如,你可以尝试命令行里 ssh -v git@github.com 会看到这样两行:

debug1: Offering public key: 指纹
debug1: Server accepts key: 指纹

所以就是,客户端把公钥指纹给了服务器,服务器找到了对应的公钥,用公钥加密了一个随机字符串发给客户端并要求客户端解密
msg7086
2023-10-24 02:29:15 +08:00
SSH 的时候客户端给服务器发送公钥指纹,服务器可以通过公钥指纹找到对应的账户。
普通的 SSH 登录因为多个用户可以共享一个公钥指纹,所以需要你手动提供用户名才知道你连的是哪个。
QHKZ
2023-10-24 08:12:39 +08:00
git 是 GitHub 机器上的用户,和 root 是一个意义
myname 是你自己向 MS SQL 数据库添加的一行数据,甚至连数据库用户都算不上
hiwenvv
2023-10-24 08:57:58 +08:00
@leoleoasd 完全理解了,谢谢。

“客户端把公钥指纹给了服务器,服务器找到了对应的公钥,用公钥加密了一个随机字符串发给客户端并要求客户端解密。”

也谢谢其他各位的解答。

感慨的是,一代代人总是被时代淘汰,我们可能会为老人不会用遥控器而着急上火,但是我自己也是不能理解 SSH 通信这很简单的过程。(对整个 github 的 key 库进行对比寻找,违背了我的陈旧认知)
julyclyde
2023-10-24 15:44:57 +08:00
多个用户不能用相同的 public key
所以你就明白了吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/984705

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX