सवाल क्या मैं स्वचालित रूप से ज्ञात_होस्ट में एक नया होस्ट जोड़ सकता हूं?


यहां मेरी स्थिति है: मैं एक टेस्ट हार्नेस स्थापित कर रहा हूं जो केंद्रीय क्लाइंट से कई वर्चुअल मशीन इंस्टेंस लॉन्च करेगा और उसके बाद कमांड निष्पादित करेगा ssh। वर्चुअल मशीनों में पहले अप्रयुक्त होस्टनाम और आईपी पते होंगे, इसलिए वे इसमें नहीं होंगे ~/.ssh/known_hosts केंद्रीय ग्राहक पर फ़ाइल।

मेरी समस्या यह है कि पहला ssh एक नए आभासी उदाहरण के खिलाफ कमांड रन हमेशा एक इंटरैक्टिव प्रॉम्प्ट के साथ आता है:

The authenticity of host '[hostname] ([IP address])' can't be established.
RSA key fingerprint is [key fingerprint].
Are you sure you want to continue connecting (yes/no)?

क्या कोई तरीका है कि मैं इसे बाईपास कर सकता हूं और क्लाइंट मशीन पर पहले से ही ज्ञात होने वाला नया होस्ट प्राप्त कर सकता हूं, शायद सार्वजनिक कुंजी का उपयोग करके जो वर्चुअल मशीन छवि में पहले से बेक हो चुका है? मैं वास्तव में उम्मीद का उपयोग करने से बचने के लिए या इंटरैक्टिव प्रॉम्प्ट का उत्तर देने के लिए जो भी कर सकता हूं।


217
2018-04-16 04:15


मूल


एक परीक्षण वातावरण के लिए जो स्वयं निहित और शारीरिक रूप से सुरक्षित है, स्वचालित कुंजी स्वीकृति ठीक काम कर सकती है। लेकिन उत्पादन वातावरण में या अविश्वसनीय नेटवर्क (जैसे इंटरनेट) में सार्वजनिक कुंजी को स्वचालित रूप से स्वीकार करना पूरी तरह से मानव-इन-द-बीच हमलों के खिलाफ किसी भी सुरक्षा को छोड़ देता है जो एसएसएच अन्यथा खर्च करेगा। केवल यह सुनिश्चित करने के लिए वैध तरीका है कि आप एमआईटीएम हमलों के खिलाफ सुरक्षित हैं, कुछ बैंड ऑफ विश्वसनीय चैनल के माध्यम से मेजबान की सार्वजनिक कुंजी को सत्यापित करना है। मामूली जटिल कुंजी हस्ताक्षर बुनियादी ढांचे को स्थापित किए बिना इसे स्वचालित करने का कोई सुरक्षित तरीका नहीं है। - Eil


जवाब:


ठीक StrictHostKeyChecking विकल्प no, या तो कॉन्फ़िगरेशन फ़ाइल में या के माध्यम से -o :

ssh -o StrictHostKeyChecking=no username@hostname.com


126
2018-04-16 04:34



यह आपको मध्य हमलों में आदमी के लिए खुलता है, शायद एक अच्छा विचार नहीं है। - JasperWallace
@ जैस्परवालेस, जबकि यह आमतौर पर अच्छी सलाह है, विशिष्ट उपयोग केस (परीक्षण वीएम तैनात करना और उन्हें आदेश भेजना) पर्याप्त सुरक्षित होना चाहिए। - Massimo
यह एक देता है Warning: Permanently added 'hostname,1.2.3.4' (RSA) to the list of known hosts. चेतावनी से बचने के लिए, और किसी भी ज्ञात_होस्ट फ़ाइल में प्रविष्टि को जोड़ने से बचने के लिए, मैं करता हूं: ssh -o StrictHostKeyChecking=no -o LogLevel=ERROR -o UserKnownHostsFile=/dev/null username@hostname.com - Peter V. Mørch
इसके रूप में डाउनवॉटिंग सवाल का जवाब नहीं देती है और गंभीर सुरक्षा भेद्यता के लिए खुलती है। - marcv81
@Mnebuerquo: यदि आप सुरक्षा के बारे में चिंतित थे तो आपके पास इस प्रश्न के साथ कुछ भी नहीं होगा। आपके पास उस सिस्टम के कंसोल से एकत्रित, आपके सामने सही मेजबान कुंजी होगी, और आप इसे पहले कनेक्ट करने पर मैन्युअल रूप से सत्यापित करेंगे। आप निश्चित रूप से कुछ भी "स्वचालित रूप से" नहीं करेंगे। - Ignacio Vazquez-Abrams


