Known_hostsを置き換えるためにDNSでSSHフィンガープリントを設定できませんでした。

Known_hostsを置き換えるためにDNSでSSHフィンガープリントを設定できませんでした。

SSHFPレコードは、SSHサーバーで次のように作成され、バインドのゾーンに追加されます。

$ ssh-keygen -r www.test.us.
www.test.us. IN SSHFP 1 1 ad04dfaf343a93beeb939eed1612168f7eadbed7
www.test.us. IN SSHFP 2 1 432209c72c4f0e99546d601dd96c04ce804191f9

必要なレコードは、次のようにDNSを介してSSHクライアントから取得できます。

$ dig www.test.us any
;; QUESTION SECTION:
;www.test.us.           IN  ANY

;; ANSWER SECTION:
www.test.us.        120 IN  SSHFP   1 1 AD04DFAF343A93BEEB939EED1612168F7EADBED7
www.test.us.        120 IN  SSHFP   2 1 432209C72C4F0E99546D601DD96C04CE804191F9
www.test.us.        120 IN  A   192.168.1.50

ただし、クライアントのSSHは接続時にそれを見つけることができません。

$ rm .ssh/known_hosts
$ ssh -vo VerifyHostKeyDNS=yes www
OpenSSH_5.9p1, OpenSSL 0.9.8r 8 Feb 2011
debug1: Reading configuration data /Users/test/.ssh/config
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: /etc/ssh_config line 53: Applying options for *
debug1: Connecting to www [192.168.1.50] port 22.
debug1: Connection established.
debug1: identity file /Users/test/.ssh/id_rsa type 1
debug1: identity file /Users/test/.ssh/id_rsa-cert type -1
debug1: identity file /Users/test/.ssh/id_dsa type -1
debug1: identity file /Users/test/.ssh/id_dsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.8p2_hpn13v11
debug1: match: OpenSSH_5.8p2_hpn13v11 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.9
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA 69:dc:47:97:e1:a5:c9:07:4a:2b:9e:3c:a2:2b:c8:8c
DNS lookup error: name does not exist
The authenticity of host 'www (192.168.1.50)' can't be established.
RSA key fingerprint is 69:dc:47:97:e1:a5:c9:07:4a:2b:9e:3c:a2:2b:c8:8c.
No matching host key fingerprint found in DNS.
Are you sure you want to continue connecting (yes/no)?

なぜこれが失敗するのかというアイデアはありますか?セキュリティを維持するにはDNSSECが必要であることを知っており、現在はDNSSECが有効になっていないため、警告を受ける必要があります。まず、DNSSECなしでこれを実行してから、このトラブルシューティングを開始したいと思います。

SSHサーバーはOpenSSH_5.8p2_hpn13v11を含むFreeBSD 9.1で、BIND 9.8.3-P4を使用してDNSをホストします。 OpenSSH_5.9p1を使用してOS X 10.8.2で接続を試み、OpenSSH_6.1p1を使用してArch Linux 3.6.10-1-ARCHで接続しようとしました。

修正する

この問題を解決するために、SSHサーバーとしてOpenSSH_6.1を組み込んだ新しいOpenBSD 5.2 VMを設定しました。 OpenSSHサーバーの他のすべての実装はOpenBSDサーバーのポートにすぎないため、これは間違いなく機能します。サーバーからSSHFPレコードを生成します。

# ssh-keygen -r vm1.test.us.  
vm1.test.us. IN SSHFP 1 1 419c5338920e11183380d81f002fc998389b944f
vm1.test.us. IN SSHFP 1 2 cb5bbbf5aef231f57a1a4dcf1e790f1be032b124d0d591023f33cfd5f91ec556
vm1.test.us. IN SSHFP 2 1 0fdf92ce946b5cfee5f96a3e1ef710edc50280ff
vm1.test.us. IN SSHFP 2 2 f2ee7334ee9f9a426f51f20af8f4bc7155d567c9d38a6bffaa6c643af405711e
vm1.test.us. IN SSHFP 3 1 b5e94320f0bc0b46cc6627ca7221679a65c79962
vm1.test.us. IN SSHFP 3 2 60704213a0bbd8dae813d113bfe4ae190a780b89836e6e1c567b7cfde89805f8

FreeBSDバインディングサーバーに追加し、名前を再ロードしました。次に、レコードにアクセスできるかどうかをテストします。

