मुझे SSH के लिए सार्वजनिक कुंजी प्रमाणीकरण का उपयोग क्यों करना चाहिए?


26

मैं एक SSH सर्वर चला रहा हूं और मैं अभी भी सरल पासवर्ड प्रमाणीकरण का उपयोग कर रहा हूं। हर जगह मैंने सुरक्षा के बारे में पढ़ा है मुझे सार्वजनिक कुंजी प्रमाणीकरण का उपयोग करने की सलाह दी जाती है। लेकिन मुझे इसके फायदे नहीं मिले। उनका उपयोग करना, मेरी नज़र में, या तो असुरक्षित है या बहुत काम है।

बेशक, अगर कोई मेरे SSH सर्वर में लॉग-ब्रुट करने की कोशिश करता है तो Public-Key किसी भी पासवर्ड से बहुत अधिक मजबूत है। लेकिन इससे अलग, यह पूरी तरह से असुरक्षित है।

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

संभवतः मैं टू-फैक्टर ऑथेंटिकेशन के साथ बेहतर काम कर रहा हूं।

क्या मुझे कोई तर्क याद आ रहा है? मेरे लिए सबसे अच्छा तरीका क्या है?


10
जब सही किया जाता है, तो सार्वजनिक कुंजी प्रमाणीकरण 2FA का एक रूप होता है जिसे आप जानते हैं (निजी कुंजी के पासफ़्रेज़) और आपके पास कुछ (निजी कुंजी)।
स्वेन

1
@EEAA जब तक आपकी निजी कुंजी एक है तब तक यह क्यों मायने रखता है ?
user253751

6
एक निजी कुंजी के साथ, अगर मैं आपको गलती से गलत सर्वर से कनेक्ट करने में धोखा देता हूं, तो आप अपना पासवर्ड मेरे सर्वर में टाइप न करें।
user253751

1
कई संगठनों को (जो भी कारण से) दो-कारक का उपयोग करने की आवश्यकता होती है। एन्क्रिप्टेड निजी कुंजियों पर भरोसा करके ऐसा करना असंभव है।
ईएएए

6
जो इसके लायक है, मैं निजी कुंजी के वर्गीकरण के बारे में स्वेन के साथ असहमत हूं जो आपके पास है । यह आपके पास मौजूद किसी चीज़ के मूलभूत परीक्षण को विफल कर देता है , क्योंकि यह मनमाने ढंग से प्रतिलिपि प्रस्तुत करने योग्य है, केवल डिजिटल डेटा होने के नाते। सार्वजनिक-कुंजी प्रमाणीकरण अपने आप में 2FA नहीं है ; यदि आप अपने आप से कहते हैं कि आप अपनी सुरक्षा के बारे में खुद को मूर्ख बना रहे हैं।
MadHatter

जवाबों:


32

अगर कोई मेरे कंप्यूटर में हैक करता है, तो उसे सिर्फ मेरा कंप्यूटर नहीं मिलता है, लेकिन मेरा सर्वर भी?

यह संभावित रूप से वैसे भी keyloggers के साथ सच है: जैसे ही आप समझौता किए गए कंप्यूटर से अपने सर्वर में लॉग इन करते हैं, उन्हें पासवर्ड मिलता है।

लेकिन कुंजियों के 3 फायदे हैं:

1) कैशेबल प्रमाणीकरण। एक बार अपना पासफ़्रेज़ दर्ज करें, कई ssh कमांड को पूरा करें। यह बहुत ही उपयोगी है यदि आप किसी ऐसी चीज का उपयोग कर रहे हैं जो एसपीएस को परिवहन के रूप में उपयोग करती है, जैसे एससीपी, आरएसक्यूएन या गिट।

