SSH कुंजियों के साथ Mac OS X Keychain का उपयोग कैसे करें?


140

मैं समझता हूं कि मैक ओएस एक्स तेंदुए के बाद से किचेन ने एसएसएच कुंजी का भंडारण करने का समर्थन किया है। क्या कोई यह बता सकता है कि यह सुविधा कैसे काम करने वाली है।

मेरे पास कुछ आरएसए चाबियाँ हैं जो मैंने विभिन्न सर्वरों तक पहुंचने के लिए मेरी ~ / .shsh निर्देशिका में संग्रहीत की हैं। मेरे पास उन कुंजियों पर पासफ़्रेज़ सेट नहीं है। वर्तमान में उन सर्वर में लॉग इन करने के लिए मैं टर्मिनल में निम्नलिखित कमांड का उपयोग करता हूं:

eval `ssh-agent`
ssh-add ~ / .ssh / some_key_rsa
ssh उपयोगकर्ता @ सर्वर

(मैंने इसे आसान बनाने के लिए कुछ बैश फ़ंक्शन लिखे हैं।)

क्या किचेन का उपयोग करने का एक बेहतर तरीका है?

जवाबों:


16

इसके लिए काम करने के लिए, $SSH_AUTH_SOCKपर्यावरण चर को इंगित किया जाना चाहिए /tmp/launch-xxxxxx/Listeners। जब आप लॉग इन करते हैं तो यह स्वचालित रूप से माना जाता है। उस सॉकेट पर श्रोता ssh- एजेंट प्रोटोकॉल बोलता है।

आपकी बैश स्क्रिप्ट आपके स्वयं के ssh एजेंट (वर्तनी ssh-agent, नहीं ssh_agent) को शुरू कर रही हैं और आपके ssh-agentलिए लॉगिन पर स्थापित मौजूदा को ओवरराइड कर रही हैं।

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

अंत में, जब आप पहली बार लॉग इन करते हैं, तो आप संभवतः ssh- एजेंट प्रक्रिया नहीं देखेंगे। पहली बार लॉन्च सेवाओं द्वारा स्वचालित रूप से उस सॉकेट को पढ़ने की कोशिश करने से वह प्रक्रिया शुरू हो जाएगी /tmp


1
धन्यवाद। तो मुझे अभी भी ssh-addलॉग इन करने के लिए शुरू किए गए डिफ़ॉल्ट ssh एजेंट में अपनी RSA पहचान जोड़ने के लिए दौड़ना पड़ेगा ?
जॉन टॉपले

आपको ssh-add चलाना नहीं है; ssh-agent पहली बार ssh चलाने के लिए कुंजी के पासफ़्रेज़ के लिए पूछेगा।
रुडडॉग

3
जब भी मैं ssh चलाता हूं, यह मुझे पासवर्ड के लिए संकेत देता है। मुद्दा यह है कि मुझे कोई पासवर्ड दर्ज नहीं करना है।
जॉन टॉपले

1
आपको पासवर्ड के लिए क्या संकेत दे रहा है? मुझे संदेह होने लगा है कि यह रिमोट सर्वर है जो आपको संकेत दे रहा है, जो आपके कथन को बताता है कि आपकी कुंजी बेहतर परिप्रेक्ष्य में पासफ़्रेज़ नहीं है। यदि आप दूरस्थ सर्वर पर पासवर्ड को बायपास करना चाहते हैं, तो आपको $HOME/.ssh/authorized_keysउस सर्वर पर अपनी सार्वजनिक कुंजी जोड़ने की आवश्यकता है । Mac OS का ssh-Agent + चाबी का गुच्छा केवल आपके स्थानीय ssh कुंजी के लिए पासफ़्रेज़ को संग्रहीत करने के लिए उपयोग किया जाता है; यह मौजूदा ssh कनेक्शन पर दूरस्थ पासवर्ड भेजने के लिए नहीं है।
रुडडॉग

1
ssh -vssh क्या कर रहा है, इसका निदान करने के लिए उपयोग करें। sshd -p 8900 -vसर्वर साइड पर भी प्रयोग करें और ssh -v remote:8900यह पता लगाने के लिए कि sshd क्या कर रहा है।
रुडडॉग

252

