オフィスXからオフィスYのいくつかのLinuxボックスにSSH接続しようとしています。オフィスYのLinuxボックスはNATの背後にあり、それぞれが独自のポートで実行されています。すべてのポートに正常に到達できます。 SSH経由でそれらを使用しますが、認証できません。
最初のボックスにSSHで接続できましたが、2番目のボックスに到達すると、次のように表示されました。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE Host IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA Host key has just been changed.
The fingerprint for the RSA key sent by the remote Host is
[edited out fingerprint]
Please contact your system administrator.
Add correct Host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:1
私の理解では、そのパブリックIPアドレスから同じキーが表示されることを期待していますが、SSHサーバーが異なるため、別のキーが表示されています。
同じIPアドレスの背後にある各サーバーから異なるキーを作成/受け入れるように修正するにはどうすればよいですか?
ホスト名またはIPアドレスは、known_hosts
ファイルにハッシュとして(またはオプションとバージョンのデフォルトに応じてプレーンテキストで)保存されます。最も簡単な回避策は、各ホストのエントリをDNSまたは /etc/hosts
(ugh!)ファイルに/etc/hosts
のように同じIP(WAN)アドレスで追加することです。
your.wan.ip.address servera serverb
次に、ホスト名とポートでssh
を入力します。
これを修正する方法はいくつかあります。
この特定のホストのホストキーチェックを無効にすることができます。 ssh_config
ファイル(~/.ssh/config
)に、次のように記述します。
Host remote.Host.name
UserKnownHostsFile /dev/null
StrictHostkeyChecking no
これにより、ssh
がremote.Host.name
のホストキーを保存しないように構成されますが、欠点は、中間者攻撃にさらされる可能性があることです(盲目的に受け入れることができないホストキーを受け入れるため、リモートホストキーが変更されたかどうかを確認します)。
同様の手法を使用して、各ホストに一意のknown_hosts
ファイルを単に与えることができます。
Host hosta
Port 10098
Hostname remote.Host.name
UserKnownHostsFile ~/.ssh/known_hosts_hosta
Host hostb
Port 10099
Hostname remote.Host.name
UserKnownHostsFile ~/.ssh/known_hosts_hostb
次に、ssh hosta
またはssh hostb
を使用してこれらのホストに接続し、ssh
は構成ファイルから実際のホスト名とポートを取得します。
使用しているSolaris(およびより重要なことにはSSH)のバージョンは明らかにしていませんが、OpenSSHの十分に最新のバージョンがこの問題に対処しています。
これは私のknown_hosts
ファイルの2つのエントリで、IPアドレスは同じですがポート番号が異なります(1つは暗黙の22)。ご覧のとおり、保存されているキーは同じではありません。
[10.69.55.47]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAo+zenWwhFWAa/exdxbm3A3htDFGwFVjFlHLO83AfOaloBbBrr6whmLeDqVPBSwI/yrePClpahLUMYE6qGBFCbbOYiQkMDwacNFfxvxd6oCMDDqZH6NWGiBCt0b2M6YKYhYCw6z8n0yvlLk1eTdpp2OpjbfwAIe4eBkWyKNZY9+17VtzARqGR9tgHC8Dh7HBApDR8wooc+XzY6FhD2b21meIt8r8bjfBIu5t6eQgDHh/TzUT1rGH6W0HeUJxpDnpud5Af1ygMEQFrGrzHi5HKtg+K6HFBggMF8t6p2Dz8oMds5pi6IuPlVi3UvO1X7mMJ9pP7ByMQqiVrQ9wtAbC2QQ==
10.69.55.47 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1clJ6vp8NDy7D9YVgAKQQzERfx3scR0c0027yOYGGpeLg+nW+x8mJk1ia9GouUTDME+NP2YDVZUEDog9rtTJvuLd22ZxfoC8LGboyBsmlhOVxdSCxmA/+blPCp1pyocr8pXyXjSkb/qQKKQMRoAU7qKKHPfI5Vugj04l6WbW2rJQTqFD/Lguc8AAUOE6K4DNhETOH2gOnwq6xi0vutDmeUKSqEvM/PQFZSlOL4dFDYO5jAUjvgm6yGHP3LlS9fmCzayJgGgLSnNz0nlcd94Pa1Cd441cCAZHFDvDPniawEafH9ok4Mmew0UGopQGUGbfb5+8g8YphLW6aLdrvnZbAw==
OpenSSHのどのバージョンがこれを導入したのかわかりませんが、実行しています
[me@risby fin]$ ssh -V
OpenSSH_6.9p1, OpenSSL 1.0.1k-fips 8 Jan 2015
私のコメントを@larsksの回答に拡張するには、~/.ssh/config
エントリは、/ etc/hostsを変更するよりもはるかに優れていますが、既知のホストを異なるファイルに分割するのではなく、HostKeyAlias
を使用します。例えば:
Host hosta
Port 10098
Hostname remote.Host.name
HostKeyAlias hosta
同様にhostb