आईएमओ, ऐसा करने का सबसे अच्छा तरीका निम्न है:

ssh-keygen -R [hostname]
ssh-keygen -R [ip_address]
ssh-keygen -R [hostname],[ip_address]
ssh-keyscan -H [hostname],[ip_address] >> ~/.ssh/known_hosts
ssh-keyscan -H [ip_address] >> ~/.ssh/known_hosts
ssh-keyscan -H [hostname] >> ~/.ssh/known_hosts

यह सुनिश्चित करेगा कि कोई डुप्लिकेट प्रविष्टियां नहीं हैं, जिन्हें आप मेजबाननाम और आईपी पते दोनों के लिए कवर कर रहे हैं, और आउटपुट, एक अतिरिक्त सुरक्षा उपाय भी हैश।


209
2017-09-27 20:51



आपको सभी 3 एसएसएच-स्कैनकेन की आवश्यकता क्यों है? क्या आप पहले व्यक्ति के साथ नहीं मिल सकते क्योंकि यह होस्टनाम और आईपी दोनों के लिए काम करता है? - Robert
क्या आप सुनिश्चित हो सकते हैं कि ssh-keyscan अनुरोध का उत्तर देने वाली मशीन वास्तव में वह है जिसे आप बात करना चाहते हैं? यदि आपने मध्य हमले में एक आदमी को खुद को खोला नहीं है। - JasperWallace
@JasperWallace हां, इसके लिए आपको कम से कम फिंगरप्रिंट या यहां तक ​​कि सार्वजनिक कुंजी की भी आवश्यकता है, इस मामले में आप इसे सीधे ज्ञात_होस्ट में जोड़ सकते हैं, इस सवाल को मोट कर सकते हैं। अगर आपके पास केवल फिंगरप्रिंट है, तो आपको एक अतिरिक्त कदम लिखना होगा जो आपके फिंगरप्रिंट के साथ डाउनलोड की गई सार्वजनिक कुंजी को सत्यापित करता है ...
कॉल करता है ssh-keyscan मेरे लिए असफल रहे क्योंकि मेरा लक्ष्य होस्ट डिफ़ॉल्ट संस्करण 1 कुंजी प्रकार का समर्थन नहीं करता है। जोड़ा जा रहा है -t rsa,dsa आदेश को तय करने के लिए। - phasetwenty
यह शायद एक बुरा विचार है। आप इन चाबियों को अद्यतन करके एक मैन-इन-द-बीच हमले के लिए खुद को खोल रहे हैं। डुप्लिकेट प्रविष्टियों से बचने के लिए, की वापसी स्थिति की जांच करें ssh-keygen -F [address] बजाय। medium.com/@wblankenship/... - retrohacker


आलसी लोगों के लिए:

ssh-keyscan <host> >> ~/.ssh/known_hosts

78
2017-09-25 10:03



