Git ssh服务器如何知道与ssh私钥匹配的公钥?

Git ssh服务器如何知道与ssh私钥匹配的公钥?,git,ssh,ssh-keys,Git,Ssh,Ssh Keys,服务器的授权密钥包含数以万计的密钥,服务器如何知道哪个公钥与当前用户的私钥匹配 例如,通常用户名总是git,服务器如何知道当前用户的身份 详细问题: 当我使用ssh通过git-pull提取代码时,服务器如何知道git-pull来自哪个用户 然后,服务器如何获取与用户关联的公钥 因为公钥已注册到 通常,这种存储库托管服务将使用来填充其~git/.ssh/authorized_密钥: command="/path/to/script userID",\ no-port

服务器的授权密钥包含数以万计的密钥,服务器如何知道哪个公钥与当前用户的私钥匹配

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

详细问题:
  • 当我使用ssh通过
    git-pull
    提取代码时,服务器如何知道
    git-pull
    来自哪个用户

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


因为公钥已注册到

通常,这种存储库托管服务将使用来填充其
~git/.ssh/authorized_密钥

command="/path/to/script userID",\
 no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty \
 ssh-rsa <yourPublicKey>
command=“/path/to/script userID”\
无端口转发、无X11转发、无代理转发、无pty\
ssh-rsa
而不是:

 ssh-rsa <yourPublicKey>
ssh-rsa
它使用与公钥关联的用户ID调用脚本

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

  • 当我使用ssh通过
    git-pull
    提取代码时,服务器如何知道
    git-pull
    来自哪个用户
  • 然后,服务器如何获取与用户关联的公钥
实际上,GitHub获取您的公钥作为您和GitHub之间SSH事务的一部分:然后它从其
~git/.SSH/authorized_keys


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

因为公钥已注册到

通常,这种存储库托管服务将使用来填充其
~git/.ssh/authorized_密钥

command="/path/to/script userID",\
 no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty \
 ssh-rsa <yourPublicKey>
command=“/path/to/script userID”\
无端口转发、无X11转发、无代理转发、无pty\
ssh-rsa
而不是:

 ssh-rsa <yourPublicKey>
ssh-rsa
它使用与公钥关联的用户ID调用脚本

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

  • 当我使用ssh通过
    git-pull
    提取代码时,服务器如何知道
    git-pull
    来自哪个用户
  • 然后,服务器如何获取与用户关联的公钥
实际上,GitHub获取您的公钥作为您和GitHub之间SSH事务的一部分:然后它从其
~git/.SSH/authorized_keys


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

简单的回答是,它没有。不过,这个答案并没有多大帮助

假设您是一个ssh服务器,刚刚收到一个用户名(此时总是
git
)和一个公钥

现在来看一下
~git/.ssh/authorized_keys
,这是一个很大的文件,文件中充满了由四个空格分隔的字段组成的行:

  • 选择权
  • 键型
  • base64编码密钥
  • 评论
(尽管选项部分可以省略)。这里的第一个重要部分是base64编码密钥:它由公钥和一些其他内容组成

现在让我们再看看你的问题:

服务器的授权密钥包含数以万计的密钥,服务器如何知道哪个公钥与当前用户的私钥匹配

没有。不需要。它现在有两个公钥在手;它只需要匹配两个公钥,这很容易,因为它们要么逐位匹配,要么不匹配。因此,在这一点上,它所要做的就是逐行扫描整个
授权密钥
文件,检查:这一行是否具有相同的公钥


当然,它还需要进一步验证:仅仅拥有公钥并不意味着你就是你所声称的那样。但这就足够了。在
authorized_keys
文件中找到正确的(或“a”)行后,如果您通过了其余的身份验证过程,sshd现在可以使用这些选项来确定您是谁。

简单的回答是,它没有通过。不过,这个答案并没有多大帮助

假设您是一个ssh服务器,刚刚收到一个用户名(此时总是
git
)和一个公钥

现在来看一下
~git/.ssh/authorized_keys
,这是一个很大的文件,文件中充满了由四个空格分隔的字段组成的行:

  • 选择权
  • 键型
  • base64编码密钥
  • 评论
(尽管选项部分可以省略)。这里的第一个重要部分是base64编码密钥:它由公钥和一些其他内容组成

现在让我们再看看你的问题:

服务器的授权密钥包含数以万计的密钥,服务器如何知道哪个公钥与当前用户的私钥匹配

没有。不需要。它现在有两个公钥在手;它只需要匹配两个公钥,这很容易,因为它们要么逐位匹配,要么不匹配。因此,在这一点上,它所要做的就是逐行扫描整个
授权密钥
文件,检查:这一行是否具有相同的公钥

当然,它必须进行身份验证