मैक ओएस एक्स शेर पर हर बार पासफ़्रेज़ दर्ज किए बिना लॉग इन करने के लिए एसएसएच निजी कुंजी का उपयोग कैसे करें?


23

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

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

एक स्क्रिप्ट है, keychainजो गेंटू लिनक्स पर ठीक काम करती है। लेकिन मैंने मैक ओएस एक्स लायन पर इसका कभी पता नहीं लगाया। इतना ही नहीं, इस तरह के रूप इतने सारे डराना शर्तों, देखते हैं ssh-agent, ssh-add। उन SSH टूलकिट के बारे में विभिन्न सामग्रियों को पढ़ने और कुछ निराश प्रयोगों को करने के बाद, मैं और अधिक भ्रमित हो गया।

इसलिए, मैं StackExchange पर आया, निम्नलिखित प्रश्नों के बारे में कुछ सलाह की तलाश में।

  1. क्या हैं ssh-agent, ssh-add, keychain, Keychain Access.appऔर कैसे वे एक दूसरे के साथ इंटरेक्ट करती है?
  2. मैं लॉगिन करते समय अपनी SSH निजी कुंजी के लिए पासफ़्रेज़ कैसे दर्ज कर सकता हूं, और बाद में SSH सत्र के निर्माण में इसका स्वतंत्र रूप से उपयोग कर सकता हूं?
  3. त्रुटि ... क्या गलत है Keychain Access.app? यह SSH वाक्यांश को स्टोर नहीं करता है, जैसा उसने पहले किया था।

मैंने सूचीबद्ध किया है कि मैंने यहां क्या किया है। उम्मीद है कि मेरे द्वारा याद किए गए चरणों के बारे में कोई सुराग नहीं है।

चरण 1. मेरे मैक पर एक SSH कुंजी जोड़ी बनाएँ।

$ ssh-keygen -t rsa -C "me@email.com"
# Set a passphrase for accessing the private key.

चरण 2. दूरस्थ होस्ट के लिए मेरी SSH सार्वजनिक कुंजी की प्रतिलिपि बनाएँ। एक उदाहरण लेने के लिए, मैं स्थानीयहोस्ट, मैक की कुंजी कॉपी करता हूं।

$ ssh-copy-id USER@localhost
# Enter the login password for USER at localhost, not my SSH passphrase

चरण 3. फिर SSH कुंजी जोड़ी प्रमाणीकरण के माध्यम से दूरस्थ होस्ट (यहां स्थानीय होस्ट) से कनेक्ट करने का प्रयास करें।

$ ssh USER@locahost
Enter passphrase for key '/Users/YOUR_ACCOUNT/.ssh/id_rsa': 
# Enter my SSH passphrase, not the login password.

चरण 4. दूरस्थ होस्ट से लॉगआउट करें और इसे फिर से कनेक्ट करने का प्रयास करें। लानत है, टर्मिनल एसएसएच वाक्यांश के लिए फिर से पूछता है।

एक अक्सर पूछा जाने वाला प्रश्न यह है कि "क्या ssh- एजेंट आपके मैक पर अच्छा काम करता है?"। सच कहूं, तो मुझे नहीं पता कि इन चीजों पर क्या चल रहा है। यहाँ कुछ चल परिणाम दिखाते हैं।

$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(EMPTY)
$ ssh-add -l
Could not open a connection to your authentication agent.
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Z54zXukQiP/agent.26769; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26770; export SSH_AGENT_PID;
echo Agent pid 26770;
$ ssh-add -l
Could not open a connection to your authentication agent.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(STILL EMPTY)
$ ssh-agent  # Oh no, anther ssh-agent with different PID
SSH_AUTH_SOCK=/tmp/ssh-cx0B4FUX8B/agent.26898; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26899; export SSH_AGENT_PID;
echo Agent pid 26899;
$ ps -e | grep -i ssh
26769 ??         0:00.03 ssh-agent
26899 ??         0:00.02 ssh-agent

किसी भी प्रतिक्रिया का स्वागत किया है। धन्यवाद!


संबंधित । संभावना है कि आप अपने उपयोग के मामले के लिए स्वीकृत उत्तर को अनुकूलित कर सकते हैं।
डैनियल बेक

जवाबों:


12

ssh-agentवह टुकड़ा है जिसे आप काम करना चाहते हैं, क्योंकि यह वही करता है जिसके बारे में आप पूछ रहे हैं। एजेंट एक डेमॉन के रूप में चलता है, और जब आप इसे एक निजी कुंजी "जोड़" देते हैं, तो यह उस कुंजी को याद रखता है और sshdप्रारंभिक कनेक्शन के दौरान स्वचालित रूप से रिमोट को प्रदान करता है । ( ssh-addबस एक कमांड है जिसे आप मैन्युअल रूप से एक निजी कुंजी जोड़ने के लिए चलाते हैं ssh-agent)।

ओएस एक्स में, तेंदुए के रूप में, आपको कभी भी ssh-agentया ssh-addमैन्युअल रूप से नहीं चलना चाहिए । जब आप सर्वर से कनेक्ट करने का प्रयास करते हैं तो यह "बस होना" चाहिए। एक बार कुंजी के बाद, यह आपको UI पासवर्ड संवाद के साथ संकेत देगा, जो (अन्य चीजों के बीच) आपको स्वचालित रूप से कुंजी जोड़ने की अनुमति देगा ssh-agentताकि आप फिर से कभी भी संकेत न दें।

यह एक launchdकॉन्फ़िगरेशन होने से नियंत्रित किया जाता है जो $SSH_AUTH_SOCKसॉकेट पर कनेक्शन के लिए सुनता है , और ssh-agentजब इसे पहली बार आवश्यकता होती है, तो स्वचालित रूप से लॉन्च होता है; उसके बाद, ssh-agentआपको केवल क्रेडेंशियल्स के लिए संकेत देता है जब उसे एक नई कुंजी खोलने की आवश्यकता होती है।

यदि यह काम नहीं कर रहा है, तो सुनिश्चित करें कि आपके पास सही launchdकॉन्फ़िगरेशन फ़ाइल मौजूद है:

/System/Library/LaunchAgents/org.openbsd.ssh-agent.plist

यदि यह अभी भी किसी कारण से आपके लिए काम नहीं कर रहा है, तो यहां चीजें चलाने का "पुराना" तरीका है:

http://timesinker.blogspot.com/2007/08/getting-ssh-agent-going-on-mac-osx.html

यह एप्लिकेशन भी है, जिसे मैंने तेंदुए के बाहर आने के बाद से इस्तेमाल करना बंद कर दिया है, लेकिन मूल रूप से मैक ओएस एक्स के पिछले संस्करणों में यही काम किया था:

http://www.sshkeychain.org/


4
धन्यवाद, माइकल ईडनफील्ड। मुझे पता चला कि क्या गलत हो रहा है और अब ssh-login-without-passphrase Mac OS X Lion पर पूरी तरह से काम करता है। मैंने कुछ बेवकूफी भरी बातें कीं - मैंने हर 2 घंटे में सफाई करने के लिए एक क्रॉनिक जॉब की और ~/tmpइशारा करते हुए एक प्रतीकात्मक लिंक बनाया , जिसने ssh-Agent सॉकेट को भी हटा दिया। अरे यार, मुझे खुद से नफरत है। /tmp/~/tmp
जियानवेन डब्ल्यू

13

"समस्या" को हल करने की प्रक्रिया के दौरान, मैं कुछ संबंधित विषयों googled और नीचे कैसे के बारे में कुछ नोट लिखने की है ssh-agent, ssh-add, keychain, KeyChain Access.appकाम करते हैं। यह अंततः पता चला है कि यह समस्या बिल्कुल भी समस्या नहीं है, इसके बजाय यह मुद्दा मेरे बारे में है, और तथाकथित ssh-login-without-ask-passphrase-every-time मैक आउट ऑफ बॉक्स पर पूरी तरह से काम करता है।

हालाँकि, इस प्रक्रिया से मुझे कुछ अनुभव प्राप्त हुए हैं। मैं अपने नोट्स यहाँ इस उम्मीद में लिखता हूँ कि वे किसी को उन शर्तों के बारे में भ्रमित करने में मदद करें।

दो पासवर्ड शब्द:

  • passphrase आपके SSH निजी कुंजी तक पहुँचने पर आवश्यक वाक्यांश को संदर्भित करता है।
  • password आपके मैक में लॉग इन करने के लिए आवश्यक वाक्यांश को संदर्भित करता है।

अब मैं पता लगा सकते हैं कि इन उपकरणकिटें करते हैं, यह है कि, ssh-agent, ssh-add, keychain, Keychain Access.appमैक पर।

  • ssh-agentSSH पासफ़्रेज़ को टाइप किए बिना SSH निजी कुंजी का उपयोग करने में सक्षम करने के लिए महत्वपूर्ण सेवा है। ssh-agentइस तरह से काम करता है। पहले यह स्टोर करता है, या कैश करता है , मुख्य मेमोरी में आपकी एसएसएच निजी कुंजी। फिर इस सत्र में बाद में जब दूरस्थ प्रमाणीकरण के लिए आपकी SSH निजी SSH कुंजी की आवश्यकता होती है, ssh-agentतो आपकी निजी कुंजी को मुख्य मेमोरी में खोजकर दूरस्थ प्रक्रिया में सौंप देगा। आपके SSH पासफ़्रेज़ को टाइप करने का एकमात्र मौका जब आपकी निजी कुंजी ssh-agentशुरू में जुड़ती है ।
  • ssh-addssh-agentसंग्रह का हिस्सा है , जो आपके SSH कुंजी को प्रबंधित करने में मदद करता है ssh-agent। हम ssh-addssh-Agent की कीरिंग में निजी कुंजियों को सूचीबद्ध करने, जोड़ने, हटाने के लिए कमांड का उपयोग करते हैं । फिर कार्यों को पूरा करने के लिए सेवा के ssh-addसाथ संचार ssh-agentकरता है।
  • keychainssh-agentसेवा खोजने के लिए स्क्रिप्ट है (यदि मौजूद नहीं है, तो एक नई शुरुआत करें) और ssh-addएसएसएच निजी कुंजी जोड़ने के लिए कॉल करें। keychainएक सरल और सीधा-सीधा विचार है, लिनक्स पर ठीक काम कर रहा है जहां ssh- एजेंट आमतौर पर स्वचालित रूप से शुरू नहीं होता है।
  • Keychain Access.appसबसे जटिल घटक लगता है। यह मैक ओएस एक्स की सार्वभौमिक टोकन भंडारण सेवा है। यह विभिन्न टोकन, जैसे पासवर्ड, सेरट, एट अल को संग्रहीत करता है, और उन ऐप्स के लिए टोकन एजेंट के रूप में कार्य करता है जो टोकन का अनुरोध करते हैं। हमारे SSH निजी कुंजी मामले में, सबसे पहले यह SSH निजी कुंजी तक पहुँचने के अनुरोध को स्वीकार करता है और एक विंडो को पॉप अप करके आपको SSH पासफ़्रेज़ को स्टोर करने के लिए कहता है, जो एक प्रकार का टोकन है, जो कि Keychain Access.appकीरिंग में है। फिर अगली बार जब आप प्रमाणीकरण के लिए निजी कुंजी का उपयोग करने वाले हों, तो Keychain Access.appएक विंडो फिर से पॉप अप करें, यह पूछते हुए कि क्या विशेषाधिकार प्रदान करते हैं। एक बड़ी हाँ मिलने के बाद, keychain Access.appअपनी निजी कुंजी को ssh-agentस्टोरेज में जोड़ता है ।

दो चीजें आपके ध्यान देने योग्य हैं:

  1. मैक ओएस एक्स लायन स्वचालित रूप ssh-agentसे स्टार्ट अप में एक सेवा शुरू करता है, जिसके तहत एक सॉकेट है /tmp
  2. Keychain Access.appआपके SSH पासफ़्रेज़ को संग्रहीत करता है, इसलिए यह आपकी निजी कुंजी को आपके ssh-agentबीच में आए बिना जोड़ सकता है । हां, अपने SSH वाक्यांश को टाइप करने की आवश्यकता नहीं है, लेकिन पहली बार इस प्रविष्टि को बनाते समय विशेषाधिकार प्रदान करने के लिए अपने मैक खाते के लॉगिन पासवर्ड को टाइप करने की आवश्यकता है।

तो, सारांश में, SSH- लॉगिन-बिना-पूछ-पासफ़्रेज़ को मैक ओएस एक्स आउट ऑफ बॉक्स पर काम करना चाहिए।


1

यदि अन्य समाधान यहां लोगों के लिए काम नहीं करते हैं, तो निम्नलिखित मेरे लिए काम करते हैं।

आपकी ~ / .shsh निर्देशिका में प्रत्येक और प्रत्येक निजी कुंजी के लिए, सुनिश्चित करें कि संबंधित सार्वजनिक कुंजी भी मौजूद है। सुनिश्चित करें कि सार्वजनिक कुंजी को निजी कुंजी के समान नाम दिया गया है लेकिन .pubअंत में। यदि आपके पास पहले से ही एक उपयुक्त सार्वजनिक कुंजी है, तो इसे पुन: उत्पन्न करने का प्रयास करें।

यदि आपको सार्वजनिक कुंजियों को फिर से बनाने की आवश्यकता है, तो आप ऐसा आसानी से कर सकते हैं: -

ssh-keygen -y -f ~/.ssh/my_key > ~/.ssh/my_key.pub

my_keyजो कुछ भी आपकी कुंजी कहा जाता है के साथ प्रतिस्थापित करना।

उसके बाद, MacOS को चाबी का गुच्छा में मुख्य पासफ़्रेज़ को याद रखना चाहिए जैसा कि उसे करना चाहिए।

नोट - पासफ़्रेज़ में प्रवेश करना और इसे कीचेन में सहेजना अब केवल एक बार की गई कार्रवाई है (एक बार लॉगिन सत्र के अनुसार ओपी चाहता था), लेकिन यह मानते हुए कि प्रश्न में मैक पर लॉगिन सुरक्षित है, तो आपका पासफ़्रेज़ उस लॉगिन पासवर्ड द्वारा सुरक्षित है। इसके अलावा, इस समाधान से मुझे कोई मतलब नहीं है ... निजी कुंजी के अलावा एक सार्वजनिक कुंजी की आवश्यकता नहीं होनी चाहिए, लेकिन किसी कारण से MacOSX को इसकी आवश्यकता होती है।

(मूल रूप से एप्पल स्टैक एक्सचेंज पर इसी तरह के सवाल के जवाब से)


1

~/.sshफ़ोल्डर को कॉन्फ़िगर करने से संबंधित एक चीज़ जो मुझे शायद ही कभी मिली हो वह निर्देशिका अनुमतियों को प्रतिबंधित कर रही है।

पासवर्ड से बचने के लिए ssh को सक्षम करने के लिए मुझे हमेशा उपयोगकर्ता की होम निर्देशिका अनुमतियों 700और ~/.sshफ़ोल्डर अनुमतियों को 700भी सेट करना पड़ता है।

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


0

एक और चीज़ जिसे आप आज़मा सकते हैं, वह ssh-copy-idहै जैसे कुछ के साथ बदलना k="$(cat ~/.ssh/id_rsa.pub)"; ssh username@somehost.com "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"


0

यह उत्तर इस प्रश्न का हल नहीं है; हालाँकि यह बहुत करीब है (मैं अपनी समस्या का हल खोजते हुए इस सवाल पर समाप्त हुआ)।

मैं अपने मैक पर दूरस्थ सर्वर के लिए बहुत सारे एसएसएच करता हूं, जैसा कि इस प्रश्न में वर्णित है, हालांकि Keychain Access.appऐप ने कीफ्रेज़ को स्टोर किया और मुझे हर बार एसएसएच सर्वर पर प्रमाणित करने के लिए कुंजी की आवश्यकता होने पर इसे टाइप करने की आवश्यकता नहीं है।

हालांकि, मैंने अपने मैक पर एसएसएच सर्वर को सक्षम किया, ताकि मैं इसे दूरस्थ रूप से कनेक्ट कर सकूं। जब मेरे मैक पर दूरस्थ रूप से लॉग इन किया गया, तो कीफ्रेस को हमेशा पूछा जाता था जब मैं एसएसएच को एक और होस्ट करना चाहता था।

मुझे एक समाधान मिला जो कीफ्रेज़ को वर्तमान सत्र के लिए संग्रहीत करने की अनुमति देता है। मुझे लगा कि यह किसी के लिए उपयोगी हो सकता है, इसलिए यह पोस्ट / उत्तर।


मैं नीचे मेरी समान समाधान यहाँ लिखा superuser.com/a/659668/154113
orkoden

0

मैं इस समस्या पर हैरान हूँ। ssh हमारे विभाग में हर मशीन के लिए काम करता है सेब के लिए EXCEPT (मैकबुक या iMacs कोई फर्क नहीं पड़ता)। मैं अंत में पासवर्ड टाइप करके थक गया और इस पर डिबग करने का फैसला किया।

मैं साझाकरण वरीयता पैनल में अपने iMac और अक्षम sshd पर गया। मैंने तब डिबग मोड में sshd को फायर करने के लिए रूट, और टाइप "" usr / sbin / sshd -d "टाइप किया। मैंने तब उस मशीन को ssh करने की कोशिश की और उसने तुरंत प्रोटोकॉल 2 का उपयोग करने की कोशिश की, जो कि सब कुछ ठीक-ठाक उपयोग करने लगता है, लेकिन sshd ने तुरंत रिपोर्ट किया कि उसे "अधिकृत_कीप्स" नहीं मिली। मेरे पास एक अधिकृत_की 2 फ़ाइल थी जो मेरे सभी लिनक्स, सोलारिस, यू-नेम-इट-यूनिक्स बॉक्स को ठीक-ठीक स्वीकार करती है। मैंने अधिकृत अधिकृत_केक्स 2 को अधिकृत_की और BOOM को कॉपी किया। अब पूरी तरह से काम करता है।

क्यों * चाबियाँ 2 के बजाय * चाबियाँ अज्ञात है। विशेष रूप से जब os x ज्ञात_होल्स 2 से काफी खुश है।

किसी भी स्थिति में, अब हमारे सभी ऐप्पल बॉक्स को लॉग इन किया जा सकता है, या उन ब्लास्ट पासवर्ड के बिना उन पर रिमोट कमांड निष्पादित की जा सकती है:

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