web-dev-qa-db-ja.com

ssh接続でのsshキータイプ間の優先順位は何ですか?

サーバーに接続するsshツールを開発しているときに、次のことを確認しました。

Windows(plink付き)では、ssh-ed25519サーバーキータイプを使用してハンドシェイクを行い、指紋を確認します。一方、Ubuntuではsshコマンドの後にECDSAサーバーキータイプを使用します。

ウィンドウズ:

The server's ssh-ed25519 key fingerprint is:
ssh-ed25519 255 xx:0e:84:ce:ca:ac:2f:e0:e8:f2:0a:fb:0e:a0:xx:xx

Ubuntu:

ECDSA key fingerprint is MD5:xx:69:68:81:bd:9b:a0:6d:23:31:91:1d:be:71:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes

サーバーの/ etc/sshには複数のsshキータイプが含まれています。たとえば、sshd_configのHostKey /etc/ssh/ssh_Host_ecdsa_keyのコメントを外すことで、具象タイプを強制的に使用できることを知っています。しかし、私の質問は; WindowsがデフォルトでUbuntuとは異なるものを使用するのはなぜですか? plink/opensshのクライアント構成によるものですか、それともサーバー側によるものですか?

1
Roger Coll

PuTTYクライアントは、接続→SSH→ホストキー設定項目で定義された順序を使用します。デフォルトでは次の順序になります。

Ed25519
Ed448
ECDSA
RSA
DSA

単一の「ECDSA」アイテムは、すべてのecdsa-sha2-nistp*アルゴリズムをカバーします。内部の順序は完全にはわかりませんが、サーバーは通常、複数のバリアントを提供することはないため、重要ではありません。

OpenSSH sshクライアントは、HostKeyAlgorithmsで定義された順序を使用します。デフォルトは、おおよそ次のとおりです。

ecdsa-sha2-nistp256,
ecdsa-sha2-nistp384,
ecdsa-sha2-nistp521,
ssh-ed25519,
rsa-sha2-512,
rsa-sha2-256,
ssh-rsa

(わかりやすくするために、すべての-certおよび-skアルゴリズムを削除しました。誰も使用しませんが、グローバルな順序は同じです。リスト全体は、ソースツリーのmyproposal.hでKEX_DEFAULT_PK_ALGとして定義されています。 rsa-sha2が追加され、ssh-dssが削除されましたが、Ed25519サポートが最初に追加された2013年以降、順序は実際には変更されていません。)

1
user1686

ホストキータイプを含むSSH接続に関連するすべてのアルゴリズムは、同じプロセスによって選択されます。

  • まず、サーバーとクライアントは、サポートするアルゴリズムのリストを交換します
  • そして、一方の当事者(この場合はクライアント)は、一般的にサポートされているアルゴリズムから、好みのアルゴリズムを選択します。

PuTTYはEd25519を好みます。 OpenSSHはECDSAを優先します。どちらの優先ホストキータイプの順序でも構成可能です。

1
Martin Prikryl