
我在尝试配置 SSH 访问 Github 。我执行了下面的操作:
1 、使用 ssh-keygen 生成一对密钥。
2 、将 公钥传到 Github 上。
3 、windows 启动 ssh-agent ,使用 ssh-add 添加私钥。
操作说明告诉我:ssh -T
我没有输入我的用户名,Github 是如何得到我的用户名的?
(我以为应当使用 ssh -T [email protected] ,然而并不是)
1 duduke 2023-10-24 00:37:57 +08:00 via iPhone 非对称加密和用户名有啥关系 |
2 Cu635 2023-10-24 00:38:47 +08:00 ssh 鉴权的时候是看私钥和公钥能否对应,而公钥不是通过“传到 Github 上”跟用户名关联起来了么…… |
3 leoleoasd 2023-10-24 00:42:45 +08:00 SSH 鉴权仅通过 public key 与 private key ;但是服务器端可以知道你用的具体哪个 key ,通过 key 来反查你的 github username 比如你可以试一试 同一个 public key 加到两个 github 账户里,第二个应该会不让你加 |
4 leoleoasd 2023-10-24 00:43:17 +08:00 SSH 鉴权通过 ssh 的 public key ; git 操作鉴权(如 private repo )等是通过你的 key 反查你的 github username 的 |
5 nkloveni 2023-10-24 00:44:05 +08:00 |
6 nkloveni 2023-10-24 00:45:56 +08:00 @nkloveni 重点看这个,是 SSH 认证提供的能力,认证的时候 ssh 客户端会把自己对应的公钥发给服务端,这样服务端可以直接查表了 |
7 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 |
8 nyxsonsleep 2023-10-24 00:56:53 +08:00 是指没设参数自动获取计算机用户名的相关信息吧。 |
9 hiwenvv OP @leoleoasd 那么是说,github 根据我提交的私钥的信息,运算后找到了我的公钥,然后再从公钥关联的账户信息里得到用户名? (以我蠢笨的想法,总是以为:他要知道我的用户名,然后从我的用户配置里得到公钥,然后和私钥提交的信息进行验算) |
10 NauxLiu 2023-10-24 01:26:02 +08:00 @hiwenvv #9 有个东西叫做 [Public Key Fingerprint]( https://en.wikipedia.org/wiki/Public_key_fingerprint) |
11 baobao1270 2023-10-24 01:35:41 +08:00 @hiwenvv GitHub 不知道你的私钥……你的私钥总是留在本地的 他们数据库里有 username <-> ssh public key 的双向映射,而在 ssh 登录的时候,会自动发送公钥,所以 lookup 一下就行了 |
12 leoleoasd 2023-10-24 01:49:10 +08:00 @hiwenvv 对的,这么理解没问题 github 根据你 ssh 客户端提供的私钥相关信息(对应的公钥的指纹)找到公钥 比如,你可以尝试命令行里 ssh -v [email protected] 会看到这样两行: debug1: Offering public key: 指纹 debug1: Server accepts key: 指纹 所以就是,客户端把公钥指纹给了服务器,服务器找到了对应的公钥,用公钥加密了一个随机字符串发给客户端并要求客户端解密 |
13 msg7086 2023-10-24 02:29:15 +08:00 SSH 的时候客户端给服务器发送公钥指纹,服务器可以通过公钥指纹找到对应的账户。 普通的 SSH 登录因为多个用户可以共享一个公钥指纹,所以需要你手动提供用户名才知道你连的是哪个。 |
14 QHKZ 2023-10-24 08:12:39 +08:00 via iPhone git 是 GitHub 机器上的用户,和 root 是一个意义 myname 是你自己向 MS SQL 数据库添加的一行数据,甚至连数据库用户都算不上 |
15 hiwenvv OP @leoleoasd 完全理解了,谢谢。 “客户端把公钥指纹给了服务器,服务器找到了对应的公钥,用公钥加密了一个随机字符串发给客户端并要求客户端解密。” 也谢谢其他各位的解答。 感慨的是,一代代人总是被时代淘汰,我们可能会为老人不会用遥控器而着急上火,但是我自己也是不能理解 SSH 通信这很简单的过程。(对整个 github 的 key 库进行对比寻找,违背了我的陈旧认知) |
16 julyclyde 2023-10-24 15:44:57 +08:00 多个用户不能用相同的 public key 所以你就明白了吧 |