web-dev-qa-db-ja.com

インターネット上のSSHの公開鍵は、LAN上のSSHの鍵とは異なります

私はRaspberry Piを持っていて、ラップトップが同じネットワークにあるときにSSH(ユーザーパスワードによる認証)を介してそれにアクセスできます。今、インターネット経由でアクセスしたいと思います。

私はすでにルーターをポートをRaspberry Piに転送するように設定し、fail2banをインストールして(うまくいけば)ブルートフォースによるパスワードの解読を実行不可能にしています。

奇妙なことに、LAN経由ではなくインターネット経由でPiにアクセスすると、別のキーが取得されます。

christoph@christoph-laptop-14-04:~$ ssh-keygen -H -F 192.168.1.92
# Host 192.168.1.92 found: line 9 type ECDSA
|1|Zz8zhCYwRu7jKa/bcUTnw/BzGmo=|m2E+0RwiVXcr8lAxbK/W13ZmZUA= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAgUNwcHmVBowUoKvi9iLtoKifh/9qKAj6BNfQsYzYuoXtlYEnTUVLn4XpMYJ9+TMwL23ZDnmJuz8noKK3rFrYg=
christoph@christoph-laptop-14-04:~$ ssh-keygen -H -F [my global IP]
# Host 185.5.10.87 found: line 10 type ECDSA
|1|kEE5HDC1uBkqDN3SpQ8yFvwdj0A=|iDaNuB2Y8d3kIFPqFoXjrERRJ/0= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAgUNwcHmVBowUoKvi9iLtoKifh/9qKAj6BNfQsYzYuoXtlYEnTUVLn4XpMYJ9+TMwL23ZDnmJuz8noKK3rFrYg=

最初以外はすべて同じです。では、なぜ初めが違うのでしょうか? IPアドレスはこれにエンコードされていますか?

私を混乱させるもう1つのことは、以前に別のキーがあったときに(キーが変更されたために接続できないことは明らかですが)、次のように表示されます。

ECDSA key fingerprint is ed:47:24:c6:4e:c1:ca:99:d9:77:59:8f:01:12:85:cd

私は私のラップトップの1つを介して理解することができます:

ssh-keygen -l -f /etc/ssh/ssh_Host_ecdsa_key.pub

同じフォーマットです。しかし、Piにsshして同じコマンドを実行すると、出力は次のようになります。

256 SHA256:Npy6IbI8vDd4V3iCOcIVEsF4j2bsf9vbWcsf1ti8izE root@christoph-pi (ECDSA)

ed:47:24:c6:4e:c1:ca:99:d9:77:59:8f:01:12:85:cdとは何の関係もないようです。

最初に、Npy6IbI8vDd4V3iCOcIVEsF4j2bsf9vbWcsf1ti8izEed:47:24:c6:4e:c1:ca:99:d9:77:59:8f:01:12:85:cdのBase 64エンコーディングであると思っていました。これは、各バイトがコロンで区切られたバイトから16進コーディングされているようですが、Npy6IbI8vDd4V3iCOcIVEsF4j2bsf9vbWcsf1ti8izEの長さは43は4の整数倍ではないため、base64ではありません。それは何ですか?

6
UTF-8

奇妙なことに、LAN経由ではなくインターネット経由でPiにアクセスすると、別のキーが取得されます。

sshdのマニュアルページでは、known_hostsファイルの形式について説明しています。

SSH_KNOWN_HOSTSファイル形式

これらのファイルの各行には、次のフィールドが含まれています:マーカー(オプション)、hostnames、[...]。フィールドはスペースで区切られます。

最初の答えを得ました。最初のフィールドはhostnameであり、質問で提案されているように、外部または内部から接続する場合は明らかに異なります。

さらに読むことができます

あるいは、ファイルの内容が開示された場合、ホスト名はホスト名とアドレスを隠すハッシュ形式で保存されることがあります。ハッシュ化されたホスト名は「|」文字で始まります。ハッシュ化されたホスト名は1行に1つしか表示されません[...]

はい、ホスト名/ IPアドレスはハッシュ化されています。


しかし、私が自分のPiにsshして同じコマンドを実行すると[...]

新しいバージョンでは、廃止されたMD5の代わりにSHA-256ハッシュを使用しています。次のコマンドを使用して、新しいバージョンで古いフィンガープリントを強制的に生成できます。

ssh-keygen -l -E md5 -f /etc/ssh/ssh_Host_ecdsa_key.pub

これら2つの形式間の変換は可能ですが、役に立ちません。上記で提案したようにssh-keygenを直接使用することをお勧めします。

次のように、known_hostsファイルに保存されている公開鍵から何らかの方法でフィンガープリントを生成できます。

ssh-keygen -l -f <( ssh-keygen -H -F 192.168.1.92 | tail -n 1 | cut -d" " -f 2,3)
2
Jakuje

ssh-keygen -H -F 192.168.1.92の出力の左側は、IPアドレスのハッシュです。 -Hオプションなしでコマンドを実行すると、次のような結果が得られます。

christoph@christoph-laptop-14-04:~$ ssh-keygen -F 192.168.1.92
# Host 192.168.1.92 found: line 9 type ECDSA
192.168.1.92 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAgUNwcHmVBowUoKvi9iLtoKifh/9qKAj6BNfQsYzYuoXtlYEnTUVLn4XpMYJ9+TMwL23ZDnmJuz8noKK3rFrYg=

左側にIPアドレスが表示されます。 -Hオプションを指定して実行すると、コマンドは代わりにIPアドレスのハッシュを表示します。これは、ホストごとに明らかに異なります。


Ssh-keygenの異なるバージョンを使用している場合、ssh-keygen -l -f /etc/ssh/ssh_Host_ecdsa_key.pubの出力フォーマットは異なる場合があります。

CentOSマシンはRaspberry Piと同じフォーマットを提供しますが、私のPiはラップトップと同じコロン区切りフォーマットを提供します。コマンドへの入力は異なる公開鍵であるため、実際の出力値は明らかに異なります。

1
garethTheRed