ssh-add शिकायत करता है: आपके प्रमाणीकरण एजेंट के लिए कनेक्शन नहीं खोल सकता है


151

मैं ssh-addरास्पबेरी चलाने वाले रास्पबेरी पर काम करने की कोशिश कर रहा हूं।

मैं शुरू कर सकता हूं ssh-agent, जब मैं ऐसा करता हूं तो टर्मिनल में निम्न आउटपुट देता है:

SSH_AUTH_SOCK=/tmp/ssh-06TcpPflMg58/agent.2806; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2807; export SSH_AGENT_PID;
echo Agent pid 2807;

अगर मैं दौड़ता ps aux | grep sshहूं तो देख सकता हूं कि यह चल रहा है।

फिर मैं ssh-addअपना मुख्य पासफ़्रेज़ जोड़ने के लिए दौड़ने की कोशिश करता हूँ, और मुझे निम्नलिखित मिलते हैं:

Could not open a connection to your authentication agent.

कोई विचार?


6
कोशिशeval $(ssh-agent)
उलरिक डांगेल

जवाबों:


224

आपका शेल उस शेल कोड आउटपुट का मूल्यांकन करने के लिए है ssh-agent। इसके बजाय इसे चलाएं:

eval "$(ssh-agent)"

या यदि आपने ssh-agent पहले ही शुरू कर दिया है, तो इसे अपने शेल प्रॉम्प्ट पर पेस्ट करें (यह मानते हुए कि आप बॉर्न जैसा शेल चला रहे हैं)।

sshकमांड को यह जानने की जरूरत है कि कैसे बात करनी है ssh-agent, वे जानते हैं कि SSH_AUTH_SOCKपर्यावरण चर से।


धन्यवाद, मुझे समझ में नहीं आया कि यह कैसे काम करता है। जो कि काबिले तारीफ है।
डैनियल ग्रोव्स

2
या आप ssh- एजेंट बैश में प्रवेश कर सकते हैं और ssh-add के बाद काम करेंगे
RaduM

@ स्टेफ़ेन, क्या मुझे यह सही ढंग से आता है कि ssh- एजेंट कमांड सिर्फ इसका आउटपुट प्रिंट करता है जबकि eval वर्जन वास्तव में कमांड चलाता है?
डेनिस एस।

5
@DenysS। खैर नहीं, यह अपना सेटअप करता है और फिर अपने शेल को बताता है कि कैसे अपने पर्यावरण को अपडेट करने के लिए इसे संपर्क करने में सक्षम होना चाहिए। यह ऐसा नहीं कर सकता है। यह अद्यतन वातावरण (जो ssh-agent bashकरता है) के साथ एक नया शेल शुरू कर सकता है , लेकिन यह एक विदेशी कमांड (आपके पहले से चल रहे शेल) चलाने वाली एक अलग प्रक्रिया की मेमोरी को अपडेट नहीं कर सकता है।
स्टीफन चेज़लस

@StephaneChazelas, अगर मेरे ssh- एजेंट को बूट पर शुरू किया गया है, लेकिन मुझे अभी भी इसे अपने शेल में निकालना है तो क्या इसका मतलब यह है कि यह प्रत्येक शेल के लिए स्वचालित रूप से मूल्यांकन नहीं किया गया है और रूट उपयोगकर्ता द्वारा किसी भी तरह कॉन्फ़िगर किया जाना है?
डेनिस एस।

27

इसको आजमाओ:

$ ssh-agent /bin/sh
$ ssh-add $yourkey

5
यह वास्तव में मेरे लिए काम करता है, जहां किसी भी अन्य जवाब ने काम नहीं किया।
जोसेफ स्नो

2
यदि आप फिशशेल का उपयोग कर रहे हैं, तो यह उत्तर काम करता है। ssh-agent /usr/bin/fish
slackmart

1
": मैं कोई त्रुटि मिलती है अपने प्रमाणीकरण एजेंट से कनेक्शन खोला नहीं जा सका। "
IgorGanapolsky

@slackmart यदि आपने बीएसडी में मछली स्थापित की है, तो इसका स्थान /usr/local/bin/fish(वैकल्पिक रूप से /usr/ports/shells/fish) है। whereisमुझे यह पता लगाने में मदद करने के लिए धन्यवाद ।
cjm

Great @cjm, मैं स्लैकवेयर लिनक्स का उपयोग करता हूं, और यही वह मार्ग है जो मेरे लिए काम करता है।
स्लैक्टमार्ट

12

इस सवाल को स्टाकेवरफ्लो पर भी अच्छी तरह से कवर किया गया है ।

eval `ssh-agent -s`

ssh-add

आप उद्धरणों को भूल गए `...`। उनके बिना, आउटपुट पर विभाजित + ग्लोब ऑपरेटर का उपयोग किया जाता है।
स्टीफन चेज़लस

6

यदि csh को शेल ( FreeBSD PI ) के रूप में उपयोग किया जाए तो यह काम कर सकता है:

eval `ssh-agent -c`

अगले आपको केवल कुछ करने की आवश्यकता है:

ssh-add ~/.ssh/id_rsa

मुझे एक त्रुटि मिलती है: " आपके प्रमाणीकरण एजेंट के लिए एक कनेक्शन नहीं खोला जा सकता है। "
इगोरगानपोलस्की

2

आप निम्न सिंटैक्स का भी उपयोग कर सकते हैं:

ssh-agent sh -c 'ssh-add && echo Do some stuff here.'

यह मेरे लिए काम नहीं कर रहा है, यदि आप जाते हैं ssh-agent sh -c "ssh-add -l"तो यह बताएगा कि आपकी कोई पहचान नहीं है।
ऐन तोवहरी