2) स्केलेबल प्रमाणीकरण। एक बार अपना पासफ़्रेज़ दर्ज करें, कई मशीनों में प्रवेश करें । आपके पास जितनी अधिक मशीनें हैं, यह उतना ही उपयोगी है। यदि आपके पास 100 मशीनें हैं, तो आप क्या करते हैं? आप एक ही पासवर्ड का उपयोग नहीं कर सकते हैं (जब तक कि यह एक क्लोन खेत नहीं है), और आप यह याद नहीं रख सकते। तो आपको एक पासवर्ड मैनेजर का उपयोग करना होगा, और आप एक ही बिंदु पर समझौता करेंगे। प्रभावी ढंग से कुंजी पदबंध है अपना पासवर्ड मैनेजर।

2 बी) यदि आप एक ही सिस्टम का उपयोग करते हुए कई एडिंस हैं, तो यह दूसरे तरीके से मापता है, क्योंकि आप B, C, D, E, F ... को बताए बिना उपयोगकर्ता A से कुंजियों को निरस्त कर सकते हैं ... कि पासवर्ड बदल गया है।

(यह व्यक्तिगत खातों और sudo के साथ भी किया जा सकता है, लेकिन फिर आपको उन खातों को किसी तरह से प्रावधान करना होगा)

3) स्वचालन और आंशिक प्रतिनिधिमंडल। आप एक विशेष कमांड को चलाने के लिए SSH सेट कर सकते हैं जब एक कुंजी कनेक्ट होती है । यह सिस्टम ए पर स्वचालित प्रक्रिया को दोनों के बीच पूर्ण पासवर्ड रहित विश्वास के बिना सिस्टम बी पर कुछ करने में सक्षम बनाता है।

(यह rlogin / rsh के लिए एक प्रतिस्थापन है, जो प्रफुल्लित करने वाला असुरक्षित था)

संपादित करें: पासवर्ड के बजाय सार्वजनिक कुंजी का एक और लाभ आम परिदृश्य है जहां सर्वर को भेद्यता के माध्यम से समझौता किया जाता है। इस स्थिति में, पासवर्ड के साथ लॉग इन करना तुरंत पासवर्ड से समझौता करता है। एक कुंजी के साथ लॉग इन नहीं करता है! मैं कहूंगा कि यह व्यवस्थापक के मूल डेस्कटॉप से ​​समझौता होने की तुलना में अधिक सामान्य है।


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

