2013-02-01 13 views
10

हम कुछ सर्वर प्रक्रियाओं के स्वचालन में सुधार करने की कोशिश कर रहे हैं; हम फैब्रिक का उपयोग करते हैं। मुझे लगता है कि कई होस्ट प्रबंधित करना है, और इसका मतलब है कि एसएसएच कनेक्शन उन सर्वरों पर किए जाने चाहिए जिन्हें पहले एसएसएच नहीं किया गया था। यदि ऐसा होता है, तो एसएसएच हमेशा कनेक्शन के सत्यापन के लिए पूछता है, जो स्वचालन को तोड़ देगा।फैब्रिक के साथ एसएसएच विकल्प कैसे पास करें?

मैंने एक एसएसएच कमांड पर -o stricthostkeychecking=no विकल्प का उपयोग करके, उसी प्रक्रिया में, इस समस्या के आसपास काम किया है, जिसका उपयोग मैं rsync के साथ कोड सिंक्रनाइज़ करने के लिए करता हूं, लेकिन मुझे इसे फैब्रिक के साथ कॉल पर भी उपयोग करने की आवश्यकता होगी।

क्या फैब्रिक को एसएसएच-विशिष्ट विकल्पों को पारित करने का कोई तरीका है, विशेष रूप से मैंने उपरोक्त उल्लेख किया है?

उत्तर

8

संक्षिप्त उत्तर है:

  1. नए मेजबान के लिए, कुछ भी नहीं की जरूरत है। env.reject_unknown_hostsFalse
  2. बदले गए कुंजियों के साथ ज्ञात होस्ट के लिए, env.disable_known_hosts = True परिवर्तित मेजबानों से कनेक्ट होने का निर्णय लेगा।

पढ़ें Ye Olde डॉक्स: http://docs.fabfile.org/en/1.5/usage/ssh.html#unknown-hosts

paramiko पुस्तकालय लोड होने की अपनी known_hosts फ़ाइल, करने में सक्षम है और उसके बाद किसी भी मेजबान उससे कनेक्ट हो, कि मानचित्रण के साथ तुलना करेंगे। सेटिंग्स निर्धारित करने के लिए क्या होता है जब उपलब्ध एक अज्ञात मेजबान (एक मेजबान जिसका उपयोगकर्ता नाम या IP known_hosts में नहीं मिला है) में देखा जाता है कर रहे हैं:

  • अस्वीकार करें: होस्ट कुंजी अस्वीकार कर दिया है और कनेक्शन नहीं किया जाता है । इसका परिणाम पाइथन अपवाद में होता है, जो आपके फैब्रिक सत्र को उस संदेश के साथ समाप्त कर देगा जो होस्ट अज्ञात है।
  • जोड़ें: ज्ञात मेजबान की इन-मेमोरी सूची में नई होस्ट कुंजी जोड़ दी गई है, कनेक्शन बनाया गया है, और चीजें सामान्य रूप से जारी रहती हैं। ध्यान दें कि यह आपकी ऑन-डिस्क ज्ञात_होस्ट फ़ाइल को संशोधित नहीं करता है!
  • पूछें: अभी तक फैब्रिक स्तर पर लागू नहीं किया गया है, यह एक paramiko लाइब्रेरी विकल्प है जिसके परिणामस्वरूप उपयोगकर्ता को अज्ञात कुंजी के बारे में संकेत दिया जा रहा है और इसे स्वीकार करना है या नहीं।

अस्वीकार या होस्ट करता है, जैसा कि ऊपर, के माध्यम से कपड़ा में नियंत्रित किया जाता है env.reject_unknown_hosts विकल्प है, जो सुविधा के लिये डिफ़ॉल्ट रूप से गलत है जोड़ने के लिए है या नहीं। हमें लगता है कि यह सुविधा और सुरक्षा के बीच एक वैध व्यापार है; जो भी अन्यथा महसूस करता है वह env.reject_unknown_hosts = True सेट करने के लिए मॉड्यूल स्तर पर उनकी fabfiles को आसानी से संशोधित कर सकता है।

http://docs.fabfile.org/en/1.5/usage/ssh.html#known-hosts-with-changed-keys

बदली हुई कुंजी
साथ

ज्ञात मेजबान

SSH के प्रमुख/अंगुली की छाप नज़र रखने की बात है तो यह है कि मैन-इन-द-मिडल हमलों का पता लगाया जा सकता है: अगर एक हमलावर रीडायरेक्ट अपने एसएसएच यातायात को उसके नियंत्रण में कंप्यूटर पर, और आपका मूल गंतव्य सर्वर होने का नाटक करता है, होस्ट कुंजी मेल नहीं खाती है।इस प्रकार, एसएसएच (और इसके पायथन कार्यान्वयन) का डिफ़ॉल्ट व्यवहार है जब कनेक्शन पहले में दर्ज किया गया होस्ट ज्ञात_होस्ट अचानक हमें एक अलग मेजबान कुंजी भेजना शुरू कर देता है।

कुछ ईसी 2 तैनाती जैसे कुछ किनारे मामलों में, आप इस संभावित समस्या को अनदेखा कर सकते हैं। लिखने के समय, हमारी एसएसएच परत, हमें इस सटीक व्यवहार पर नियंत्रण नहीं देती है, लेकिन हम ज्ञात_होस्ट की लोडिंग को छोड़कर पर जा सकते हैं - यदि मेजबान सूची की तुलना खाली है, तो वहां कोई नहीं है मुसीबत। जब आप इस व्यवहार को चाहते हैं तो env.disable_known_hosts को सही पर सेट करें; डिफ़ॉल्ट एसएसएच व्यवहार को संरक्षित करने के लिए यह डिफ़ॉल्ट रूप से गलत है।

चेतावनी env.disable_known_hosts सक्षम करने से आप मैन-इन-द-बीच हमलों के लिए खुले खुले रहेंगे! कृपया सावधानी के साथ उपयोग करें।

+0

उत्कृष्ट, बहुत बहुत धन्यवाद! –

संबंधित मुद्दे