क्योंकि आपको इसे पहले जोड़ना है, उदाहरण के लिए: ssh-agent sh -c "ssh-add && ssh-add -l"अपनी पहचान प्रिंट करेगा।
kenorb

1

इसे आज़माएँ: इस पर जाएँ C:\$Installation_Folder$\Git\cmd और अमल करें:

start-ssh-agent 

यह एक cmd कमांड खोलेगा और ssh-agentसही तरीके से रन करेगा ।

ssh-add ~/.ssh/id_rsa तब काम करना चाहिए।


" बैश: स्टार्ट-
एसश

1

यह भ्रामक था, और इसके 2 संभावित अच्छे उत्तर हैं, इस पर निर्भर करता है कि क्या उपयोगकर्ता लिनक्स पर या विंडोज (जैसे मैं हूं) पर एक ssh कुंजी जोड़ने का प्रयास कर रहा है। यह शायद ओपी का जवाब नहीं देता है, लेकिन गिट-बैश के लिए एक विस्तार है। मैं विकास के लिए विंडोज और उबंटू दोनों को चलाता हूं, और मेरा गिट इंस्टॉलेशन प्रत्येक में थोड़ा अलग है।

इसे आज़माएँ: C: \ $ Installation_Folder $ \ Git \ cmd पर जाएं और निष्पादित करें:

start-ssh-agent यह एक cmd कमांड खोलेगा और ssh-Agent को सही तरीके से चलाएगा।

.. एक अच्छा विंडोज उत्तर था, लेकिन यह निर्दिष्ट करने में विफल रहा कि जीआईटी इंस्टॉलेशन फ़ोल्डर को खोजने के लिए आपको विंडोज एक्सप्लोरर के माध्यम से जाने की उम्मीद थी, और चलाएं विंडोज शेल चरण 1 के पूरा होने पर खुल जाएगा।
"C: \ $ Installation_Folder पर जाएं $ \ Git \ cmd "

चरण 2: आपको बस डबल-क्लिक करने की आवश्यकता है

start-ssh-agent

चरण 3 पर, आप वापस git-bash या जो भी * nix टर्मिनल एमुलेटर आप चला रहे हैं और ssh-add चलाएं। यदि आपने ssh सार्वजनिक कुंजी के लिए डिफ़ॉल्ट नाम का उपयोग किया है, तो आपको नाम जोड़ने की आवश्यकता नहीं है क्योंकि ssh-add उपयोग स्वचालित रूप से होता है।


1

यदि आप sudo के साथ किसी पहचान का उपयोग करना चाहते हैं, तो कुछ तरीके हैं sudo npm install

लंबा रास्ता , लेकिन आपको रूट एक्सेस भी देता है इसलिए आपको sudoबहुत अधिक उपयोग करने की आवश्यकता नहीं होगी ।

  1. इसे चलाएं
    sudo ssh-agent bash
    अपने पासवर्ड के लिए पूछें और ssh-agentसुपरयुजर के विशेषाधिकार के साथ चलेंगे ,
  2. अपने उपयोगकर्ताओं के .ssh फ़ोल्डर में नेविगेट करें
    cd /home/user/.ssh
  3. वहां से आप दौड़ सकते हैं

    ssh-add id_rsa
    npm install git+ssh://git@YOUR-PROJECT-URL -g && npm link PROJECT-NAME
    

लघु तरीका , केवल आपका उपयोगकर्ता (जब तक कि आप बहुत अधिक सुडोल नहीं करना चाहते)

eval "$(ssh-agent)"
ssh-add
sudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install git+ssh://git@PROJECT-URL -g && sudo npm link PROJECT-NAME

exportऔर evalकाम के रूप में अच्छी तरह से जड़ प्रदान की जड़ के खोल खोल की तरह Bourne है। यदि जड़ का खोल csh या tcsh है, तो उपयोग करेंeval `ssh-agent -c`
स्टीफन चेज़ेलस

ध्यान दें कि आप rootअपने ssh- एजेंट को एक्सेस करके भी दे सकते हैंsudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install...
Stéphane Chazelas

कोशिश की दोनों बैश भी फिर से खोल रहा है और न ही ठीक से काम किया है। रूट सहित मेरे डेबियन जेसी उदाहरण पर सभी उपयोगकर्ता डिफ़ॉल्ट रूप से बैश का उपयोग करने के लिए तैयार हैं।
बेलदंडू

आपने क्या प्रयास किया? eval "$(ssh-agent)"जड़ के रूप में चलने वाले बैश शेल के संकेत पर काम करेगा। आपको स्पष्ट रूप sshसे उस शेल या उसके वंशज से चलने की आवश्यकता होगी ताकि वे SSH_AUTH_SOCK env var को इनहेरिट करें। eval "$(sudo ssh-agent)"; sudo ssh...काम नहीं करेगा क्योंकि sudoडिफ़ॉल्ट रूप से SSH_AUTH_SOCK env var पास नहीं होता है।
स्टीफन चेज़लस

मैंने कोशिश की eval "$(ssh-agent)"कि बाद में यह देखने की कोशिश की जाए कि किसी प्रकार की कॉन्फ़िगरेशन त्रुटि है या नहीं। यद्यपि वर्तमान तरीके से मैंने यह मार्गदर्शिका दी है कि आप अपने पहले ही रूट के बाद से किस उपयोगकर्ता के लिए मुफ्त नियंत्रण की अनुमति दे सकते हैं और सर्वर पर किसी भी उपयोगकर्ता id_rsa thats का उपयोग कर सकते हैं। तो एक बार जब मैं इसे ठीक से काम करता हूं तो अपना जवाब संपादित करता हूं।
बेलदंडू 19
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.