SSH の know_hosts を最新の状態 (半安全に) に保つにはどうすればよいですか?

SSH の know_hosts を最新の状態 (半安全に) に保つにはどうすればよいですか?

これをやらないように言われないように、先に言っておきます。

  1. 問題となっているマシンはすべてローカル ネットワーク上にあり、インターネット アクセスはほとんどまたはまったくありません (企業ネットワークにも適切に接続されていません)
  2. 中間者攻撃を仕掛ける能力を持つ人は、すでにマシンのルート権限を持っている。
  3. マシンは QA 手順の一環として再インストールされるため、新しいホスト キーを持つことが重要です (他のマシンの反応を確認する必要があります)。私は自分のマシンを使いやすくすることだけを考えています。

私はホスト キーを変更するマシンの再インストールを頻繁に行います。そのためには~/.ssh/known_hosts、マシンにアクセスして古いキーを削除し、新しいキーを追加する必要があります。これは非常に面倒なので、これを自動化する方法を検討し始めました。

ホスト キーを盲目的に受け入れるのは望ましくないので、OpenSSH にパッチを適用してホスト キーを無視することは考えられません。sshから返されるエラーを検出しssh、古いキーを削除するか終了するかのプロンプトを表示するコマンドのラッパーを作成することを検討しました。また、ホワイトリストにあるマシン (常に再インストールされているマシンが約 20 台あります) から最新のホスト キーを取得し、 の古いホスト キーを置き換えるデーモンを作成することも検討しましたknown_hosts

このプロセスをどのように自動化しますか?

答え1

再インストール/IP が同じままである理由に応じて、特定のホスト/IP/パターンに対して ~/.ssh/config で「StrictHostKeyChecking」を設定することを検討します。

それが不可能な場合は、再インストール プロセスなどで、ホスト上のキーの読み込みを自動化することを検討してください。

答え2

Puppet などの構成管理システムを使用している場合は、クライアント マシンが中央サーバーにチェックインするときに、ホストでファイルを更新し続けるようにすることができます/etc/ssh/ssh_known_hosts。その後、構成ファイルでオプションを有効にできますStrictHostKeyChecking

これはまさに、Puppet マスター サーバーにチェックインする Amazon EC2 インスタンスで行っていることです。Puppet サーバーを EC2 インスタンスへの要塞ジャンプボックスとして機能させ、SSH で EC2 インスタンスにアクセスできる唯一のマシンにします。次に、/etc/ssh/ssh_known_hostsホスト キーでファイルを更新し、/etc/hostsEC2 のパブリック DNS IP アドレスを更新するファイルを使用します。

答え3

必要なのはssh-keyscan、opensshで配布されている です。マニュアルページ:

 ssh-keyscan is a utility for gathering the public ssh host keys of a num‐
 ber of hosts.  It was designed to aid in building and verifying
 ssh_known_hosts files. 

再インストールの一環として、最新のキー リストを持つマシンでこれを実行し、更新された known_hosts ファイルを残りのマシンに配布します。

または、他の人が言及しているように、StrictHostKeyChecking をオフにすることもできます。これにより、中間者攻撃を受ける可能性が高くなりますが、お使いの環境では心配する必要がないかもしれません。

答え4

再インストールする前にホスト キーを保存し、後で復元することもできます。

あるいは、次のような構成管理ツールを使用することもできます。CFエンジンまたは傀儡/etc/ssh/ssh_known_hostsサイト上のすべてのクライアントに権威ある を配布します。(/etc/ssh/ssh_known_hostsに一致するエントリがない場合、 OpenSSH は参照します~/.ssh/known_hosts。)

関連情報