सभी सार्वजनिक कुंजी को खोजने से एसश क्लाइंट को रोकें?


32

अधिकांश सीसडामिन की तरह मैं हर समय ओपनशेड का उपयोग करता हूं। मेरे पास लगभग एक दर्जन सेश की चाबियाँ हैं, मुझे प्रत्येक मेजबान के लिए एक अलग ssh कुंजी रखना पसंद है। हालाँकि यह तब समस्या का कारण बनता है जब मैं पहली बार किसी होस्ट से कनेक्ट कर रहा हूं, और मेरे पास एक पासवर्ड है। मैं केवल पासवर्ड का उपयोग करके होस्ट से कनेक्ट करना चाहता हूं, इस मामले में कोई ssh कुंजी नहीं। हालाँकि ssh क्लाइंट सभी सार्वजनिक कुंजियों की पेशकश करेगा मेरे ~/.ssh/(मुझे यह पता है कि आउटपुट को देखकर ssh -v)। चूंकि मेरे पास बहुत सारे हैं, इसलिए मुझे बहुत अधिक प्रमाणीकरण विफलताओं के लिए डिस्कनेक्ट हो जाएगा।

क्या मेरे ssh क्लाइंट को सभी ssh कुंजियाँ न बताने का कोई तरीका है?


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

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

@Huygens मैं आपके जोखिम विश्लेषण दस्तावेज़ को देखना पसंद करूँगा जिसके परिणामस्वरूप आपको कई SSH कुंजियों का उपयोग करने की आवश्यकता है, लेकिन एक स्पष्ट पाठ कुंजियाँ होना ठीक है। क्या आप एक लिंक पोस्ट कर सकते हैं?
एलेक्स होल्स्ट

@AlexHolst आपको इतना "प्रत्यक्ष" होना जरूरी नहीं है। सबसे पहले मेरा जवाब कई महत्वपूर्ण जोड़े होने के कारणों के बारे में था। मुझे लगता है कि मैंने आपको कई दिए। इसके बाद, हम सभी को quirks से निपटना होगा और क्या नहीं। मेरे पास एक परीक्षण प्रणाली है जिसके लिए मैं एक ऐप का उपयोग नहीं कर सकता हूं जो एसएसएच के माध्यम से डेटा को टनलिंग कर रहा है, बिना कुंजी पासवर्ड के लिए लगातार संकेत दिए बिना सॉफ्टवेयर को उपयोगी नहीं बनाता है। यह संस्करण असंगति या क्या नहीं के कारण एक बग प्रतीत होता है। मुझे किसी भी SSH लॉगिन के लिए ईमेल सूचना मिलती है, और मैं उस बॉक्स में केवल एक लॉगिन हूं। इसलिए जोखिम स्वीकार्य है।
ह्यूजेंस

जवाबों:


31

यह पुरुष पृष्ठ के अनुसार अपेक्षित व्यवहार है ssh_config:

 IdentityFile
         Specifies a file from which the user's DSA, ECDSA or DSA authentica‐
         tion identity is read.  The default is ~/.ssh/identity for protocol
         version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa and ~/.ssh/id_rsa for
         protocol version 2.  Additionally, any identities represented by the
         authentication agent will be used for authentication.  

         [...]

         It is possible to have multiple identity files specified in configu‐
         ration files; all these identities will be tried in sequence.  Mul‐
         tiple IdentityFile directives will add to the list of identities
         tried (this behaviour differs from that of other configuration
         directives).

असल में, IdentityFileएस निर्दिष्ट करने से बस एक वर्तमान सूची में चाबियाँ जुड़ती हैं जो एसएसएच एजेंट पहले से ही ग्राहक को प्रस्तुत करता है।

अपनी .ssh/configफ़ाइल के निचले भाग में इस व्यवहार को ओवरराइड करने का प्रयास करें :

Host *
  IdentitiesOnly yes

आप मेजबान स्तर पर भी इस सेटिंग को ओवरराइड कर सकते हैं, जैसे:

Host foo
  User bar
  IdentityFile /path/to/key
  IdentitiesOnly yes

4
आप वह भी उपयोग कर सकते हैं ssh -o "IdentitiesOnly true" -v -A user@hostजो मैं एक मशीन में लॉगिन करने के लिए उपयोग करता हूं, जिसमें मेरी कोई भी कुंजी नहीं है लेकिन मैं एजेंट-फॉरवर्डिंग की पेशकश करना चाहता हूं। ( -vक्रिया डिबगिंग के लिए)।
eckes

1
@ कि यह एक अच्छा टिप है, लेकिन यह yes(और नहीं true) हालांकि नहीं होना चाहिए ?
एसेक्स

IdentitiesOnlyहमेशा मदद नहीं कर सकता, आपको विशेष रूप से एक मेजबान को बाहर करना पड़ सकता है; देखें superuser.com/questions/859661/…
aexl

38

यद्यपि अन्य लोगों ने इसे कॉन्फ़िगरेशन-आधारित समाधानों के साथ संकेत दिया है, यह संभवतः यह इंगित करने योग्य है कि आप इसे आसानी से एक-बार केवल कमांड लाइन पर कर सकते हैं:

ssh -o 'PubkeyAuthentication no' myhostname.mydomain

3
बिल्कुल सही .. समाधान IMHO
drAlberT

1
सही है यह स्वीकृत उत्तर होना चाहिए था।
JM बेकर

11

जेम्स स्नेनर के समाधान के बाद, आप बस एक ssh_config सेट करना चाहते हैं:

Host *.mycompany.com
  IdentityFile .ssh/id_dsa_mycompany_main

Host *.mycustomer.com
  IdentityFile .ssh/id_dsa_mycustomer

Host *
  RSAAuthentication no #this should be up top, avoid ssh1 at all costs
  PubkeyAuthentication no

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


2

उपयोगकर्ता 23413 के समाधान के समान, आप किसी विशेष होस्ट (या वाइल्डकार्ड पैटर्न) के लिए सार्वजनिक कुंजी प्रमाणीकरण को पूरी तरह से अक्षम कर सकते हैं:

Host *.example.org
RSAAuthentication no        # SSHv1
PubkeyAuthentication no     # SSHv2

-1

यदि आप किसी विशेष कुंजी फ़ाइल को ssh -i / path / to / key के साथ इंगित करते हैं, तो यह केवल उसी का उपयोग करेगा, भले ही अन्य को एजेंट में लोड किया गया हो, और आपको पासवर्ड के लिए संकेत नहीं दिया जाएगा। आप इसे ~ ~ .ssh / config और कुछ इस तरह एड कर सकते हैं ...

होस्ट foo.example.com
IdentityFile .ssh / id_rsa_foo.example.com

आप भी कर सकते हैं ...

होस्ट * .example.org
IdentityFile .ssh / id_rsa_example.org


यह सिर्फ सूची के अंत में लक्ष्य कुंजी को जोड़ता है, जो समस्या को हल नहीं करेगा। IdentitiesOnlyकेवल उस इच्छा के साथ।
जोए रेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.