शश-एजेंट का उद्देश्य क्या है?


70

मैंने आधिकारिक परिभाषा पढ़ी है:

ssh-Agent सार्वजनिक कुंजी प्रमाणीकरण (RSA, DSA, ECDSA) के लिए उपयोग की जाने वाली निजी कुंजी रखने का एक कार्यक्रम है। विचार यह है कि ssh- एजेंट को X- सत्र या लॉगिन सत्र की शुरुआत में शुरू किया जाता है, और अन्य सभी विंडो या प्रोग्राम को ssh- एजेंट प्रोग्राम के क्लाइंट के रूप में शुरू किया जाता है। पर्यावरण चर के उपयोग के माध्यम से एजेंट को ssh (1) का उपयोग करके अन्य मशीनों में लॉग इन करते समय स्वचालित रूप से प्रमाणीकरण के लिए स्थित किया जा सकता है।

".. निजी कुंजी रखने के लिए एक कार्यक्रम .." - IMHO - ssh कुंजी ssh-keygen कमांड के साथ उपयोगकर्ता द्वारा उत्पन्न की जाती हैं और ~ / .ssh में सीधे और सरल रूप से संग्रहीत की जाती हैं - मुझे इन चाबियों को रखने के लिए कुछ डेमॉन की आवश्यकता क्यों है? यह वास्तव में उन्हें वैसे भी कैसे पकड़ता है - क्या वे सिर्फ .ssh में संग्रहीत नहीं हैं?

"ssh- एजेंट प्रोग्राम के क्लाइंट के रूप में शुरू किया गया है" - मुझे यह नहीं मिला। इसकी आवश्यकता कहां होगी? मैं आमतौर पर ssh का उपयोग इस रूप में करता हूं:

 ssh -i ~/.ssh/private_key_name username@hostname

"क्लाइंट" द्वारा मैनुअल का वास्तव में क्या मतलब है - क्या क्लाइंट? क्या आप कनेक्ट करने के लिए टर्मिनल से सिर्फ ssh कमांड नहीं चलाते हैं - अन्य क्लाइंट क्या हैं और वे ssh कमांड की तरह ही उस ssh निजी फ़ाइल के लिए पथ का उपयोग क्यों नहीं कर सकते हैं?

जवाबों:


75

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

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

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

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


10
मुझे लगता है कि यह सबसे पूर्ण उत्तर है, लेकिन अभी भी एक बिंदु गायब है। एक कुंजी एजेंट का उपयोग करना भी आसानी से कई कुंजी का उपयोग करने की अनुमति देता है। कुंजी को पथ निर्दिष्ट करने के लिए होने के बजाय, जब एक प्रमुख एजेंट ssh का उपयोग करते हुए इसमें हर कुंजी का प्रयास किया जाएगा।
पैट्रिक

3
@Patrick जो कि इसका नुकसान भी हो सकता है - एक सर्वर पर बहुत अधिक अमान्य कुंजियों को आज़माएं और इससे पहले कि आप वैध कुंजी पर पहुँचें, कनेक्शन बंद कर दें। बेशक, यह क्या हो रहा है ~/.ssh/configके IdentityFileविकल्प के साथ या एजेंट के बिना, के लिए अच्छा है
टोबियास Kienzler

@ पैट्रिक जो एक एजेंट के बिना समान रूप से संभव लगता है
एंड्री

@AndreyFedorov हाँ आपके पास एजेंट के बिना कई कुंजियाँ हो सकती हैं, लेकिन आप यह भी निर्दिष्ट कर सकते हैं कि कौन ~/.ssh/configसी कुंजी किस रिमोट होस्ट के लिए उपयोग की जाए, ताकि यह ठीक से पता चल सके कि इसे किसकी आवश्यकता है।
पैट्रिक

3
इसलिए ssh-agentयदि कोई निजी कुंजी पासफ़्रेज़ द्वारा संरक्षित नहीं है, तो यह मान सकते हैं कि यह आवश्यक नहीं है?
पैरामोल

16

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


7

यदि आप नियमित रूप sshसे विभिन्न मशीनों में से प्रत्येक में, अपनी-अपनी कुंजी और पासफ़्रेज़ के साथ हैं, तो रनिंग ssh-agentआपको अपने सत्र की शुरुआत में 1 बार प्रत्येक कुंजी के लिए पासफ़्रेज़ दर्ज करने की अनुमति देती है और फिर आप कई बार प्रत्येक मशीन को प्रमाणित कर सकते हैं जैसा कि आप अपने पासफ़्रेज़ को फिर से दर्ज किए बिना पसंद करते हैं।