आरोप के रूप में दोषी होने के लिए +1। धन्यवाद। - SaxDaddy
एमआईटीएम हमलों के लिए कमजोर। आप कुंजी फिंगरप्रिंट की जांच नहीं कर रहे हैं। - Mnebuerquo
@Mnebuerquo आप कहते हैं कि क्या करना है, लेकिन कैसे नहीं, जो सहायक होगा। - Jim
@jameshfisher हां एमआईटीएम हमलों के लिए यह कमजोर है, लेकिन क्या आपने कभी आरएसए फिंगरप्रिंट की तुलना की है, जो आपको सर्वर के वास्तविक एक के साथ दिखाया गया था, जब आप इसे मैन्युअल रूप से कर रहे थे? नहीं? तो यह जवाब आपके लिए ऐसा करने का तरीका है। यदि हां, तो आपको इस उत्तर का उपयोग नहीं करना चाहिए और इसे मैन्युअल रूप से या अन्य सुरक्षा उपायों को लागू करना चाहिए ... - fivef
@Mnebuerquo मैं वास्तव में खुश हूं अगर आप इसे संभालने के लिए एक बेहतर तरीका भी बताते हैं, जब हमें बैच स्क्रिप्ट का उपयोग करके रेपो क्लोन करने की आवश्यकता होती है और हम इस प्रॉम्प्ट को पास-पास करना चाहते हैं। अगर आपको लगता है कि यह सही नहीं है तो कृपया असली समाधान पर कुछ प्रकाश डालें! - Waqas Shah


जैसा कि बताया गया है, कुंजी-स्कैन का उपयोग करना इसे करने का सही और अविभाज्य तरीका होगा।

ssh-keyscan -t rsa,dsa HOST 2>&1 | sort -u - ~/.ssh/known_hosts > ~/.ssh/tmp_hosts
mv ~/.ssh/tmp_hosts ~/.ssh/known_hosts

उपर्युक्त मेजबान जोड़ने के लिए चाल करेगा, केवल तभी अगर इसे अभी तक जोड़ा नहीं गया है। यह समेकन भी सुरक्षित नहीं है; आप बिलकुल मना है उसी मूल मशीन पर स्निपेट को एक ही समय में एक से अधिक बार निष्पादित करें, क्योंकि tmp_hosts फ़ाइल को क्लॉब्ड किया जा सकता है, अंततः ज्ञात_होस्ट फ़ाइल को फूला हुआ हो जाता है ...


38
2018-03-06 09:00



यह जांचने का कोई तरीका है कि कुंजी ज्ञात_होस्ट में है या नहीं से पहले  ssh-keyscan? कारण यह है कि इसे कुछ समय और अतिरिक्त नेटवर्क कनेक्शन की आवश्यकता होती है। - utapyngo
इस फ़ाइल के मूल पोस्टर संस्करण में था cat ~/.ssh/tmp_hosts > ~/.ssh/known_hosts, लेकिन बाद के संपादन ने इसे बदल दिया >>। का उपयोग करते हुए >> एक त्रुटि है यह पहली पंक्ति में विशिष्टता के उद्देश्य को हरा देता है, और इसे नई प्रविष्टियों में डंप करने का कारण बनता है known_hostsहर बार यह चलता है। (बस इसे वापस बदलने के लिए एक संपादन पोस्ट किया।) - paulmelnikow
यह दूसरों के समान एमआईटीएम हमलों के अधीन है। - Mnebuerquo
@utapyngo ssh-keygen -F आपको वर्तमान फिंगरप्रिंट देगा। यदि यह 1 के रिटर्न कोड के साथ वापस खाली आता है, तो आपके पास यह नहीं है। अगर यह कुछ प्रिंट करता है और कोड वापस 0 है, तो यह पहले से मौजूद है। - Rich L
यदि आप एमआईटीएम के बारे में बहुत अधिक परवाह करते हैं, तो DNSSEC और SSHFP रिकॉर्ड तैनात करते हैं या चाबियों को वितरित करने के कुछ अन्य सुरक्षित साधनों का उपयोग करते हैं और यह क्लज समाधान अप्रासंगिक होगा। - Zart