$ host -t any vm1
vm1.test.us has SSHFP record 1 1 419C5338920E11183380D81F002FC998389B944F
vm1.test.us has SSHFP record 1 2 CB5BBBF5AEF231F57A1A4DCF1E790F1BE032B124D0D591023F33CFD5 F91EC556
vm1.test.us has SSHFP record 2 1 0FDF92CE946B5CFEE5F96A3E1EF710EDC50280FF
vm1.test.us has SSHFP record 2 2 F2EE7334EE9F9A426F51F20AF8F4BC7155D567C9D38A6BFFAA6C643A F405711E
vm1.test.us has SSHFP record 3 1 B5E94320F0BC0B46CC6627CA7221679A65C79962
vm1.test.us has SSHFP record 3 2 60704213A0BBD8DAE813D113BFE4AE190A780B89836E6E1C567B7CFD E89805F8
vm1.test.us has address 192.168.1.60


$ dig -t any vm1.test.us
;; QUESTION SECTION:
;vm1.test.us.           IN  ANY

;; ANSWER SECTION:
vm1.test.us.        120 IN  SSHFP   1 2 CB5BBBF5AEF231F57A1A4DCF1E790F1BE032B124D0D591023F33CFD5 F91EC556
vm1.test.us.        120 IN  SSHFP   2 1 0FDF92CE946B5CFEE5F96A3E1EF710EDC50280FF
vm1.test.us.        120 IN  SSHFP   2 2 F2EE7334EE9F9A426F51F20AF8F4BC7155D567C9D38A6BFFAA6C643A F405711E
vm1.test.us.        120 IN  SSHFP   3 1 B5E94320F0BC0B46CC6627CA7221679A65C79962
vm1.test.us.        120 IN  SSHFP   3 2 60704213A0BBD8DAE813D113BFE4AE190A780B89836E6E1C567B7CFD E89805F8
vm1.test.us.        120 IN  SSHFP   1 1 419C5338920E11183380D81F002FC998389B944F
vm1.test.us.        120 IN  A   192.168.1.60

レコードは明らかにDNSを介して提供されるので、sshを使ってみました。

$ rm .ssh/known_hosts
$ ssh -vo VerifyHostKeyDNS=yes root@vm1
OpenSSH_5.9p1, OpenSSL 0.9.8r 8 Feb 2011
debug1: Reading configuration data /etc/ssh_config
debug1: Connecting to vm1 [192.168.1.60] port 22.
debug1: Connection established.
debug1: identity file /Users/test/.ssh/id_rsa type 1
debug1: identity file /Users/test/.ssh/id_rsa-cert type -1
debug1: identity file /Users/test/.ssh/id_dsa type -1
debug1: identity file /Users/test/.ssh/id_dsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.1
debug1: match: OpenSSH_6.1 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.9
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA d8:01:b5:b2:3e:c7:55:ce:19:c1:6d:77:39:92:7d:0f
DNS lookup error: name does not exist
The authenticity of host 'vm1 (192.168.1.60)' can't be established.
RSA key fingerprint is d8:01:b5:b2:3e:c7:55:ce:19:c1:6d:77:39:92:7d:0f.
No matching host key fingerprint found in DNS.
Are you sure you want to continue connecting (yes/no)? 

この時点では、障害点であるSSHクライアントとサーバーを削除するのが安全だと思います。代わりに、DNSサーバーに焦点を当てます。誰かがどこを見なければならないかを提案しない限り、パケットをキャプチャして手がかりを見つけるだけです。

アップデート2

さて、ここにパケットキャプチャがあります。 SSH wwwが標準を満たしていません。

No matching host key fingerprint found in DNS.

パケットキャプチャは、DNSがルックアップレコードを返すことができないことを示しています。

mbp13.test.us   www.test.us DNS Standard query 0x1c5e  SSHFP www
www.test.us   mbp13.test.us DNS Standard query response 0x1c5e No such name

SSH www.test.usと比較すると、メッセージで失敗します。

No matching host key fingerprint found in DNS.

ただし、パケット キャプチャは、DNS が実際にレコードを返していることを示しています。