एक और लाभ यह है कि, manपृष्ठ के अनुसार , एजेंट अपने अनुरोध चैनल पर एक निजी कुंजी कभी नहीं भेजता है; इसलिए यदि आप विभिन्न बक्से के बीच में रुक रहे हैं, तो आपकी निजी कुंजियाँ सुरक्षित हैं।

1 आप उस lifeसमय को सेट कर सकते हैं जब एजेंट में चाबियाँ रखी जाती हैं।


6

विकिपीडिया लेख में शायद सबसे अच्छा वर्णन है:

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

विकिपीडिया लेख से फिर से शब्दश:

... ssh- एजेंट एक सॉकेट बनाता है और फिर ssh से कनेक्शन की जाँच करता है। हर कोई जो इस सॉकेट से जुड़ने में सक्षम है, उसकी भी ssh-Agent तक पहुंच है। अनुमतियाँ एक सामान्य लिनक्स या यूनिक्स प्रणाली में सेट की गई हैं। जब एजेंट शुरू होता है, तो यह प्रतिबंधात्मक अनुमतियों के साथ / tmp में एक नई निर्देशिका बनाता है। सॉकेट फ़ोल्डर में स्थित है।

यह आम तौर पर या तो एक प्रणाली या उपयोगकर्ता के आर सी फाइल में रखा है जैसे $HOME/.bashrcया $HOME/.profile(बैश के गोले के लिए) ताकि वातावरण चर ssh-agentपूरी तरह से अपने परिवेश में शामिल करने के लिए सेट करें।

मेरे फेडोरा 14 सिस्टम पर यह X11 सबसिस्टम के हिस्से के रूप में बहुत पहले शुरू होता है। इस फ़ाइल में /etc/X11/xinit/xinitrc-common:

# Prefix launch of session with ssh-agent if available and not already running.
SSH_AGENT=
if [ -z "$SSH_AGENT_PID" ] && [ -x /usr/bin/ssh-agent ]; then
    if [ "x$TMPDIR" != "x" ]; then
        SSH_AGENT="/usr/bin/ssh-agent /bin/env TMPDIR=$TMPDIR"
    else
        SSH_AGENT="/usr/bin/ssh-agent"
  fi
fi

चर $SSH_AGENTको अन्य X11 स्टार्ट-अप स्क्रिप्ट में उपयोग किया जाता है जैसे कि /etc/X11/xinit/Xclients:

exec -l $SHELL -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh"

इसे यहां शामिल करके, निम्नलिखित पर्यावरण चर को माता-पिता के खोल के हिस्से के रूप में स्थापित किया जा रहा है, इसलिए सभी कांटे वाले बच्चों के पास भी उन्हें होना चाहिए, उदाहरण के लिए:

SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK;
SSH_AGENT_PID=18959; export SSH_AGENT_PID;

इसमें थोड़ी और जटिलता है लेकिन संक्षेप में यह मूल रूप से यही है ssh-agent

गनोम में उदाहरण के लिए, ssh-agentवास्तव में एक स्टार्ट-अप एप्लिकेशन के रूप में प्रति उपयोगकर्ता लॉन्च किया जाता है:

                     स्टार्टअप ऐप्स के एस.एस.

टी एल; डॉ

निचला रेखा, ssh-agentमौजूद है ताकि जब आपकी ssh कुंजियों की आवश्यकता हो, तो आपको उन्हें केवल एक बार अपने पासफ़्रेज़ के साथ अनलॉक करना होगा (यह मानते हुए कि उनके पास एक है), और तब से वे स्मृति (RAM) में उनके डिक्रिप्टेड रूप में उपलब्ध हैं।


1

"ssh- एजेंट प्रोग्राम के लिए क्लाइंट के रूप में शुरू किया जाता है" इस विचार को संदर्भित करता है कि ssh- एजेंट को (स्थानीय) लॉगिन सत्र के प्रारंभ के दौरान शुरू किया जाता है ताकि सभी कार्यक्रमों को पर्यावरण चर मिलें $SSH_AGENT_PIDऔर $SSH_AUTH_SOCKजो एजेंट को जोड़ने के लिए आवश्यक हों।

निजी कुंजी को ssh से बाहर निकालने का एक और फायदा यह है कि ssh-Agent को gpg- एजेंट द्वारा प्रतिस्थापित किया जा सकता है। इस प्रकार आप SSH के लिए OpenPGP कुंजियों (प्रमाणीकरण क्षमता के साथ) का उपयोग कर सकते हैं। स्मार्टकार्ड पर OpenPGP कुंजियों के लिए यह एक अच्छा समाधान है।

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