web-dev-qa-db-ja.com

同じパブリックIPアドレスでNATされたサーバーにSSH接続する

オフィス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アドレスの背後にある各サーバーから異なるキーを作成/受け入れるように修正するにはどうすればよいですか?

Enter image description here

16
Copy Run Start

ホスト名またはIPアドレスは、known_hostsファイルにハッシュとして(またはオプションとバージョンのデフォルトに応じてプレーンテキストで)保存されます。最も簡単な回避策は、各ホストのエントリをDNSまたは /etc/hosts (ugh!)ファイルに/etc/hostsのように同じIP(WAN)アドレスで追加することです。

your.wan.ip.address      servera serverb

次に、ホスト名とポートでsshを入力します。

15
Brandon Xavier

これを修正する方法はいくつかあります。

  1. この特定のホストのホストキーチェックを無効にすることができます。 ssh_configファイル(~/.ssh/config)に、次のように記述します。

    Host remote.Host.name
    UserKnownHostsFile /dev/null
    StrictHostkeyChecking no
    

    これにより、sshremote.Host.nameのホストキーを保存しないように構成されますが、欠点は、中間者攻撃にさらされる可能性があることです(盲目的に受け入れることができないホストキーを受け入れるため、リモートホストキーが変更されたかどうかを確認します)。

  2. 同様の手法を使用して、各ホストに一意の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は構成ファイルから実際のホスト名とポートを取得します。

22
larsks

使用している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
8
MadHatter

私のコメントを@larsksの回答に拡張するには、~/.ssh/configエントリは、/ etc/hostsを変更するよりもはるかに優れていますが、既知のホストを異なるファイルに分割するのではなく、HostKeyAliasを使用します。例えば:

Host hosta
Port 10098
Hostname remote.Host.name
HostKeyAlias hosta

同様にhostb

3
crimson-egret