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