サーバーに接続する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のクライアント構成によるものですか、それともサーバー側によるものですか?
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年以降、順序は実際には変更されていません。)
ホストキータイプを含むSSH接続に関連するすべてのアルゴリズムは、同じプロセスによって選択されます。
PuTTYはEd25519を好みます。 OpenSSHはECDSAを優先します。どちらの優先ホストキータイプの順序でも構成可能です。