बस OpenSSH ssh के ControlPath विकल्प में% h का उपयोग क्यों नहीं किया जाता है?


13

क्यों "ssh_config (5)" manpages अनुशंसा करते हैं कि है ControlPathविकल्प कम से कम होनी चाहिए %h, %pऔर %rप्लेसहोल्डर क्रम में करने के लिए विशिष्ट पहचान प्रत्येक साझा कनेक्शन?

मैंने सोचा था कि एक ही होस्ट के कनेक्शन के साथ कई सत्रों को एक ही सॉकेट साझा करना चाहिए । क्या तब इसका कोई मतलब नहीं होगा जैसे कि एक सरल परिभाषा:

ControlPath ~/.cache/ssh/mux/%h

इसके बजाय कुछ की तरह:

ControlPath ~/.cache/ssh/mux/%r@%h:%p

पहली परिभाषा के साथ मेरी समझ में अलग-अलग दूरस्थ बंदरगाहों पर एक ही दूरस्थ होस्ट के लिए, विभिन्न दूरस्थ उपयोगकर्ताओं के साथ कई सत्रों के बीच एक कनेक्शन साझा किया जाता है।

मैं होस्ट डिफॉल्ट सेक्शन में पहला डिफिनेशन रखना चाहता हूं ताकि यह कहने के लिए पर्याप्त हो ssh -o ControlMaster=no

मैं दूरस्थ उपयोगकर्ता और दूरस्थ बंदरगाह की परवाह किए बिना एक ही स्थानीय उपयोगकर्ता द्वारा शुरू किए गए सभी सत्रों के बीच एक ही दूरस्थ होस्ट से कनेक्शन साझा करना चाहता हूं। मास्टर क्लाइंट के सॉकेट को स्थानीय उपयोगकर्ता के घर निर्देशिका के नीचे रहना चाहिए।


"मैं दूरस्थ उपयोगकर्ता और दूरस्थ पोर्ट की परवाह किए बिना एक ही स्थानीय उपयोगकर्ता द्वारा शुरू किए गए सभी सत्रों के बीच एक ही दूरस्थ होस्ट से कनेक्शन साझा करना चाहता हूं।" संक्षिप्त उत्तर: आप नहीं कर सकते । मैंने अपने उत्तर में एक प्रकार का स्पष्टीकरण जोड़ा है।
गोल्डीलॉक्स

जवाबों:


13

"मुझे लगा कि कई सत्रों को एक ही होस्ट के कनेक्शन के साथ एक ही सॉकेट साझा करना चाहिए।"

वे कर सकते हैं। हालाँकि, ध्यान दें कि यदि आप किसी मौजूदा कनेक्शन का उपयोग करके होस्ट से कनेक्ट करते हैं, तो आप ControlPathकिस उपयोगकर्ता के रूप में लॉग इन करना चाहते हैं, आप कनेक्शन के मूल उपयोगकर्ता के रूप में लॉग इन होंगे। उदा।, "कहीं" से कोई स्थापित कनेक्शन नहीं:

ssh -o ControlPath=~/.ssh/%h -o ControlMaster=yes bob@somewhere

यह सत्र कहीं न कहीं बॉब @ है।

ssh -o ControlPath=~/.ssh/%h -o ControlMaster=no sue@somewhere

यह सत्र भी कहीं न कहीं bob @ होगा, क्योंकि आपने एक ही ControlPath और सेट का उपयोग किया था ControlMaster=no; यदि ControlMaster=yes, आपको मुकदमा के रूप में लॉग इन किया जाएगा, लेकिन ssh ने आपके ControlPath तर्क को अनदेखा कर दिया होगा, जैसा कि इसमें निहित है man ssh_config:

अतिरिक्त सत्र इस सॉकेट से कनेक्ट कर सकते हैं जो ControlMaster के साथ उसी ControlPath का उपयोग करके 'नहीं' पर सेट होता है

