मशीन को पुनः आरंभ करते समय SSH एजेंट पहचान खो देता है


12

id_rsaडिफ़ॉल्ट स्थान पर नाम के साथ कुंजी बनाने के बाद । मैं कमांड के साथ SSH एजेंट की पहचान जोड़ रहा हूं ssh-add ~/.ssh/id_rsa, यह सफलतापूर्वक जोड़ रहा है।

मैं कुंजी के पास वाक्यांश को दर्ज किए बिना एसएसएच कर सकता हूं क्योंकि यह पहले से ही एसएसएच एजेंट के साथ है।

लेकिन , जब मैं मशीन या सर्वर को पुनरारंभ करता हूं और फिर कमांड के साथ पहचान के लिए जांच करता ssh-add -Lहूं कि मुझे संदेश मिल रहा है The agent has no identities

क्या इसका मतलब है कि जब हम मशीन को पुनरारंभ करते हैं, तो एजेंट ने पहचान खो दी है? क्या यह सामान्य व्यवहार है या कोई चीज़ जो मुझे याद आ रही है?

कृपया मेरा मार्गदर्शन करें, मैं SSH से अधिक परिचित नहीं हूँ।


इस धागे को यूनिक्स और लिनक्स साइट पर देखें ।
जोंसडिवेनी २

जवाबों:


12

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

इसलिए प्रत्येक लॉगिन पर कुंजियों को अनलॉक किया जाना चाहिए, और आपको इसे स्वचालित करने की आवश्यकता है - लिनक्स का उपयोग pam_sshकरना एक विकल्प है; एजेंट को अनलॉक करने के लिए यह स्वचालित रूप से आपके ओएस पासवर्ड का उपयोग करता है । एक और समान मॉड्यूल है pam_envoy, जो थोड़ा और अधिक विश्वसनीय है (लेकिन सिस्टमड की आवश्यकता है)।

दोनों मॉड्यूल एजेंट को स्वयं शुरू करेंगे और चाबियाँ स्वचालित रूप से लोड करेंगे।


किसी भी विचार कैसे मैक osx टर्मिनल पर स्वचालित करने के लिए?
निक्स

जब मैंने कमांड चलाया तो मुझे $SSH_AUTH_SOCK इसका परिणाम मिल रहा है -bash: /tmp/ssh-gT43vE99vk/agent.511:: अनुमति से इनकार किया मैं यहाँ उलझन में हूँ .. मौसम मेरे एजेंट काम कर रहे हैं या नहीं .. क्या आप मार्गदर्शन कर सकते हैं?
निक्स

यह एक कमांड के रूप में उपयोग करने के लिए नहीं है - यह एक चर है , जिसे आप किसी अन्य कमांड के हिस्से के रूप में उपयोग करते हैं। उदाहरण के लिए echo $SSH_AUTH_SOCKइसके मूल्य को प्रिंट करें।
user1686

अरे दोस्त .. कोई आइडिया? stackoverflow.com/questions/31916395/…
निक्स

2

इसे अपने ~ / .bashrc पर आज़माएँ :

if [ ! -S ~/.ssh/id_rsa ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/id_rsa
  ssh-add
fi
export SSH_AUTH_SOCK=~/.ssh/id_rsa

लॉगिन करने के बाद यह केवल पासवर्ड के लिए संकेत देना चाहिए।


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

यदि आपके पास ssh कुंजी पासवर्ड है, तो यह आपके लॉगिन पर हर बार संकेत देगा।
शेरो

यह उत्तर हानिकारक है । यदि आप ऐसा कहते हैं, तो यह आपकी निजी कुंजी को हटा देगा । यदि आपके पास प्रमाणित करने का कोई दूसरा तरीका नहीं है, तो आप उन प्रणालियों तक पहुँच खो देंगे जहाँ आप सार्वजनिक कुंजी प्रमाणीकरण का उपयोग कर रहे हैं।
कास्परड

2

यदि आप अपनी निजी कुंजी को वहां संग्रहीत करने का निर्णय लेते हैं, तो OS X पर ssh-add का किचेन से जुड़ने का एक विशेष ध्वज होता है।

जरा दौड़ो ssh-add -K ~/.ssh/id_rsa

मेरा मानना ​​है कि यह आपके प्रश्न का पूरी तरह से उत्तर देता है। यह ओएस एक्स विशिष्ट ध्वज के लिए प्रलेखन खोजना मुश्किल है, लेकिन यह कम से कम ओएस एक्स तेंदुए के बाद से काम कर रहा है।


2
यह उचित उत्तर है, जिसके बाद ssh-add -Aकिचेन में सभी कुंजियाँ जोड़ी जाएंगी। इसके अतिरिक्त, एक बनाएं ~/.ssh/configऔर जोड़ें UseKeychain yesताकि macOS
lucasarruda

मेरा मैकबुक तब भी मेरी पहचान को भूल जाता है जब मैं इसे रिबूट करता हूं, इस कोशिश के बाद भी।
डोमिनिक सैयर्स

0

यह समाधान आसान है यदि आपकी ssh कुंजियाँ पासफ़्रेज़ संरक्षित हैं।

उपरोक्त सभी जवाब के साथ समस्या यह है कि अगर अपनी निजी कुंजी पदबंध सुरक्षित है, हर बार जब आप एक नया टर्मिनल का शुभारंभ और आपसे पासफ़्रेज़ में टाइप करने की है निजी कुंजी का उपयोग करने के लिए कोशिश करते हैं और आप की कई प्रतियां चल खत्म हो जाएगा है ssh-agentमें याद। समाधान आपके ~/.bashrcया में निम्नलिखित जोड़ने के लिए है ~/.zshrc:

##### START Fix for ssh-agent #####
# Ref: http://mah.everybody.org/docs/ssh

SSH_ENV="$HOME/.ssh/environment"

function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
     echo succeeded
     chmod 600 "${SSH_ENV}"
     . "${SSH_ENV}" > /dev/null
     /usr/bin/ssh-add;
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
     }
else
     start_agent;
fi
##### END Fix for ssh-agent #####

यह आपके ssh निजी कुंजी (ओं) के पासफ़्रेज़ के लिए पूछेगा जब आप एक टर्मिनल लॉन्च करते हैं। नए टर्मिनल सत्र (या tmux देख) के बाद खोलने से ऊपर स्निपेट द्वारा बनाए गए ssh- एजेंट का पुन: उपयोग होगा।

संदर्भ

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