web-dev-qa-db-ja.com

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

私は定期的にデュアルブートOS X/LinuxコンピューターであるコンピューターにSSHで接続します。 2つのOSインスタンスは同じホストキーを共有しないため、同じIPとDNSを共有する2つのホストと見なすことができます。 IPが192.168.0.9で、名前がhostnamehostname.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ファイルを編集する簡単な方法はありますか?たとえば、特定のホストに対応する行を見つけるにはどうすればよいですか?一部の既知のホストのハッシュを生成するにはどうすればよいですか?

理想的なソリューションでは、192.168.0.9hostnamehostname.domainnameと名付けても、LinuxホストキーやOSXホストキー。ただし、実際の中間者攻撃がある場合でも警告を受けたいi.e。これら2つ以外のキーが使用されている場合。

34

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

14
jjlin

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

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

PuTTYに同じことをさせる方法を誰かが知っているなら、私はそれについて聞いて非常に興味があります。

26
DaCheetah

私はあなたが達成したいことであなたを助けるかもしれないこれを見つけました。

ソース: 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から)

CheckHostIP

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

HostKeyAlias

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

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

% ssh server1
% ssh server2
13
Rhyuk

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

それはあなたのための回避策ですか?

2
Pyheme

問題を解決する最も簡単な方法は、各ホストに独自の/個別のIPアドレスを与えることです。 (プライベート)ネットとIPv4で253のアドレスを使用できるので、大したことはないはずです。それらに固定IPを与えます(DHCPサーバーはネットワークカードのMACアドレスに基づいてマシンを識別し、両方が同じアドレスを取得するため)。セキュリティ対策を維持したい場合は、他の解決策はありません(その小さな "快適さ"のために落とさないでください)。

2
Izzy

厳密なホストキーチェックを維持したいので、別のknown_hostsファイルを使用させます。これを行うには、次のように~/.ssh/configファイル(または、複数のローカルユーザーアカウントで作業する必要がある場合は/etc/ssh/ssh_configファイル)を設定します。

Host myserver.osx
  UserKnownHostsFile ~/.ssh/known_hosts.dual.osx
  # default is ~/.ssh/known_hosts
  Hostname $REALHOSTNAME

Host myserver.linux
  UserKnownHostsFile ~/.ssh/known_hosts.dual.linux
  Hostname $REALHOSTNAME

もちろん、$REALHOSTNAMEを実際のホスト名またはIPアドレスに置き換えます。 (「ホスト名」の後にIPアドレスに解決されるものを選択する限り、どちらを選択してもかまいませんが、私は一般的な原則に基づいて、IPアドレスではなくホスト名を使用します。)

したがって、ssh myserver.linuxssh myserver.osxは異なるホストキーを持つことができますが、チェックは行われます。起動しているのがLinuxで、OS X(またはその逆)と入力すると、警告が表示されます(これは望ましい効果だと思います)。

この問題が発生した場合は、メインのknown_hostsファイルに、どちらにも一致しない何か完全に問題があることを確認します。そのため、$REALHOSTNAMEではなくmyserver.osxと入力すると、警告が表示されます。 :-)私はそのようなものを置くことによってそれをするでしょう

<ip-address-of-github.com> $REALHOSTNAME

私の/etc/hostsで、次にssh $REALHOSTNAMEを実行して新しいキーを受け入れ、そのエントリを取り出します。

1
Jim

別の記事 。問題を処理するいくつかの方法を説明します。

2番目の方法では、StrictHostKeyCheckinUserKnownHostsFileの2つのopenSSHパラメータを使用します。この方法では、SSHをだまして、空のknown_hostsファイルを使用し、リモートホストのIDキーの確認を求めないように設定します。

1
afk