ssh 服务器如何知道哪个公钥与 ssh 私钥匹配?

Jef*_*ian 1 git ssh ssh-keys

服务器的authorized_keys 包含数万个密钥,服务器如何知道哪个公钥匹配当前用户的私钥?

例如,通常用户名总是git,服务器如何知道当前用户的身份?

在此处输入图片说明

详细问题:

  • 当我使用 ssh 提取代码时git pull,服务器如何知道git pull来自哪个用户?

  • 然后服务器如何获取与用户关联的公钥?

Von*_*onC 5

因为公钥是注册到GitHub用户账号设置的

https://github-images.s3.amazonaws.com/github-ae/assets/images/help/settings/ssh-key-paste.png

通常,这种存储库托管服务将~git/.ssh/authorized_keys使用SSH 强制命令填充它:

command="/path/to/script userID",\
 no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty \
 ssh-rsa <yourPublicKey>
Run Code Online (Sandbox Code Playgroud)

代替:

 ssh-rsa <yourPublicKey>
Run Code Online (Sandbox Code Playgroud)

它使用与您的公钥关联的用户 ID 调用脚本。

这就是 GitHubgit@github.com与您的帐户关联的方式。
在您的帐户中注册公钥会修改~git/.ssh/authorized_keys命令和用户 ID,而不仅仅是公钥。

  • 当我使用 ssh 提取代码时git pull,服务器如何知道git pull来自哪个用户?
  • 然后服务器如何获取与用户关联的公钥?

实际上,GitHub 在您和 GitHub 之间的 SSH 交易中获取您的公钥:然后它从其获取您的用户 ID ~git/.ssh/authorized_keys

最后,它会检查该用户是否有权从远程存储库克隆/获取/拉取(例如,这可能是私有的,在这种情况下,用户最好是该存储库的所有者或已声明的合作者)。