इसके प्रमाण के रूप में, यदि ControlMaster=yesदोनों स्थितियों में, जब बॉब कंट्रोलपॉकेट सॉकेट ~/.ssh/somewhereसे बाहर निकलता है, भले ही "मुकदमा" सत्र अभी भी चल रहा हो, जिसका अर्थ है कि मुकदमा सत्र ने उस सॉकेट का उपयोग कभी नहीं किया

इसलिए, यदि आप एक ही कनेक्शन का उपयोग करना चाहते हैं, तो बस %hठीक है, लेकिन सावधान रहें कि आप एक कनेक्शन को कई अलग-अलग दूरस्थ उपयोगकर्ताओं के रूप में साझा नहीं कर सकते - ssh आपको नहीं होने देंगे।


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

5

आपके पास एक ही सर्वर के लिए उपयोग में कई उपयोगकर्ता और कई पोर्ट हो सकते हैं। स्वयं, मैं कंपनी के इंट्रानेट पर सैकड़ों प्रणालियों से जुड़ता हूं, अधिकांश में विभिन्न कार्यों या ऐप सर्वर के साथ कई उपयोगकर्ता हैं। UserA तक पहुँच userB तक पहुँचने के लिए बहुत अलग है, और मास्टर कनेक्शन को अलग करने की आवश्यकता होगी। अधिक सफलतापूर्वक, यदि आप दौड़ रहे थे:

$ ssh -n -o ControlMaster=auto -o ControlPath=~/.cache/ssh/mux/%h -l userA localhost sleep 10 & # create the master connection and background it
$ ssh -o ControlMaster=auto -o ControlPath=~/.cache/ssh/mux/%h -l userB localhost whoami
userA

जैसा कि आप देख सकते हैं, हमें userB के साथ OpenSSH सत्र नहीं मिलता है, लेकिन userA के साथ मूल है। इसका मतलब है कि होम डायरेक्टरी, परमिशन और यहां तक ​​कि ऑथेंटिकेशन भी वैसा नहीं है जैसा कि अपेक्षित है। इसका उपयोग करते हुए, यदि आप उपयोगकर्ता की निर्देशिका में किसी फ़ाइल को हटाने की कोशिश कर रहे थे, तो a) यह गलत फ़ाइल हो सकती है और b) यह गलत अनुमतियाँ हो सकती हैं।

यदि आप कभी भी एकल पोर्ट का उपयोग करके किसी एक सर्वर पर एक से अधिक उपयोगकर्ता से कनेक्ट नहीं होंगे, तो हाँ, का उपयोग %hकरना पर्याप्त हो सकता है। अपनी ~/.ssh/configफ़ाइल में, आप उपयोग करना चाहेंगे:

ControlMaster=auto  # use existing or create a master connection
ControlPath=~/.cache/ssh/mux/%h
ControlPersist=yes

ControlPersistविकल्प के साथ , मास्टर कनेक्शन पृष्ठभूमि में तब तक खुला रहता है जब तक कि उसे मार डाला या समाप्त नहीं कर दिया जाता ssh -O exit। यह एक अच्छा सेट-इट-एंड-भूल-इट सुविधा है।

लेकिन अगर किसी एक होस्ट पर एक से अधिक उपयोगकर्ता से जुड़ने की कोई संभावना है, तो आप कुछ अधिक सुरक्षित चाहते हैं:

ControlMaster=auto
ControlPath=~/.cache/ssh/mux/%r@%h:%p
ControlPersist=yes

मैं अभी भी असमंजस में हूँ। मैंने कॉन्फ़िगरेशन परिदृश्य और "मैं चाहता हूं" पैराग्राफ में अपने इरादे को स्पष्ट करने की कोशिश की। क्या आप में से कोई भी इस अतिरिक्त जानकारी के साथ मेरे प्रश्न का अधिक सटीक उत्तर दे सकता है?
टिम फ्रिसके
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.