केंद्रीय रूप से अधिकृत कुंजी के प्रबंधन के लिए क्या तकनीकें हैं? (मैं एक साझा फाइलसिस्टम पर
अधिकृत_की

1
इस बिंदु पर आपके पास कई दसियों या सैकड़ों सर्वर हैं, आप शायद शेफ, ऐंसेबल, कठपुतली, होलो या ऐसा कुछ उपयोग कर रहे हैं जो उन्हें प्रबंधित करता है। या आपके पास LDAP या अन्य डेटाबेस में अधिकृत कुंजी है।
जोनास स्फेफर

1
एजेंट फॉरवर्डिंग को न भूलें: आप ssh -Aवहां से लॉग इन कर सकते हैं और वहां से मशीनों में लॉग इन कर सकते हैं, जिससे आप की पब्लिक को होस्ट करने की सुविधा मिलती है।
हाफगैर

@ हेलफगर ... विशेष रूप से होस्ट से कुछ भी बदले बिना आप से कनेक्ट कर रहे हैं। मैंने अभी उस सुविधा को सीखा है, और मुझे यह पसंद है!
कनाडाई ल्यूक पुनर्जीवित मोनाका

12

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

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

ऐसे ही पोस्ट हैं:

  1. सर्वरफॉल्ट से पोस्ट करें ।
  2. सिक्योरिटी स्टैकएक्सचेंज से पोस्ट करें ।
  3. सुपरयुजर से पोस्ट ।

2
Keyphrase एक IMHO होना चाहिए। Ssh-agent का उपयोग करते समय, एक निश्चित समय के बाद इसे अनलोड करने के लिए ssh-add -t विकल्प पर एक नज़र डालें।
फूरो

12

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

(यह बात तब लागू होती है जब हमलावर सर्वर को नियंत्रित करने का प्रबंधन करता है, और ऐसे अन्य सर्वर होते हैं जहां समान क्रेडेंशियल्स काम करते हैं।)

मानक पासवर्ड-आधारित प्रमाणीकरण के साथ, आप अपना पासवर्ड (एन्क्रिप्टेड कनेक्शन के अंदर) सादे पाठ में जमा कर रहे हैं, वास्तविक सर्वर सामान्य रूप से इसे हैश करेगा और इसके पासवर्ड डेटाबेस में संग्रहीत हैश के परिणाम की तुलना करेगा। एक MitM हमलावर बजाय इस पासवर्ड को ले सकता है, वास्तविक सर्वर से एक कनेक्शन खोल सकता है, और वहां लॉगिन कर सकता है ... और या तो आपको सामग्री अग्रेषित कर रहा है (इसलिए आप कुछ भी नोटिस नहीं करते हैं), या बस अपने सर्वर पर अपना स्वयं का दुष्ट सामान कर रहे हैं ।

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

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


2

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


2

आप "आपको पासवर्ड की आवश्यकता नहीं है" दावे के बारे में सही हैं। यह वास्तव में ग्राहक की ओर से असुरक्षित है।

बहुत अधिक सुरक्षित में लॉगिंग के लिए केवल सार्वजनिक कुंजी की अनुमति देने से क्या तथ्य है कि आपके सर्वर तक बल पहुंच को भंग करने का कोई तरीका नहीं है। सभी एक हमलावर होगा जो हासिल कर सकता है अपने सर्वर पर कुछ भार डालना - आप उस पर नजर रखने के लिए fail2ban को नियोजित कर सकते हैं ।

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


3
बल पहुंच का कोई तरीका नहीं ... मैं कोई रास्ता नहीं कहूंगा ... आप निजी कुंजी को पासवर्ड की तरह ही bruteforce कर सकते हैं, लेकिन आपके पास सामान्य पासवर्ड की तुलना में निजी कुंजी में अधिक एंट्रॉपी है, जो इसे बनाता है काफी बेकार (क्वांटम कंप्यूटर के बिना अब तक)।
जकूजी

0

संभवतः मैं टू-फैक्टर ऑथेंटिकेशन के साथ बेहतर काम कर रहा हूं।

SSH के लिए 2FA (और अपेक्षाकृत कम सेटअप / जटिलता की आवश्यकता होती है) के लिए एक संभावना वास्तव में एक सार्वजनिक कुंजी और पासवर्ड का उपयोग करना है।

मेरा मानना ​​है कि उस काम AuthenticationMethods publickey,keyboard-interactiveको /etc/ssh/sshd_configकरने के लिए कुछ लाइनों को जोड़ा जा सकता है ।

आमतौर पर, मुद्दा यह है कि पासवर्ड (अकेले) प्रमाणीकरण के लिए एक बढ़िया तरीका नहीं है क्योंकि वे अक्सर संदिग्ध गुणवत्ता वाले होते हैं। चाबियाँ बनाम पासवर्ड के लिए एक बहुत ही सरल 'तर्क' यह है कि एक कुंजी आम तौर पर कम से कम 2048 बिट्स होगी, और अक्सर अधिक (ईसी कुंजी के लिए, यह वास्तविक आकार के बजाय प्रभावी ताकत होगी)। वे बिट्स भी क्रिप्टोलॉजिकली सिक्योर (या उपयुक्त) मैकेनिज्म द्वारा उत्पन्न होते हैं।

एक पासवर्ड अक्सर 2048 बिट्स से कम होता है, और अक्सर क्रिप्टोग्राफिक रूप से सुरक्षित स्रोत से प्राप्त नहीं होता है।

आप अपनी कुंजी को पासवर्ड के साथ सुरक्षित कर सकते हैं, ताकि उन्हें खोने से संबंधित समस्याओं से रक्षा कर सकें (हालांकि कोई व्यक्ति उस पासवर्ड को बल और प्रयास कर सकता है)।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.