同じパブリックIPアドレス上のNATされたサーバーへのSSH


16

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

ここに画像の説明を入力してください


1
手描きの雲の場合は+1。
JoeG

回答:


15

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

your.wan.ip.address      servera serverb

そして、sshホスト名とポートで。


22

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

  1. この特定のホストのホストキーチェックを無効にすることができます。あなたにはssh_config、ファイル(~/.ssh/config)、のようなものを置きます:

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

    これはのsshホストキーを保存しないように設定しますremote.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 hostassh hostb、およびsshconcigurationファイルから実際のホスト名とポートがかかります。


4
いいえ、/etc/hostsファイルの変更も機能します。(a)昇格された特権を必要とせず、(b)コマンドラインでポート番号を指定する必要がないことを意味するので、これがより気に入っています。
-larsks

1
これらのソリューションの両方で、hostaとhostbをWAN IPアドレスに関連付けるには、名前解決(ホストまたはDNS)が引き続き必要です。しかし、どちらも素晴らしい提案です。私はLOL Editを入力するのが面倒でした:ホスト名がそこにあることに気づいただけです。
ブランドンザビエル

2
@CopyRunStart:larsksの答えで説明されているように、~/.ssh/config(ポートごとに異なるポートhosta hostb)で既に指定されているため、コマンドラインでポートを指定する必要はありません。同様に、異なるホストのこの構成ファイルで異なるユーザー名、キーなどを指定できるため、コマンドラインで行う必要があるのは、ssh hostaまたはssh hostb
arielf

3
〜/ .ssh / configを2回投票できれば、私はそうします。/ etc / hostsをいじることは、将来的に他のトラブルシューティングの問題を引き起こすことになります。
アーロン

1
これは、/ etc / hostsを変更するよりもはるかに優れたソリューションであるIMOです。些細なHostKeyAliasことですが、既知のホストを別のファイルに分割するのではなく、ディレクティブを使用します。例HostKeyAlias hosta
クリムゾン白ret

8

どのバージョンの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

3

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

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

同様に hostb

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.