私は定期的にデュアルブートOS X/LinuxコンピューターであるコンピューターにSSHで接続します。 2つのOSインスタンスは同じホストキーを共有しないため、同じIPとDNSを共有する2つのホストと見なすことができます。 IPが192.168.0.9
で、名前がhostname
とhostname.domainname
であるとします。
私が理解している限り、2つのホストに接続するためのソリューションは、両方を~/.ssh/know_hosts
ファイルに追加することです。ただし、ファイルはハッシュ化されており、ホストごとに複数のエントリ(192.168.0.9
、hostname
、hostname.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.9
、hostname
、hostname.domainname
と名付けても、LinuxホストキーやOSXホストキー。ただし、実際の中間者攻撃がある場合でも警告を受けたいi.e。これら2つ以外のキーが使用されている場合。
ここで最も簡単な解決策は、LinuxとOS Xで同じホストキーを使用することです。つまり、/etc/ssh/ssh_Host_*_key*
ファイルのセットを1つ選択し、それらを他のOSにコピーします。次に、起動したOSに関係なく、同じHostキーがSSHクライアントに提示され、SSHクライアントはより賢くなりません。
上記のコメントで@Izzyが示唆したように、sshは問題のある行を通知し、その行を削除し(別の場所に保存)、新しいキーを受け入れ、削除された行をコピーして戻すと、同じものに対して2つのキーが必要になります。ホスト、およびsshはどちらも受け入れます。
(ssh-keygen -H -F <hostname>
を使用して、known_hostsファイルでそのホスト名と一致する行を見つけることもできます。削除した行をコピーしてからこれを実行すると、2つのエントリがリストされます。)
PuTTYに同じことをさせる方法を誰かが知っているなら、私はそれについて聞いて非常に興味があります。
私はあなたが達成したいことであなたを助けるかもしれないこれを見つけました。
次のように、.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
同じIPを共有するさまざまなVPSボックスに接続するときは、この問題に遭遇しません。それぞれに異なるSSHポート(20022、30022など)があり、既知のホストとして異なるキーで登録されているためです。
それはあなたのための回避策ですか?
問題を解決する最も簡単な方法は、各ホストに独自の/個別のIPアドレスを与えることです。 (プライベート)ネットとIPv4で253のアドレスを使用できるので、大したことはないはずです。それらに固定IPを与えます(DHCPサーバーはネットワークカードのMACアドレスに基づいてマシンを識別し、両方が同じアドレスを取得するため)。セキュリティ対策を維持したい場合は、他の解決策はありません(その小さな "快適さ"のために落とさないでください)。
厳密なホストキーチェックを維持したいので、別の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.linux
とssh myserver.osx
は異なるホストキーを持つことができますが、チェックは行われます。起動しているのがLinuxで、OS X(またはその逆)と入力すると、警告が表示されます(これは望ましい効果だと思います)。
この問題が発生した場合は、メインのknown_hosts
ファイルに、どちらにも一致しない何か完全に問題があることを確認します。そのため、$REALHOSTNAME
ではなくmyserver.osx
と入力すると、警告が表示されます。 :-)私はそのようなものを置くことによってそれをするでしょう
<ip-address-of-github.com> $REALHOSTNAME
私の/etc/hosts
で、次にssh $REALHOSTNAME
を実行して新しいキーを受け入れ、そのエントリを取り出します。
別の記事 。問題を処理するいくつかの方法を説明します。
2番目の方法では、
StrictHostKeyCheckin
とUserKnownHostsFile
の2つのopenSSHパラメータを使用します。この方法では、SSHをだまして、空のknown_hostsファイルを使用し、リモートホストのIDキーの確認を求めないように設定します。