आप उपयोग कर सकते हैं ssh-keyscan सार्वजनिक कुंजी को पकड़ने और इसे जोड़ने के लिए आदेश known_hosts फ़ाइल।


18
2018-04-16 05:09



सुनिश्चित करें कि यह सही कुंजी है यह सुनिश्चित करने के लिए आप फिंगरप्रिंट की जांच करें। अन्यथा आप एमआईटीएम हमलों तक खुद को खोलें। - Mnebuerquo
सामान्य संदर्भ में @Mnebuerquo मेला बिंदु, लेकिन अगर कोई पहले से ही जानता था कि सही कुंजी क्या थी तो प्रोग्राम प्रोग्रामिक रूप से कुंजी एकत्र करने का प्रयास क्यों करेगा? - Brian Cline
यह करने का तरीका नहीं है। MITM। - jameshfisher


इस तरह आप शामिल कर सकते हैं ssh-KeyScan आपके खेल में:

---
# ansible playbook that adds ssh fingerprints to known_hosts
- hosts: all
  connection: local
  gather_facts: no
  tasks:
  - command: /usr/bin/ssh-keyscan -T 10 {{ ansible_host }}
    register: keyscan
  - lineinfile: name=~/.ssh/known_hosts create=yes line={{ item }}
    with_items: '{{ keyscan.stdout_lines }}'

6
2018-02-03 03:12



क्या आप एक ज्ञात वैध ज्ञात_होस्ट फ़ाइल अपलोड कर रहे हैं, या आप ssh-keyscan कर रहे हैं और आउटपुट को फिंगरप्रिंट सत्यापित किए बिना ज्ञात_होस्ट में डंप कर रहे हैं? - Mnebuerquo
यह केवल एक keycan के उत्पादन डंप है, हाँ। तो असल में यह StrictHostKeyChecking = no जैसा ही है, बस चुप ज्ञात_होस्ट्स के साथ ssh विकल्पों के साथ fiddling बिना अद्यतन। यह समाधान एसएसएच-कीस्कैन कई लाइनों को लौटने के कारण भी अच्छी तरह से काम नहीं करता है, जिससे इस कार्य को हमेशा 'बदले' के रूप में चिह्नित किया जाता है। - Zart
यह करने का तरीका नहीं है। MITM। - jameshfisher
@jameshfisher मैं वास्तव में खुश हूं अगर आप इसे संभालने के लिए एक बेहतर तरीका भी बताते हैं, जब हमें बैच स्क्रिप्ट का उपयोग करके रेपो क्लोन करने की आवश्यकता होती है और हम इस प्रॉम्प्ट को पास-पास करना चाहते हैं। अगर आपको लगता है कि यह सही नहीं है तो कृपया असली समाधान पर कुछ प्रकाश डालें! अगर आपको लगता है कि यह करने का सही तरीका नहीं है, तो कृपया हमें "कैसे" करना है! - Waqas Shah


मेरे पास एक समान समस्या थी और पाया गया कि कुछ प्रदान किए गए उत्तरों ने मुझे स्वचालित समाधान के लिए केवल एक रास्ता तय किया है। निम्नलिखित है जो मैंने उपयोग किया है, उम्मीद है कि यह मदद करता है:

ssh -o "StrictHostKeyChecking no" -o PasswordAuthentication=no 10.x.x.x

यह कुंजी जोड़ता है known_hosts और पासवर्ड के लिए संकेत नहीं देता है।


5
2017-10-21 17:27



एमआईटीएम हमलों के लिए कमजोर। आप फिंगरप्रिंट की जांच नहीं कर रहे हैं। - Mnebuerquo
कोई फिंगरप्रिंट की जांच नहीं करता है। - Brendan Byrd
यह करने का तरीका नहीं है। MITM। - jameshfisher


यह केवल एक पूर्ण समाधान होगा, केवल पहली बार मेजबान कुंजी स्वीकार कर रहा है

