最近、クライアント(CI)がリモートのホストキーを拒否したため、CIサーバーの展開で問題が発生しています(known_hosts
にあるにもかかわらず)。 SSHが展開プラグインと互換性がないように見える形式でホストキーを保存していることに気づいたときまで、私は困惑していました。参考までに、互換性のある形式(私のパーソナルマシンにはまだ存在します)は次のようになります。
11.22.33.44 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCkVf7rhfC7nLxbeIQRj2bWitUC+XLSAeQ0ap8r8rKObDXYfPdB97NZth9JCEt3OrBXuBeg4PaAEuPu2QF7WXoT60hgAP6etr0W4LqcH59yd/X0ogFP7Y7hIf6dz1txDKaW92wgUi5XShwH6vukf0gLvW6/ak1LTBuoy72gaoUvxZge4KZivz9XqvSQHNOG9KYNfh8U6cRM8YTQo5in7YD5d6REV/FUmXpvBzCa9kbVRSlQFGYEc1HidTnPnJDteas3A9y3na385O7WN64aAkg7TO8IFXKdDHSwji9ZyrCVPA5GEuyLKhDFanV8iJ7CNflHMP8TwG5FOT2bSkV0lPyl
新しいホストキーを受け入れるときにSSHが現在保存している形式は次のようになります。
11.22.33.44 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEJJEs165NgdEcD94Xg3ySFA/qgkfytxNCX1X3pB2SPgU/mHLGXCXM8+VqMBXocM8OMOq2L0fDGr5mI+nGqjhNU=
(注:公開鍵を少し変更してみましたが、元の形式ではまだ互いに似ていません。)
最初の形式のみが展開プラグインと互換性がありますが、2番目の形式は無条件に無視されます。誰でもこの矛盾を説明できますか?
これらはknown_hosts
の異なる形式ではなく、異なるキータイプです(ssh-rsa
およびecdsa-sha2-nistp256
-sshd
のマニュアルページで詳細に説明されています)。サーバーは通常、異なるクライアントとのより広い互換性を提供するために、異なるタイプのより多くのホストキーを持っています。
サーバー上にいる場合は、すべてのホストキーを検索してそれらの公開キーを印刷できますが、行は次の形式とは異なります。
$ cat /etc/ssh/ssh_Host_*.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEJJEs165NgdEcD94Xg3ySFA/qgkfytxNCX1X3pB2SPgU/mHLGXCXM8+VqMBXocM8OMOq2L0fDGr5mI+nGqjhNU= user@Host
known_hosts
ファイルが受け入れる形式は、(サーバーからキーの信頼性を実現するために)を使用して取得できます。
$ ssh-keyscan 11.22.33.44
11.22.33.44 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEJJEs165NgdEcD94Xg3ySFA/qgkfytxNCX1X3pB2SPgU/mHLGXCXM8+VqMBXocM8OMOq2L0fDGr5mI+nGqjhNU=
#[...]
これは、クライアントに直接保存できる形式known_hosts
を出力します。
全体像(マニュアルページから):
これらのファイルの各行には、マーカー(オプション)、ホスト名、ビット、指数、係数、コメントのフィールドが含まれています。フィールドはスペースで区切られます。
(生成されたものと一致しないように見えますが、ホスト名、キータイプ、キーデータ(base64))-質問では重要ではないため、後で確認します