क्यों ssh- एजेंट का उत्पादन eval?


66

चलाने के लिए ssh-agentमुझे इस्तेमाल करना होगा

eval $(ssh-agent)

मुझे evalआउटपुट क्यों करना है ssh-agent?

इसे क्यों नहीं बनाया गया है ताकि मैं इसे चला सकूं?


नोट: हटाए गए बैकटिक्स (`) हटाए जा रहे हैं। आप उदाहरण के लिए इसके बारे में अधिक यहाँ पढ़ सकते हैं


कौन कहता है कि आपको इवल का उपयोग करना होगा? यह क्या हुक्म चला रहा है? थोड़ा और संदर्भ मदद करेगा।
0xSheepdog


9
@ 0xSheepdog manपेज शुरू करने के लिए ...
jasonwryan

लगता है कि उपयोग के मामले मैन पेज में दर्ज़ हैं। के रूप में "क्यों इसे एक निश्चित तरीके से डिजाइन किया गया है" ... श्रग
0xSheepdog

5
दोहराते हुए, यह नहीं है ssh-agentकि "इस तरह से डिज़ाइन किया गया है", यह यूनिक्स / लिनक्स है, क्योंकि ssh-agentशेल के एक बच्चे की प्रक्रिया में चलता है। बाल प्रक्रियाएं मूल प्रक्रियाओं को संशोधित नहीं कर सकती हैं। लेकिन एक फ़ंक्शन ऐसा कर सकता है: क्योंकि यह वर्तमान प्रक्रिया में चलता है। तो आप एक फ़ंक्शन लिख सकते हैं: do_set_ssh_agent() { eval ssh-agent ; }और जिसे बस के रूप में चलाया जा सकता है $ do_set_ssh_agent:। लेकिन "प्रोग्राम" लिनक्स (यूनिक्स) में "फ़ंक्शन" के रूप में स्थापित नहीं किए जाते हैं (आमतौर पर); इसके बजाय, प्रोग्राम फ़ाइलों के रूप में स्थापित किए जाते हैं, जो कि, जैसा कि उल्लेख किया गया है, एक बच्चे की प्रक्रिया में चलता है। (सोर्सिंग स्क्रिप्ट एक अपवाद है, लेकिन ssh- एजेंट द्विआधारी है।)
माइकल

जवाबों:


79

ssh-agent पर्यावरण वैरिएबल को आउटपुट करता है जिसे आपको उससे कनेक्ट करने की आवश्यकता होती है:

shadur@proteus:~$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-492P67qzMeGA/agent.7948; export SSH_AUTH_SOCK;
SSH_AGENT_PID=7949; export SSH_AGENT_PID;
echo Agent pid 7949;
shadur@proteus:~$ 

कॉल करके evalआप तुरंत उन चर को अपने वातावरण में लोड करते हैं।

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

आप के आसपास हो सकता है evalका उपयोग करके ssh-agent utilityजहां utilityअपना लॉगिन खोल, अपने विंडो प्रबंधक या जो कुछ भी दूसरी बात यह SSH वातावरण चर सेट की जरूरत है। मैनुअल में भी इसका उल्लेख है।


धन्यवाद, यह स्पष्ट रूप से बताता है कि क्या चल रहा है और मुझे वह मिल गया है, लेकिन इसे इस तरह से डिज़ाइन किया गया है कि इसे डिज़ाइन करने के बजाय इसे स्वचालित रूप से पर्यावरण में चर कहते हैं? क्या इसमें किसी प्रकार का लचीलापन है ???
jx12345

4
@ jx12345 आप के आसपास हो सकता है evalका उपयोग करके ssh-agent utilityजहां utilityअपना लॉगिन खोल, अपने विंडो प्रबंधक या जो कुछ भी दूसरी बात यह SSH वातावरण चर सेट की जरूरत है। मैनुअल में भी इसका उल्लेख है। कोई भी बाहरी उपयोगिता कभी भी कॉलिंग के वातावरण में परिवर्तन नहीं कर सकती है।
कुसलानंद

@ कुसलानंद सही; एक संपादन के रूप में जोड़ने के लिए स्वतंत्र महसूस करें। मैं अभी बिस्तर पर हूँ या मैं खुद ऐसा करूँगा।
शादुर 15.117

5
@ jx12345 क्योंकि यह अपने स्वयं के वातावरण में चर जोड़ सकता है लेकिन यह आपके शेल के वातावरण में चर नहीं जोड़ सकता क्योंकि यह आपका शेल नहीं है।
इनिबिस

3
@ jx12345 स्पष्ट करने के लिए: यदि मैं अपनी मूल प्रक्रिया में env वेरिएबल्स को जोड़ या बदल सकता हूं, तो मैं माता-पिता के माता-पिता को वैचारिक रूप से प्रभावित कर सकता हूं, और इसलिए PID 1 तक। इसे "विशेषाधिकार वृद्धि" कहा जाता है और यह सुरक्षा से बहुत बुरी बात है । दृष्टिकोण।
शादुर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.