#!/usr/bin/env ansible-playbook
---
- name: accept ssh fingerprint automatically for the first time
  hosts: all
  connection: local
  gather_facts: False

  tasks:
    - name: "check if known_hosts contains server's fingerprint"
      command: ssh-keygen -F {{ inventory_hostname }}
      register: keygen
      failed_when: keygen.stderr != ''
      changed_when: False

    - name: fetch remote ssh key
      command: ssh-keyscan -T5 {{ inventory_hostname }}
      register: keyscan
      failed_when: keyscan.rc != 0 or keyscan.stdout == ''
      changed_when: False
      when: keygen.rc == 1

    - name: add ssh-key to local known_hosts
      lineinfile:
        name: ~/.ssh/known_hosts
        create: yes
        line: "{{ item }}"
      when: keygen.rc == 1
      with_items: '{{ keyscan.stdout_lines|default([]) }}'

5
2017-11-23 13:51



यह करने का तरीका नहीं है। MITM। - jameshfisher


तो, मैं नीचे दिखाए गए अनुसार एक गिट रेपो क्लोनिंग के अनजान होस्ट मैनुअल इंटरैक्शन को बाईपास करने के लिए एक शानदार तरीका खोज रहा था:

brad@computer:~$ git clone git@bitbucket.org:viperks/viperks-api.git
Cloning into 'viperks-api'...
The authenticity of host 'bitbucket.org (104.192.143.3)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)?

आरएसए कुंजी फिंगरप्रिंट नोट करें ...

तो, यह एक एसएसएच चीज है, यह एसएसएच पर गिट के लिए काम करेगा और सामान्य रूप से केवल एसएसएच संबंधित चीजें ...

brad@computer:~$ nmap bitbucket.org --script ssh-hostkey

