एक ही सार्वजनिक आईपी पते पर NAT'd सर्वर में SSH


16

मैं ऑफिस में X से SSH के लिए ऑफिस Y में कुछ लिनक्स बॉक्स से कोशिश कर रहा हूं। ऑफिस Y में लिनक्स बॉक्स NAT के पीछे है और प्रत्येक अपने-अपने पोर्ट पर चलता है। मैं SSH के माध्यम से उन सभी तक सफलतापूर्वक पहुंच सकता हूं, लेकिन मैं प्रमाणित नहीं कर सकता।

मैं पहले बॉक्स में SSH करने में सक्षम था, लेकिन जब मैं दूसरे के पास गया तो उसने कहा:

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

मेरी समझ यह है कि यह उस सार्वजनिक आईपी पते से एक ही कुंजी को देखने की उम्मीद कर रहा है, लेकिन यह एक अलग देख रहा है क्योंकि यह एक अलग एसपी सर्वर है।

मैं इसे कैसे ठीक कर सकता हूं ताकि यह उसी आईपी पते के पीछे प्रत्येक सर्वर से एक अलग कुंजी बनाता / स्वीकार करता है?

यहां छवि विवरण दर्ज करें


1
हाथ से खींचे गए बादल के लिए +1।
जोजी

जवाबों:


15

आपकी known_hostsफ़ाइल में होस्टनाम या आईपी पते को हैश (या विकल्प और संस्करण की चूक के आधार पर सादे पाठ में) के रूप में संग्रहीत किया जा रहा है । सबसे आसान वर्कअराउंड प्रत्येक होस्ट के लिए DNS /etc/hosts(ugh!) फ़ाइल के लिए एक ही IP (WAN) पते के साथ एक प्रविष्टि जोड़ना है जैसे /etc/hosts:

your.wan.ip.address      servera serverb

और फिर sshhostname और port के द्वारा।


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 hostaया ssh hostb, sshवास्तविक होस्टनाम और पोर्टीग्रेशन फ़ाइल से पोर्ट करेंगे।


4
नहीं, /etc/hostsफ़ाइल को संशोधित करने से भी काम चलेगा। मुझे यह बेहतर लगता है क्योंकि (ए) इसके लिए उन्नत विशेषाधिकार की आवश्यकता नहीं है और (बी) इसका मतलब है कि आपको कमांड लाइन पर पोर्ट संख्या निर्दिष्ट करने की आवश्यकता नहीं है।
लार्क्स

1
होस्ट और होस्ट को WAN IP पते से संबद्ध करने के लिए इन दोनों समाधानों में नाम समाधान (होस्ट या DNS) की आवश्यकता होगी। लेकिन दोनों बेहतरीन सुझाव हैं I LOL एडिट में टाइप करने के लिए मैं बहुत आलसी था: बस होस्टनाम को वहाँ देखा - नाम रिज़ॉल्यूशन के बारे में।
ब्रैंडन जेवियर

2
@CopyRunStart: आपको कमांड लाइन पर पोर्ट को निर्दिष्ट करने की आवश्यकता नहीं है क्योंकि लार्क्स के उत्तर में वर्णित यह आपके ~/.ssh/config(प्रत्येक के लिए एक अलग पोर्ट hosta hostb) में पहले से ही निर्दिष्ट है । इसी तरह आप अलग-अलग मेजबानों के लिए इस config-file में अलग-अलग उपयोगकर्ता नाम, कुंजियाँ आदि निर्दिष्ट कर सकते हैं, इसलिए आपको केवल कमांड लाइन पर करना है ssh hostaयाssh hostb
arielf

3
अगर मैं दो बार ~ / .shsh / config को बढ़ा सकता हूं, तो मैं करूंगा। सड़क के नीचे अन्य समस्या निवारण समस्याओं के कारण / आदि / मेजबानों के साथ टकराव होता है।
हारून

1
यह एक बेहतर समाधान है, IMO, संशोधित / आदि / मेजबानों की तुलना में। एक छोटी सी वक्रोक्ति के रूप में, मैं HostKeyAliasअलग-अलग फ़ाइलों को ज्ञात मेजबानों को विभाजित करने के बजाय निर्देश का उपयोग करूँगा । जैसेHostKeyAlias hosta
क्रिमसन-एर्गेट

8

आप यह नहीं कहते कि सोलारिस का कौन सा संस्करण (और, अधिक महत्वपूर्ण बात, SSH) आप उपयोग कर रहे हैं, लेकिन OpenSSH के पर्याप्त रूप से अद्यतित संस्करणों ने इस समस्या को संबोधित किया है।

यहां मेरी known_hostsफ़ाइल से दो प्रविष्टियां हैं , जिसमें समान आईपी पता है लेकिन अलग-अलग पोर्ट नंबर (एक का मतलब 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==

मुझे नहीं पता कि ओपनएसएसएच के किस संस्करण ने इसे पेश किया, लेकिन मैं चला रहा हूं

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

3

@Larsks उत्तर के लिए मेरी टिप्पणी पर विस्तार करने के लिए, मुझे लगता है कि ~/.ssh/configप्रविष्टियों का उपयोग करना संशोधित करना / आदि / मेजबानों की तुलना में बहुत बेहतर है, हालांकि मैं HostKeyAliasज्ञात मेजबानों को अलग-अलग फ़ाइलों में विभाजित करने के बजाय उपयोग करूंगा । उदाहरण के लिए:

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

और इसी तरह के लिए hostb

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.