mbp13.test.us   www.test.us DNS Standard query 0x0ebd  SSHFP www.test.us
www.test.us   mbp13.test.us DNS Standard query response 0x0ebd  SSHFP SSHFP`

まず、エラーメッセージはどちらの場合も同じであるため、少し混乱しています。レコードが返されないケース1を修正するためにいくつかのレコードを追加できますが、最大の問題はケース2です。 DNS が動作しており、SSHFP レコードが SSH クライアントに返されています。 DNS クエリ応答の後、パケットは送信されず、SSH クライアントは一致しない指紋メッセージをただちに表示します。これは、テスト中のすべてのSSHクライアントが破損しているか、DNSに保存されている指紋が正しくないため、一致しないことを意味します。クライアントの問題のようです。 DNSの指紋が間違っているのはなぜですか?指紋は、この記事の冒頭に記載されているように、組み込みのSSHツールであるssh-keygenから生成されます。また、指紋が状況によって異なる形式で表示されることは問題には役立ちません。同じ形式で表示されると、DNSに保存されているレコードが接続されているSSHサーバーから返されたキーフィンガープリントと異なることが簡単にわかります。

DNS record format:      ad04dfaf343a93beeb939eed1612168f7eadbed7
ssh client mesg format: 69:dc:47:97:e1:a5:c9:07:4a:2b:9e:3c:a2:2b:c8:8c

ssh-keygen -rの指紋出力が同じSSHサーバーから返された公開鍵と一致しない理由について提案がある人はいますか?

アップデート3

私には最後の選択肢が残りました。週末の前に誰かが正しい方向を教えていない限り、私は完全なOpenBSDベースの仮想マシンを使用して土曜日にレプリケーション環境を作成します。 OpenBSD は OpenSSH を所有しているので、これは DNS 経由の SSHFP の動作に最適です。 OpenBSD OpenSSHクライアントを提供するバインディングを持つOpenBSD OpenSSHサーバーが機能しない場合、SSHFPは実装で破損しています。コンテンツをOpenBSDフォーラムに移動し、バグレポートを送信することもできます。私はまだ私が何か明確なものを見逃していて、有用な答えが私の週末を節約できることを願っています。

ベストアンサー1

明らかに、私の問題は2つの異なる問題が原因で発生します。

質問1 SSHFP は検索パスの使用をサポートしていません。したがって、/etc/resolv.confに "domain example.com"を追加すると、通常のsshは名前をmyhost.example.comとして正しく解決し、ssh myhostがSSHFPと連携することを期待できます。明らかに、OpenBSD開発者は2年前にパッチがリリースされて以来、この問題を知っていましたが、適用したことはありませんでした。代わりにssh_config核を使用することをお勧めしますが、それも機能しないようです。したがって、最初の問題に対する解決策は、FQDNを常にSSHFPで使用する必要があることです。

質問#2 以前の問題を解決するためにFQDNを使用している場合は、OpenSSHクライアントの現在のバージョン(OpenSSH_6.1など)を使用すると、すべてがうまく機能します。私のFreeBSDシステムのOpenSSH_5.8p2クライアントは新しいOpenSSH_6.1サーバーのSSHFPレコードを見つけることができますが、DNSから受け取った指紋とサーバーから受け取った指紋を一致させることはできません。私のOS X 10.8.2システムのOpenSSH_5.9p1クライアントは、新しいOpenSSH_6.1サーバーのSSHFPレコードを取得することもできません。これは、FreeBSDシステムに存在しなかったクライアントバージョンであっても同様です。明らかに存在しないSSHFPレコードとOpenSSHサーバーから返されたフィンガープリントを一致させることはできません。最後に、FreeBSDシステムのssh-keygenはサーバーから返されたフィンガープリントと一致しないため、MITM攻撃に対して不平を言うOpenSSH_6.1クライアントに基づいて誤ったSSHFPレコードを生成します。解決策は、SSHFPが正しく機能するためには、現在のバージョンのOpenSSHクライアントとサーバーを実行する必要があるようです。以前のバージョンのクライアントまたはサーバーを使用すると、問題が発生する可能性があります。

最後の考え SSHFPとDNSの使用は、混在OS環境での使用には最先端であり、すべてが「動作」するには最先端です。これは、OpenBSD以外のオペレーティングシステムがOpenSSHポータブルバージョンを移植する必要があるためです。移植。おそらく3〜5年で、SSHFPは他のオペレーティングシステムに移植された以前のバージョンも安定しており、最新バージョンと互換性があるのに十分安定しています。

おすすめ記事