ओएस एक्स के तेंदुए की रिहाई के रूप में, एसश-एजेंट अधिक कसकर किचेन के साथ एकीकृत है। आपके सभी SSH कुंजी के पासफ़्रेज़ को कीचेन में सुरक्षित रूप से संग्रहीत करना संभव है, जहां से ssh-agent उन्हें स्टार्टअप पर पढ़ेगा। लब्बोलुआब यह है कि पासफ़्रेज़ के साथ अपनी कुंजियों को सुरक्षित करना सरल है, लेकिन उन्हें उपयोग करने के लिए पासफ़्रेज़ को कभी भी लिखना नहीं पड़ता है! यहां कैसे:

चाबी का गुच्छा के लिए प्रत्येक ssh कुंजी में पास वाक्यांश जोड़ें: (विकल्प -k सादा निजी कुंजी लोड करता है, केवल प्रमाण पत्र)

ssh-add -K [path/to/private SSH key]

(ध्यान दें कि एक राजधानी K है)

जब भी आप अपने मैक को रिबूट करते हैं, तो आपके किचेन में सभी एसएसएच कीज़ अपने आप लोड हो जाएंगे। आपको किचेन एक्सेस ऐप में चाबियाँ देखने में सक्षम होना चाहिए, साथ ही साथ कमांड लाइन से:

ssh-add -l

ssh-add -lदूरस्थ रूप से कनेक्ट करते समय किसी भी कुंजी को सूचीबद्ध नहीं करता है (जहां $ DISPLAY सेट नहीं है)। कीचेन (जैसे superuser.com/questions/141044/… ) में उपयोग करने के लिए विशेष ट्रिक यहाँ नियोजित करने की आवश्यकता है
ईथर

2
developer.apple.com/library/mac/documentation/Darwin/Reference/… आपको चाबी का गुच्छा में पासफ़्रेज़ स्टोर करने के लिए -K विकल्प की भी आवश्यकता है।
नीम प्रॉक्स

5
यदि आपने Homebrew जैसे पैकेज सिस्टम के माध्यम से SSH का एक और संस्करण स्थापित किया है, तो यह एक निरपेक्ष पथ का उपयोग करना आवश्यक है /usr/bin/ssh-add
लुडोविक क्रूट

1
दिलचस्प रूप से मेरे macOS सिएरा में यह रिबूट के बाद पासवर्ड के लिए नहीं कहता है, लेकिन ssh-add -lरिटर्न "एजेंट की कोई पहचान नहीं है।" ( ps auxशामिल है /usr/bin/ssh-agent -l)।
हालिल Halzgür

4
MacOS सिएरा के लिए, चीजें बदल गई हैं। देखें github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain
schieferstapel

79

जब आप अपने खाते में लॉग इन करते हैं , तो macOS Sierra के रूप में , ssh- Agent अब पहले से लोड की गई ssh कुंजियों को स्वतः लोड नहीं करता है। यह एप्पल के हिस्से पर जानबूझकर किया गया है, वे मुख्यधारा के ओपनएसएसएच कार्यान्वयन के साथ फिर से संरेखित करना चाहते थे । [1]


जैसा कि यहां बताया गया है , यह macOS 10.12.2 के बाद से अनुशंसित तरीका है :

  1. अपनी ~/.ssh/configफ़ाइल में निम्न पंक्तियाँ जोड़ें :

    Host *
        UseKeychain yes
        AddKeysToAgent yes
    
  2. Ssh-Agent को ssh-add /path/to/your/private/key/id_rsaकमांड का उपयोग करने के लिए जो भी कुंजी जोड़ते हैं, वह स्वचालित रूप से किचेन में जुड़ जाएगी, और रिबूट पर ऑटोलॉइड होना चाहिए।


निम्नलिखित पदावनत किया जाता है (संदर्भ के लिए रखा जाता है)।

पिछले व्यवहार पर वापस जाने के लिए, ssh-add -Aजब आप लॉग इन करते हैं, तो आप कमांड (जो सभी ssh कुंजियों को पास-वाक्यांशों को स्वतः लोड करता है) को चलाना चाहते हैं । ऐसा करने के लिए, इन चरणों का पालन करें।

  1. सबसे पहले, उन सभी कुंजियों को जोड़ें जिन्हें आप कमांड का उपयोग करके ssh-agent को ऑटो-लोड करना चाहते हैं ssh-add -K /absolute/path/to/your/private/key/id_rsa-Kतर्क सुनिश्चित करता है कि कुंजी पास वाक्यांश में जोड़ा जाता है MacOS के कीचेन । सुनिश्चित करें कि आप कुंजी के लिए निरपेक्ष पथ का उपयोग करते हैं। एक रिश्तेदार पथ का उपयोग करने से ऑटो-लॉन्च की गई स्क्रिप्ट को आपकी कुंजी नहीं मिलेगी।

  2. सुनिश्चित करें कि जब आप टाइप करते हैं तो आपकी सभी कुंजियाँ दिखाई जाती हैं ssh-add -A

  3. एक फाइल बनाएं जिसका नाम com.yourusername.ssh-add.plistमें ~/Library/LaunchAgents/नीचे सामग्री के साथ। जब आप लॉग इन करते हैं तो इस तरह की प्लिस्ट फाइल्स का इस्तेमाल launchdस्क्रिप्ट चलाने के लिए किया जाता है । [२] [३]

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Label</key>
      <string>com.user.loginscript</string>
    <key>ProgramArguments</key>
      <array>
        <string>ssh-add</string>
        <string>-A</string>
      </array>
    <key>RunAtLoad</key>
      <true/>
    </dict>
    </plist>
    
  4. अपने द्वारा निष्पादित किए launchdगए प्लिस्ट फ़ाइल को लोड करने के लिए कहेंlaunchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist :।

और आप सभी सेट होना चाहिए।



33

रिकार्डो के जवाब से आसान तरीका है कि आप अपने मैक को 10.12 Sierra चलाने वाले सत्र / पुनरारंभ के बीच अपना पासवर्ड जारी रखें।

  1. ssh-add -K ~/.ssh/id_rsa
    नोट: जहां आपका id_rsa कुंजी स्थित है, वहां पथ बदलें।
  2. ssh-add -A
  3. निम्न ~/.ssh/configफ़ाइल बनाएं (या मौजूद होने पर संपादित करें) :

    Host *
      UseKeychain yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_rsa
    

    अब पासवर्ड पुनरारंभ के बीच याद किया जाता है!

Apple ने जानबूझकर macOS 10.12 Sierra में ssh- एजेंट के व्यवहार को बदल दिया है, जो कि पिछले OpenHadar , Twitter चर्चा और Apple के तकनीकी नोट में दिए अनुसार पिछली SSH कुंजियों को स्वचालित रूप से लोड नहीं करता है । ऊपर दिए गए समाधान El Capitan के पुराने व्यवहार की नकल करेंगे और आपके पासवर्ड को याद रखेंगे।


2
बहुत बढ़िया, एक आकर्षण की तरह काम करता है, एक बहुत क्लीनर तो दूसरों को और सही जगह में हल :) :)
GerardJP


10

नोट: macOS Sierra के लिए, कृपया क्रिसजेएफ द्वारा हाल ही में दिए गए उत्तर को देखें

[जेफ मैककारेल द्वारा [उत्तर] [2] सही है, सिवाय इसके कि पास वाक्यांश को जोड़ने की कमान में एक हाइफ़न के बजाय एक एन डैश होता है, अर्थात के –Kबजाय -Kएक संदेश होता है, जिसके प्रभाव के लिए एक संदेश होता है –K: No such file or directory। इसे पढ़ना चाहिए:

ssh-add -K [path/to/private SSH key]

2
यह उस उत्तर के लिए एक टिप्पणी होनी चाहिए जिसे आप एक ताजा उत्तर के बजाय संदर्भित करते हैं। हम यहां सुरक्षा की बात कर रहे हैं। सुझाव है कि आप आँख बंद करके नकल करने के बजाय इसे सावधानी से टाइप कर सकते हैंssh-add -K
21_22 को Phil_1984_

1
K के साथ एक हाइफ़न का उपयोग करते हुए, मुझे मिलता है illegal option -- K। लोअरकेस k को एक विकल्प के रूप में सूचीबद्ध किया गया है।
सैम डटन

प्रतिक्रिया के लिए धन्यवाद। मैंने अभी macOS Sierra पर चेक किया: -Kयानी डैश-कैपिटल-के, अभी भी वैध है
सिमोनियर

6

मुझे संदेह है कि आप डिफ़ॉल्ट sshकमांड का उपयोग नहीं कर रहे हैं । क्या आपने sshबंदरगाहों के माध्यम से स्थापित किया है? which sshयह देखने की कोशिश करें कि sshआप किस कमांड का उपयोग कर रहे हैं।

आमतौर पर यह आपको पासवर्ड के लिए पूछते हुए एक संवाद बॉक्स प्रदर्शित करना चाहिए, अगर यह पहले से ही आपके किचेन में संग्रहीत नहीं है।


मैं बंदरगाहों का उपयोग नहीं कर रहा हूं।
जॉन टॉपले

जानकारी के लिए धन्यवाद :) मुझे समस्या थी क्योंकि मैं होमब्रे से ओपनएसएसएच का उपयोग कर रहा था।
ggustafsson

6

क्लाइंट ssh प्रमाणपत्र का उपयोग करके लॉगिन करने की कोशिश करते समय मुझे ऐसी ही समस्या थी। इस विशिष्ट मामले में यह एक गिट रिपॉजिटरी तक पहुँचने के लिए था। यह थी स्थिति:

  • में चाबी बच गई थी ~/.ssh/
  • निजी कुंजी में एक पासफ़्रेज़ है।
  • पासफ़्रेज़ को OS X लॉगिन किचेन में संग्रहीत किया जाता है। ~/Library/Keychains/login.keychain
  • कनेक्शन इस प्रकार था: मेरा मैक ->रिमोट मैक ->git / ssh सर्वर
  • मैक ओएस एक्स 10.8.5

जब मैं दूरस्थ डेस्कटॉप का उपयोग करके दूरस्थ मैक से जुड़ा, मुझे कोई समस्या नहीं थी। हालाँकि जब SSH को दूरस्थ मैक से जोड़ते हैं, तो मुझे हर बार ssh पासफ़्रेज़ के लिए कहा जाता था। निम्नलिखित चरणों ने इसे मेरे लिए हल कर दिया।

  1. security unlock-keychainपासफ़्रेज़ को लॉगिन किचेन में संग्रहीत किया जाता है। यह इसे अनलॉक करता है और इसे एक्सेस करने के लिए ssh-Agent को सक्षम बनाता है।
  2. eval `ssh-agent -s`शेल उपयोग के लिए ssh-agent प्रारंभ करता है। यह चाबी का गुच्छा से पासफ़्रेज़ प्राप्त करेगा और इसका उपयोग निजी ssh कुंजी को अनलॉक करने के लिए करेगा।
  3. Ssh / git कनेक्शन स्थापित करें और अपना काम करें।
  4. eval `ssh-agent -k` चल ssh- एजेंट को मार डालो।
  5. security lock-keychain चाबी का गुच्छा फिर से बंद करें।

1
# 2 के लिए एक उपनाम में मेरे लिए काम करने के लिए, मुझे eval \$(ssh-agent)प्रति Re: दूरस्थ लॉगिन और किचेन का उपयोग करना पड़ा । जब एक उपनाम के भीतर eval $(ssh-agent)काम नहीं करता है ( बैकस्लैश $ के बिना )।
ट्रैविस

4

यह सभी देखें:

security import priv_key.p12 -k ~/Library/Keychains/login.keychain
security import pub_key.pem -k ~/Library/Keychains/login.keychain

... इस नोट को और अधिक विवरण के रूप में जोड़ने का अनुरोध किया गया था: "सुरक्षा" कमांड कीचेन में सीधे कुंजी (और अन्य चीजों) को आयात करने में सक्षम है। अच्छी बात यह है कि ssh-add के विपरीत, आप चाबी का गुच्छा निर्दिष्ट करने में सक्षम हैं। यह सिस्टम में सीधे आयात करना संभव बनाता है किचेन ("मैन सिक्योरिटी" कैसे सीखें)


1
क्या आप कृपया इस उत्तर को थोड़ा और विस्तार दे सकते हैं? धन्यवाद।
मैथ्यू विलियम्स

1

सबसे अच्छा और Apple इच्छित समाधान (चूंकि macOS 10.12.2) यहां वर्णित है

तो बस निम्नलिखित करें:

गूंज "UseKeychain हाँ" >> ~ / .ssh / config


1
>>यदि आप कई बार कमांड इनपुट करते हैं, तो इसका उपयोग करना जोखिम में है। बेहतर फ़ाइल का एक मैन्युअल संस्करण है, जैसा कि क्रिसजैफ उत्तर द्वारा वर्णित है ।
कूर

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