SSH(SFTP)服务器可以有多个指纹吗?

SSH(SFTP)服务器可以有多个指纹吗?

我正在用 Java 创建自动 SFTP 客户端,当然我需要为每个服务器保存服务器 SSH 指纹,但服务器是否可能有两个或更多唯一的指纹?

是否有可能存在负载平衡的 SFTP 服务,该服务在负载平衡器后面有多个 SSH 服务器,并且每个服务器都有唯一的指纹?还是以某种方式强制它们都使用相同的指纹?

答案1

是也不是。

单个服务器可以有多个用于替代算法的主机密钥(事实上最多服务器支持例如 RSA + EdDSA),但每个连接只选择一个主机密钥,对于客户端来说,只需记住一个就足够了。

对于负载平衡服务来说,没有什么神奇的机制可以力量所有节点共享同一个密钥。但在实践中,系统管理员很可能只是在所有节点之间复制相同的密钥对,以方便用户连接。


更详细地:

  • 首先,即使是单身的服务器始终可以拥有具有不同算法的多个主机密钥 - 例如:一个 ssh-rsa 密钥、一个 ssh-ed25519 密钥和一个 ecdsa-nistp256 密钥。

    握手需要客户端选择一个密钥,通常只会记住一个密钥的指纹。但是,一些客户端(例如 PuTTY)允许使用所有可用的主机密钥重新设置连接密钥,以支持算法迁移。

    例如,您使用服务器的 ssh-rsa 密钥进行连接,但还要记住其 ssh-ed25519 指纹。稍后,如果服务器禁用 ssh-rsa 支持,您现在可以使用 ssh-ed25519,而无需重新提示用户。

  • 当连接到负载平衡服务时,一些客户端将允许多个已知主机密钥即使是同一类型需要手动批准。

    例如,如果多个节点共享相同的主机名,则 OpenSSH 客户端允许您手动将其所有公钥添加到 ~/.ssh/known_hosts 并接受任何匹配的条目。

    然而,OpenSSH 不会这样做自动地– 一旦知道第一个密钥,它就会将任何更改视为致命错误。因此在实践中,我认为系统管理员实际上会尝试避免糟糕的用户体验,并将相同的主机密钥克隆到所有负载平衡节点。

现有客户概况:

  • PuTTY 可以跟踪每个服务器的多个密钥,但每个算法只能跟踪一个密钥。换句话说,它要求 [主机名、端口、算法] 组合是唯一的。
  • OpenSSH 可以在每个服务器上跟踪多个密钥,而不需要任何唯一性要求。
  • <其他客户?>

相关内容