複数のホストが同じ IP と DNS 名を共有している場合、known_hosts を編集するにはどうすればよいですか?

複数のホストが同じ IP と DNS 名を共有している場合、known_hosts を編集するにはどうすればよいですか?

私は定期的にデュアルブートのOS X / LinuxコンピュータにSSHで接続しています。2つのOSインスタンスは同じホストキーを共有していないため、同じIPとDNSを共有する2つのホストとして見ることができます。IPが で192.168.0.9、名前がhostnameと であるとします。hostname.domainname

私が理解している限りでは、2 つのホストに接続できるようにするには、両方のホストをファイルに追加することです。ただし、ファイルはハッシュ化されており、ホストごとに複数のエントリ ( 、、 )~/.ssh/know_hostsがあるため、言うほど簡単ではありません。その結果、次の警告が表示されます。192.168.0.9hostnamehostname.domainname

Warning: the ECDSA host key for 'hostname' differs from the key for the IP address '192.168.0.9'

ハッシュを保持したままファイルを編集する簡単な方法はありますかknown_hosts。たとえば、特定のホスト名に対応する行を見つけるにはどうすればよいでしょうか。既知のホストのハッシュを生成するにはどうすればよいでしょうか。

理想的な解決策は、このコンピュータにsshでシームレスに接続できるようにすることです192.168.0.9hostnamehostname.domainnameLinux ホストキーや OSX ホストキーを使用するかどうかに関係なく、このコンピューターに ssh でシームレスに接続できるようにすることです。ただし、実際の中間者攻撃があった場合は警告を受け取りたいので、つまりこれら 2 つのキー以外のキーが使用されている場合。

答え1

ここでの最も簡単な解決策は、Linux と OS X に同じホスト キーを使用することです。つまり、1 セットの/etc/ssh/ssh_host_*_key*ファイルを選択して、それを他の OS にコピーします。すると、どの OS を起動したかに関係なく、同じホスト キーが SSH クライアントに提示され、SSH クライアントは何も認識しなくなります。

答え2

@Izzy が上記のコメントで示唆したように、ssh は問題のある行を通知し、その行を削除して (別の場所に保存)、新しいキーを受け入れ、削除した行をコピーして戻すと、同じホストに対して 2 つのキーが作成され、ssh はどちらでも受け入れます。

ssh-keygen -H -F <hostname>( known_hosts ファイル内でそのホスト名に一致する行を見つけるためにも使用できます。削除した行をコピーしてからこれを実行すると、2 つのエントリがリストされます。)

もし誰かが PuTTY で同じことを実行する方法を知っているなら、ぜひ教えてください。

答え3

あなたが達成したいことに役立つかもしれないこれを見つけました。

ソース:https://stackoverflow.com/questions/733753/how-to-handle-ssh-host-key-verification-with-2-different-hosts-on-the-same-but

次のように、.ssh ディレクトリに設定ファイルを作成します。

Host server1
  Hostname x1.example.com
  HostKeyAlias server1
  CheckHostIP no
  Port 22001
  User karl

Host server2
  Hostname x2.example.com
  HostKeyAlias server2
  CheckHostIP no
  Port 22002
  User karl

説明は以下(man ssh_config より)

チェックホストIP

このフラグが「yes」に設定されている場合、ssh(1) は known_hosts ファイル内のホスト IP アドレスもチェックします。これにより、ssh は DNS スプーフィングによりホスト キーが変更されたかどうかを検出できます。オプションが「no」に設定されている場合、チェックは実行されません。デフォルトは「yes」です。

ホストキーエイリアス

ホスト キー データベース ファイルでホスト キーを検索または保存するときに、実際のホスト名の代わりに使用するエイリアスを指定します。このオプションは、SSH 接続をトンネリングする場合や、単一のホストで複数のサーバーを実行する場合に便利です。

ユーザー名とポートの行により、コマンド ラインでこれらのオプションを指定する必要がなくなるため、次のように使用できます。

% ssh server1
% ssh server2

答え4

同じ IP を共有するさまざまな VPS ボックスに接続するときは、それぞれ異なる SSH ポート (20022、30022 など) があり、異なるキーを持つ既知のホストとして登録されるため、この問題は発生しません。

それはあなたにとって回避策になるでしょうか?

関連情報