SSH, aynı genel IP adresindeki NAT'd sunuculara


16

X ofisindeki SSH'yi Y ofisindeki birkaç Linux kutusuna kadar deniyorum. Y ofisindeki Linux kutuları NAT'ın arkasında ve her biri kendi bağlantı noktalarında çalışıyor. Hepsine SSH aracılığıyla başarılı bir şekilde ulaşabiliyorum, ancak kimlik doğrulaması yapamıyorum.

İlk kutuya SSH yapabildim, ama ikincisine vardığımda şöyle dedi:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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

Anladığım kadarıyla, ortak IP adresinden aynı anahtarı görmeyi beklemektedir, ancak farklı bir SSH sunucusu olduğu için farklı bir tane görüyor.

Aynı IP adresinin arkasındaki her sunucudan farklı bir anahtar oluşturması / kabul etmesi için nasıl düzeltebilirim?

Resim açıklamasını buraya girin


1
+1 elle çizilmiş bulut için.
JoeG

Yanıtlar:


15

Ana bilgisayar adı veya IP adresi known_hostsdosyanızda bir karma (veya seçeneklere ve sürüm varsayılanlarına bağlı olarak düz metin) olarak saklanıyor . En kolay çözüm, her ana bilgisayar için /etc/hosts, aşağıdaki gibi aynı IP (WAN) adresine sahip DNS veya (ugh!) Dosyasına bir girdi eklemektir /etc/hosts:

your.wan.ip.address      servera serverb

ve daha sonra sshhostname ve port ile.


22

Bunu düzeltmenin birkaç yolu vardır:

  1. Bu ana makine için ana makine anahtarı denetimini devre dışı bırakabilirsiniz. Senin içinde ssh_configdosya ( ~/.ssh/config), bir şey gibi koyun:

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

    Bu ssh, hiçbir zaman ana bilgisayar anahtarlarını depolamayacak şekilde yapılandırılır remote.host.name, ancak olumsuz tarafı artık ortadaki adam saldırılarına açık olmanızdır (çünkü ana bilgisayar anahtarlarını körü körüne kabul ettiğiniz için uzak ana bilgisayar anahtarının değişip değişmediğini söyleyemezsiniz).

  2. Her bir ana bilgisayara benzersiz bir known_hostsdosya vermek için benzer bir teknik kullanabilirsiniz :

    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
    

    Daha sonra bu ana bağlanacak ssh hostaveya ssh hostbve sshconciguration dosyasından gerçek konak adı ve port alacaktır.


4
Hayır, /etc/hostsdosyayı değiştirmek de işe yarayacaktır. Bunu daha iyi seviyorum çünkü (a) yükseltilmiş ayrıcalıklar gerektirmez ve (b) komut satırında bağlantı noktası numaralarını belirtmeniz gerekmez.
larsks

1
Hosta ve hostb'yi WAN IP adresiyle ilişkilendirmek için bu çözümlerin her ikisinde de ad çözümlemesi (ana bilgisayarlar veya DNS) gereklidir. Ama her ikisi de mükemmel öneriler LOL Edit yazmak için çok tembel oldu: Sadece orada Hostname fark - isim çözüm hakkında çizik.
Brandon Xavier

2
@CopyRunStart: bağlantı noktasında bağlantı noktasını belirtmenize gerek yoktur, çünkü larsks'ın cevabında açıklandığı gibi ~/.ssh/config(her biri için farklı bir bağlantı noktasında hosta hostb) zaten belirtilmiştir . Aynı şekilde, farklı ana bilgisayarlar için bu yapılandırma dosyasında farklı kullanıcı adları, anahtarlar vb. Belirtebilirsiniz, böylece komut satırında yapmanız gereken tek şey ssh hostaveyassh hostb
arielf

3
~ / .Ssh / config dosyasını iki kez yükseltebilseydim, yapardım. / Etc / hosts ile uğraşmak, yolda başka sorun giderme sorunlarına neden olmak zorundadır.
Aaron

1
Bu, / etc / hosts'i değiştirmekten çok daha iyi bir çözüm, IMO'dur. Küçük bir kelime oyunu olarak, HostKeyAliasbilinen ana bilgisayarları farklı dosyalara bölmek yerine yönergeyi kullanırdım . ör.HostKeyAlias hosta
kıpkırmızı-ak balıkçıl

8

Hangi Solaris sürümünü (ve daha da önemlisi SSH) kullandığınızı söylemiyorsunuz, ancak OpenSSH'nin yeterince güncel sürümleri bu sorunu giderdi.

Dosyamdan known_hostsaynı IP adresine ancak farklı bağlantı noktası numaralarına sahip iki giriş aşağıdadır (biri örtük 22'dir); Gördüğünüz gibi saklanan anahtarlar aynı değil.

[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==

Hangi OpenSSH sürümünün bunu getirdiğini bilmiyorum, ama koşuyorum

[me@risby fin]$ ssh -V
OpenSSH_6.9p1, OpenSSL 1.0.1k-fips 8 Jan 2015

3

@Larsks cevabına yorumumu genişletmek için, ~/.ssh/configgirişleri kullanmanın / etc / hosts'i değiştirmekten çok daha iyi olduğunu düşünüyorum , ancak HostKeyAliasbilinen ana bilgisayarları farklı dosyalara bölmek yerine kullanmak istiyorum . Örneğin:

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

Ve benzer şekilde hostb

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.