You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSH如何从authorized_keys中选择对应公钥进行身份验证?

SSH公钥认证:服务器如何匹配authorized_keys中的对应公钥

SSH公钥认证的核心流程里,服务器并不会遍历所有公钥发起挑战,正确的机制是「客户端先主动提供公钥,服务器匹配后再发起挑战」,具体步骤如下:

  1. 客户端主动提交公钥
    客户端发起连接进入认证阶段时,会从本地私钥文件中提取对应的公钥(ssh-keygen生成的私钥文件确实包含公钥的关键信息,比如RSA的模数、公钥指数,所以即使没有单独的公钥文件,也能导出完整公钥),然后将这个公钥发送给服务器。
    若客户端有多个私钥,会按配置顺序依次发送对应的公钥,直到找到服务器认可的匹配项或全部尝试失败。

  2. 服务器匹配authorized_keys
    服务器收到客户端发送的公钥后,会遍历~/.ssh/authorized_keys文件,逐行对比是否有完全一致的公钥条目。一旦找到匹配项,就会使用该公钥生成加密挑战(比如生成随机数并用公钥加密),发送给客户端。

  3. 客户端解密挑战完成认证
    客户端收到挑战后,用对应的私钥解密,将解密结果返回给服务器。服务器验证结果正确后,就会通过公钥认证,允许客户端登录。

对两种猜想的补充说明

  • 关于「服务器遍历公钥发起挑战」:这种方式效率极低,尤其是authorized_keys中有大量公钥时,完全不符合SSH协议的设计逻辑,实际不会采用。
  • 关于「客户端生成公钥发送给服务器」:这个方向是正确的,但需要明确——客户端发送的是完整的公钥内容,服务器是通过直接匹配authorized_keys中的条目来确定使用哪一个公钥发起挑战,而不是仅靠公钥标识。

内容的提问来源于Stack Exchange,提问作者Itamar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:27:27