Javaで自動SFTPクライアントを作成しています。もちろん、サーバーごとにサーバーのSSHフィンガープリントを保存する必要がありますが、サーバーに2つ以上の一意のフィンガープリントがある可能性はありますか?
ロードバランサーの背後に複数のSSHサーバーがあり、それぞれに固有のフィンガープリントがあるロードバランシングされたSFTPサービスがある可能性はありますか?それとも、それらがすべて同じ指紋を使用していることをどういうわけか強制されていますか?
はいといいえ。
単一のサーバーが代替アルゴリズム用に複数のホストキーを持つことは可能ですが(実際にはほとんどサーバーはRSA + EdDSAなどをサポートします)、接続ごとに1つのホストキーのみが選択され、クライアントの場合はそれで十分です。 1つだけ覚えておく。
負荷分散されたサービスの場合、すべてのノードが同じキーを共有するforceという魔法のメカニズムはありません。ただし、実際には、システム管理者がすべてのノードに同じキーペアをコピーするだけで、ユーザーが接続しやすくなる可能性が非常に高くなります。
さらに詳細に:
まず、singleサーバーでさえ、常に異なるアルゴリズムの複数のホストキーを持つことができます。たとえば、1つのssh-rsaキー、1つのssh-ed25519キー、および1つのecdsa-nistp256キーです。
ハンドシェイクでは、クライアントが1つのキーを選択する必要があり、通常、記憶されるのはその1つのキーの指紋だけです。ただし、一部のクライアント–例: PuTTY –アルゴリズムの移行をサポートするために、使用可能なすべてのホストキーとの接続のキーを再生成できるようにします。
たとえば、サーバーのssh-rsaキーを使用して接続しますが、さらにそのssh-ed25519フィンガープリントを覚えておいてください。後で、サーバーがssh-rsaサポートを無効にした場合、ユーザーに再度プロンプトを表示せずにssh-ed25519を使用できるようになりました。
負荷分散されたサービスに接続する場合、一部のクライアントでは、複数の既知のホストキー同じタイプであってもを手動で承認できます。
たとえば、同じホスト名が複数のノードで共有されている場合、OpenSSHクライアントでは、すべての公開鍵を手動で〜/ .ssh/unknown_hostsに追加し、一致するすべてのエントリを受け入れることができます。
ただし、OpenSSHはこれを行いません自動的に –最初のキーを認識すると、変更を致命的なエラーとして扱います。したがって、実際には、システム管理者は実際にはユーザーエクスペリエンスの低下を回避し、すべての負荷分散ノードに同じホストキーを複製しようとしていると思います。
既存のクライアントの概要: