SSH ज्ञात_होस्ट फ़ाइल में सुरक्षित रूप से एक होस्ट (जैसे GitHub) जोड़ें


20

मैं SSH known_hostsफ़ाइल में सुरक्षित रूप से होस्ट कुंजी कैसे जोड़ सकता हूं ?

मैं एक विकास मशीन स्थापित कर रहा हूँ, और मैं SSH के उपयोग gitसे एक रिपॉजिटरी को क्लोन करने के लिए (जैसे) को रोकने से रोकना चाहता हूँ github.com

मुझे पता है कि मैं उपयोग कर सकता हूं StrictHostKeyChecking=no(जैसे यह उत्तर ), लेकिन यह सुरक्षित नहीं है।

अब तक, मैंने पाया है ...

  1. GitHub ने अपनी SSH प्रमुख उंगलियों के निशान https://help.github.com/articles/github-s-ssh-key-fingerprints/ पर प्रकाशित किए

  2. मैं ssh-keyscanमेजबान कुंजी प्राप्त करने के लिए उपयोग कर सकता हूं github.com

मैं इन तथ्यों को कैसे संयोजित करूं? उंगलियों के निशान की एक पूर्वनिर्मित सूची को देखते हुए, मैं यह कैसे सत्यापित ssh-keyscanकर सकता हूं कि known_hostsफ़ाइल में आउटपुट जोड़ा जा सकता है ?


मुझे लगता है कि मैं निम्नलिखित पूछ रहा हूँ:

मैं किस कुंजी के लिए फिंगरप्रिंट प्राप्त कर सकता हूं ssh-keyscan?

मान लेते हैं कि मैं पहले से ही SSH के लिए MITM-ed कर चुका हूं , लेकिन मैं GitHub HTTPS पेज पर भरोसा कर सकता हूं (क्योंकि इसमें एक वैध प्रमाणपत्र श्रृंखला है)।

इसका मतलब है कि मुझे कुछ (संदिग्ध) SSH होस्ट कुंजी (से ssh-keyscan) और कुछ (विश्वसनीय) कुंजी फिंगरप्रिंट मिले हैं। मैं एक को दूसरे के खिलाफ कैसे सत्यापित करूं?


संबंधित: मैं आउटपुट के होस्ट भाग को कैसे हैश करता हूँ ssh-keyscan? या क्या मैं हैशड / अनहैस्ड होस्ट को मिक्स कर सकता हूं known_hosts?


यह आपके उपयोग के मामले के लिए सुरक्षित क्यों नहीं होगा?
चतुर्भुज

StrictHostKeyChecking=noMITM के लिए असुरक्षित है। क्या ssh-keyscanMITM के खिलाफ सुरक्षित है?
रोजर लिप्सकॉम्ब

मैं यह समझने में विफल रहता हूं कि मैं किसी ऐसे व्यक्ति के बारे में चिंतित क्यों हूं, जो किसी अजनबी के बारे में कह रहा है, जिनसे मैं कभी नहीं मिला, जिस पर मुझे भरोसा है कि मैं कोड लिखने के बारे में हूं, जिसे डाउनलोड करने और चलाने के लिए ...
Quadruplebucky

1
चूँकि यह github पर एक निजी रेपो में मेरा स्रोत कोड है, और मैं एक MITM (जैसे) दुर्भावनापूर्ण परिवर्तनों को पेश नहीं करना चाहता जब मैं धक्का देता हूं। वह सिर्फ एक उदाहरण है।
रोजर लिप्सकॉम्ब

मैं (बेहतर या बदतर के लिए) गितुब पर भरोसा करना चाहता हूं मैं अपने और उनके बीच के हर यादृच्छिक नेटवर्क लिंक पर भरोसा करना नहीं चाहता।
रोजर लिप्सकॉम्ब

जवाबों:


12

known_hostsफ़ाइल की कुंजी जोड़ने "सुरक्षित रूप से" का सबसे महत्वपूर्ण हिस्सा सर्वर व्यवस्थापक से कुंजी फिंगरप्रिंट प्राप्त करना है। मुख्य फिंगरप्रिंट कुछ इस तरह दिखना चाहिए:

2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA)

GitHub के मामले में, आम तौर पर हम सीधे किसी प्रशासक से बात नहीं कर सकते हैं। हालाँकि, वे कुंजी को अपने वेब पेजों पर डालते हैं ताकि हम वहां से जानकारी पुनर्प्राप्त कर सकें।

मैनुअल कुंजी स्थापना

1) सर्वर से कुंजी की एक प्रति लें और उसका फिंगरप्रिंट प्राप्त करें। NB: फिंगरप्रिंट की जाँच करने से पहले ऐसा करें ।

$ ssh-keyscan -t rsa github.com | tee github-key-temp | ssh-keygen -lf -
# github.com:22 SSH-2.0-babeld-f3847d63
2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA)

2) सर्वर व्यवस्थापक से मुख्य फिंगरप्रिंट की एक प्रति प्राप्त करें - इस मामले में github.com पर जानकारी के साथ पृष्ठ पर नेविगेट करें

  1. Github.com पर जाएं
  2. मदद के लिए जाओ पेज (अगर में लॉग इन दाईं ओर मेनू पर, मुखपृष्ठ के नीचे अन्यथा पर)।
  3. में प्रारंभ करना अनुभाग पर जाएँ SSH के साथ GitHub से कनेक्ट
  4. अपने SSH कनेक्शन का परीक्षण करने के लिए जाएं
  5. बाद में उपयोग के लिए अपने टेक्स्ट एडिटर में उस पेज से SHA256 फिंगरप्रिंट कॉपी करें।

3) दो स्रोतों से कुंजियों की तुलना करें

पाठ संपादक में उन्हें सीधे एक के ऊपर एक रखकर, यह देखना आसान है कि क्या कुछ बदल गया है

2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA) #key recovered from github website
2048 SHA256:nThbg6kXUpJ3Gl7E1InsaspRomtxdcArLviKaEsTGY8 github.com (RSA) #key recovered with keyscan

(ध्यान दें कि दूसरी कुंजी में हेरफेर किया गया है, लेकिन यह मूल के समान है - यदि ऐसा कुछ होता है तो आप गंभीर हमले के अधीन हैं और एक विश्वसनीय सुरक्षा विशेषज्ञ से संपर्क करना चाहिए।)

यदि कुंजियाँ भिन्न हैं, तो प्रक्रिया को निरस्त करें और सुरक्षा विशेषज्ञ से संपर्क करें

4) यदि चाबियाँ सही तरीके से तुलना करती हैं, तो आपको पहले से डाउनलोड की गई कुंजी को स्थापित करना चाहिए

cat github-key-temp >> ~/.ssh/known_hosts

या सिस्टम पर सभी उपयोगकर्ताओं के लिए स्थापित करने के लिए (रूट के रूप में):

cat github-key-temp >> /etc/ssh/ssh_known_hosts

स्वचालित कुंजी स्थापना

यदि आपको निर्माण प्रक्रिया के दौरान एक कुंजी जोड़ने की आवश्यकता है, तो आपको उपरोक्त मैनुअल प्रक्रिया के चरणों का पालन करना चाहिए।

ऐसा करने के बाद, अपनी github-key-tempफ़ाइल की सामग्री की जांच करें और उन सामग्रियों को अपनी ज्ञात होस्ट फ़ाइल में जोड़ने के लिए एक स्क्रिप्ट बनाएं।

if ! grep github.com ~/.ssh/known_hosts > /dev/null
then
     echo "github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==" >> ~/.ssh/known_hosts
fi

आपको अब किसी भी कमांड से छुटकारा पाना चाहिए sshजो StrictHostKeyCheckingअक्षम हो गया है।


18

आप अपने ज्ञात_होस्ट्स फ़ाइल में हैशेड / अनशेड प्रविष्टियाँ मिला सकते हैं।

इसलिए यदि आप जीथब कुंजी जोड़ना चाहते हैं, तो आप कर सकते हैं:

ssh-keyscan github.com >> ~/.ssh/known_hosts

यदि आप इसे चाहते हैं, तो ऐड-एच

ssh-keyscan -H github.com >> ~/.ssh/known_hosts


1
हैशेड / अनशेड के बीच क्या अंतर है? मुझे पता है कि हैशिंग क्या है, बस इसे इस संदर्भ में क्यों नहीं लागू किया जाता है।
ग्लेन थॉमस

3
अपनी प्रविष्टियों को हाशिल करने से आप उन मेजबानों के बारे में जानकारी छिपा सकते हैं जिन्हें आप कनेक्ट करने के लिए उपयोग करते हैं। सुरक्षा
Wee

4
इस सवाल का जवाब नहीं है। Ssh-keyscan का उपयोग मध्य हमले में एक आदमी के अधीन है जिसका अर्थ है कि आपके द्वारा संग्रहीत की गई कुंजी आपके सिस्टम में तोड़ने की कोशिश कर रहे हमलावर से संबंधित एक कुंजी हो सकती है। चीजों को जांचने के तरीके के लिए कृपया मेरा उत्तर देखें।
माइकल

Att। उन उत्तरों पर ध्यान देना जो गलत हैं - "दो शीर्ष उत्तर वास्तव में असुरक्षित हैं"
पीटर मोर्टेंसन

6

सबसे आसान तरीका है मैन्युअल रूप से कुंजियों का उपयोग करना ssh-keyscan, उन्हें मैन्युअल रूप से सत्यापित करना:

$ ssh-keyscan -t rsa github.com | ssh-keygen -lf -
# github.com:22 SSH-2.0-libssh-0.7.0
2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA)

और उन्हें अपनी स्क्रिप्ट में जोड़ें, जो तब "आधिकारिक" सार्वजनिक कुंजी ले जाएगा।


मुझे आपके जैसी चाबी मिल गई है, मैं उन्हें 'अपनी स्क्रिप्ट में कैसे जोड़ूं'?
ग्लेन थॉमस

या तो एक अलग फ़ाइल के रूप में या आपकी स्क्रिप्ट में एक स्ट्रिंग के रूप में।
जकूजी

यह उत्तर खतरनाक है क्योंकि "मैन्युअल रूप से उन्हें सत्यापित करें" में छिपा हुआ एक पूरी कठिन प्रक्रिया है। मैंने नीचे एक उत्तर जोड़ा है जो यह बताने का प्रयास करता है कि ऐसा कैसे करें और परिणामों का सुरक्षित उपयोग करें।
माइकल

Att। उन उत्तरों पर ध्यान देना जो गलत हैं - "दो शीर्ष उत्तर वास्तव में असुरक्षित हैं"
पीटर मोर्टेंसन

1
@RogerLipscombe मैं सहमत हूं कि उत्तर को सुरक्षित रूप से व्याख्या किया जा सकता है - "उन्हें मैन्युअल रूप से सत्यापित करें" समझाया नहीं गया है, लेकिन अगर आप इसका मतलब समझते हैं "ssh मैनुअल पेज में दिए गए निर्देशों का पालन करना" तो शायद ठीक होगा। यहां जोखिम यह है कि कोई व्यक्ति यह नहीं समझ सकता है और उदाहरण के लिए, सर्वर पर लॉग इन करने के बाद कुंजी को चेक करने जैसी असुरक्षित चीजों को आज़मा सकता है। इसलिए मैंने इस उत्तर को "खतरनाक" और अन्य एक "असुरक्षित" कहा - आप मैन्युअल रूप से कैसे जांचते हैं इसका विवरण महत्वपूर्ण बिट है। स्वीकार करने के लिए धन्यवाद।
माइकल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.