Starting Nmap 7.01 ( https://nmap.org ) at 2016-10-05 10:21 EDT
Nmap scan report for bitbucket.org (104.192.143.3)
Host is up (0.032s latency).
Other addresses for bitbucket.org (not scanned): 104.192.143.2 104.192.143.1 2401:1d80:1010::150
Not shown: 997 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
| ssh-hostkey:
|   1024 35:ee:d7:b8:ef:d7:79:e2:c6:43:9e:ab:40:6f:50:74 (DSA)
|_  2048 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40 (RSA)
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 42.42 seconds

सबसे पहले, अपने दैनिक ड्राइवर पर एनएमएपी स्थापित करें। एनएमएपी कुछ चीजों के लिए बहुत उपयोगी है, जैसे खुले बंदरगाहों का पता लगाना और यह - एसएसएच फिंगरप्रिंट मैन्युअल रूप से सत्यापित करना। लेकिन, हम जो कर रहे हैं उस पर वापस जाएं।

अच्छा। मैं या तो कई जगहों और मशीनों पर समझौता कर रहा हूं जिन्हें मैंने चेक किया है - या जो कुछ भी हो रहा है, उसके बारे में सब कुछ अधिक व्यावहारिक स्पष्टीकरण है।

वह 'फिंगरप्रिंट' एक ही फिंगरप्रिंट में हल होने वाली एक से अधिक स्ट्रिंग के जोखिम पर हमारी मानव सुविधा के लिए एक तरफ एल्गोरिदम के साथ एक स्ट्रिंग छोटा है। ऐसा होता है, उन्हें टकराव कहा जाता है।

भले ही, मूल स्ट्रिंग पर वापस जाएं जिसे हम नीचे संदर्भ में देख सकते हैं।

brad@computer:~$ ssh-keyscan bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
no hostkey alg
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-129
bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-123
no hostkey alg

तो, समय से पहले, हमारे पास मूल होस्ट से पहचान का एक रूप मांगने का एक तरीका है।

इस बिंदु पर हम मैन्युअल रूप से स्वचालित रूप से कमजोर होते हैं - स्ट्रिंग्स मैच, हमारे पास मूल डेटा है जो फिंगरप्रिंट बनाता है, और हम भविष्य में उस बेस डेटा (टकराव को रोकने) के लिए पूछ सकते हैं।

अब उस स्ट्रिंग को इस तरह से उपयोग करने के लिए जो मेजबान प्रामाणिकता के बारे में पूछने से रोकता है ...

इस मामले में ज्ञात_होस्ट फ़ाइल सादे टेक्स्ट प्रविष्टियों का उपयोग नहीं करती है। जब आप उन्हें देखते हैं तो आपको हैश प्रविष्टियां पता चलेगी, वे xyz.com या 123.45.67.89 के बजाय यादृच्छिक वर्णों के साथ हैंश की तरह दिखते हैं।

brad@computer:~$ ssh-keyscan -t rsa -H bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==

पहली टिप्पणी पंक्ति क्रूरता से दिखाई देती है - लेकिन आप इसे ">" या ">>" सम्मेलन के माध्यम से सरल रीडायरेक्ट से छुटकारा पा सकते हैं।

जैसा कि मैंने "होस्ट" और ट्रस्ट की पहचान करने के लिए उपयोग किए जाने वाले अनचाहे डेटा को प्राप्त करने के लिए अपना सर्वश्रेष्ठ प्रयास किया है, इसलिए मैं इस पहचान को मेरी ~ / .ssh निर्देशिका में मेरी ज्ञात_होस्ट फ़ाइल में जोड़ दूंगा। चूंकि इसे अब एक ज्ञात मेजबान के रूप में पहचाना जाएगा, इसलिए जब आप एक नौजवान थे तो मुझे ऊपर उल्लिखित संकेत नहीं मिलेगा।

मेरे साथ चिपके रहने के लिए धन्यवाद, आप यहां जाते हैं। मैं बिटबकेट आरएसए कुंजी जोड़ रहा हूं ताकि मैं सीआई वर्कफ़्लो के हिस्से के रूप में एक गैर-इंटरैक्टिव तरीके से अपने गिट रिपॉजिटरीज़ के साथ बातचीत कर सकूं, लेकिन जो कुछ भी आप चाहते हैं वह कर सकते हैं।

#!/bin/bash
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.old && echo "|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==" >> ~/.ssh/known_hosts

तो, इस तरह आप आज के लिए एक कुंवारी रहना है। आप अपने समय पर समान दिशाओं का पालन करके गिटूब के साथ ऐसा ही कर सकते हैं।

मैंने इतनी सारी स्टैक ओवरफ्लो पोस्ट देखी जो आपको किसी भी प्रकार की जांच के बिना प्रोग्राम को मूल रूप से कुंजी को जोड़ने के लिए कहती हैं। जितना अधिक आप अलग-अलग नेटवर्कों पर विभिन्न मशीनों से कुंजी की जांच करेंगे, उतना ही अधिक भरोसा है कि मेजबान वह है जो यह कहता है - और सुरक्षा की इस परत से आप उम्मीद कर सकते हैं।

गलत ssh -oStrictHostKeyChecking = कोई होस्टनाम [कमांड]

गलत ssh-keyscan -t rsa -H होस्टनाम >> ~ / .ssh / known_hosts

उपरोक्त चीज़ों में से कोई भी मत करो, कृपया। आपको मध्य हमले में एक आदमी के माध्यम से अपने डेटा स्थानान्तरण पर किसी को छेड़छाड़ करने से बचने के अवसरों को बढ़ाने का मौका दिया जाता है - वह अवसर लें। अंतर सचमुच यह सत्यापित कर रहा है कि आपके पास आरएसए कुंजी एक सशक्त सर्वर है और अब आप जानते हैं कि उस जानकारी को उनकी तुलना करने के लिए कैसे प्राप्त करें ताकि आप कनेक्शन पर भरोसा कर सकें। बस याद रखें कि विभिन्न कंप्यूटरों और नेटवर्क से अधिक तुलना आमतौर पर कनेक्शन पर भरोसा करने की आपकी क्षमता को बढ़ाएगी।


4
2017-10-05 21:18



मुझे लगता है कि यह इस समस्या का सबसे अच्छा समाधान है। हालांकि, अमेज़ॅन ईसी 2 जैसे कुछ पर एनएमएपी का उपयोग करते समय बहुत सावधान रहें, मुझे पोर्ट स्कैनिंग के बारे में चेतावनी मिली है जो एनएमएपी करता है! बंदरगाह करने से पहले अपने फार्म भरें! - Waqas Shah
...अच्छी तरह से हाँ। मुझे नहीं पता कि आप ईसी 2 से पोर्ट स्कैनिंग क्यों करेंगे। अगर आप अपने खाते में लॉग इन हैं, तो आप वास्तविक मशीनों से चाबियाँ प्राप्त कर सकते हैं। यह उन मशीनों के लिए अधिक है जिन पर आपका नियंत्रण नहीं है। मुझे लगता है कि आपके पास एक स्थानीय मशीन होगी जिसका उपयोग करने के लिए एडब्ल्यूएस पोर्ट स्कैनिंग प्रतिबंधों के अधीन नहीं है। लेकिन, अगर आप उस एज केस स्थिति में हैं जहां आपको एडब्ल्यूएस के साथ एनएमएपी चलाने की ज़रूरत है, तो मुझे लगता है कि यह चेतावनी सहायक होगी। - BradChesney79
अपने वर्कस्टेशन से एसएसएच होस्ट कुंजी पढ़ने के लिए एनएमएपी का उपयोग करना और फिर उस मान पर भरोसा करना स्ट्रक्चरहोस्ट चेकिंग बंद होने के साथ एसएसएच के माध्यम से कनेक्ट करने से अलग नहीं है। यह सिर्फ एक आदमी के बीच में हमले के लिए कमजोर है। - Micah R Ledbetter
... @ MicahRLedbetter यही कारण है कि मैंने सुझाव दिया कि "विभिन्न कंप्यूटरों और नेटवर्क से अधिक तुलना आमतौर पर कनेक्शन पर भरोसा करने की आपकी क्षमता को बढ़ाएगी"। लेकिन, यह मेरा मुद्दा है। यदि आप कभी भी अपने लक्षित मेजबान को पर्यावरण स्थितियों के एक सेट से जांचते हैं तो आप कभी भी किसी विसंगति के बारे में कैसे जानेंगे? क्या आपके पास कोई बेहतर सुझाव है? - BradChesney79
यह सुरक्षा थियेटर है। अधिक सुरक्षा की उपस्थिति बनाने के लिए कुछ जटिल करना। इससे कोई फर्क नहीं पड़ता कि मेजबान से इसकी कुंजी के लिए पूछने के लिए आप कितनी अलग विधियों का उपयोग करते हैं। यदि आप उन पर भरोसा कर सकते हैं (शायद आप कॉल, ईमेल, टेक्स्ट और स्नेल मेल) तो एक ही व्यक्ति से कई बार पूछने की तरह। वे हमेशा हाँ कहेंगे, लेकिन यदि आप गलत व्यक्ति से पूछ रहे हैं, तो इससे कोई फर्क नहीं पड़ता। - vastlysuperiorman


मैं एक-लाइनर स्क्रिप्ट करता हूं, थोड़ा सा लेकिन मल्टीपल आईपी के साथ मेजबानों के लिए यह काम करने के लिए उपयोगी है dig तथा bash

(host=github.com; ssh-keyscan -H $host; for ip in $(dig @8.8.8.8 github.com +short); do ssh-keyscan -H $host,$ip; ssh-keyscan -H $ip; done) 2> /dev/null >> .ssh/known_hosts

3
2018-04-18 21:01