macOS सिएरा रिबूट के बीच SSH कुंजी को याद नहीं करता है


184

मुझे macOS में अपग्रेड करने के बाद से यह कमांड चलाना है:

ssh-add -K

रिबूट के बाद समस्या को ठीक करता है लेकिन मुझे अपने कंप्यूटर पर लॉग इन करने पर हर बार इस कमांड को चलाना होगा।

यदि मैं ऊपर कमांड नहीं चलाता हूं, तो मेरी कुंजी ~/.sshको छोड़ दिया जाता है और कनेक्शन स्थापित करने के लिए मुझसे सर्वर पासवर्ड पूछा जा रहा है।


1
$ ssh-add -Kमुझे देता हैssh-add: illegal option -- K
11

1
इसके बाद आपको निजी कुंजी पथ दर्ज करना होगा -K। संकल्प के लिए @JakeGould का जवाब देखें।
बिशर्बास

10.12.2 अपडेट ने मेरे लिए कुछ अनावश्यक सर्वर पासवर्ड अनुरोधों को समाप्त कर दिया। अब आपको ssh-add -K चलाने की आवश्यकता नहीं होगी।
रास्ते में अजनबी

जवाबों:


215

MacOS के रूप में सिएरा 10.12.2 Apple ने एक ssh_configविकल्प जोड़ा, जिसे UseKeychainसमस्या का 'उचित' समाधान करने की अनुमति मिलती है। अपनी ~/.ssh/configफ़ाइल में निम्न जोड़ें :

Host *
   AddKeysToAgent yes
   UseKeychain yes     

ssh_config man10.12.2 को पृष्ठ से :

UseKeychain

MacOS पर, निर्दिष्ट करता है कि सिस्टम को किसी विशेष कुंजी का उपयोग करने का प्रयास करते समय उपयोगकर्ता के किचेन में पासफ्रेज की खोज करनी चाहिए या नहीं। जब उपयोगकर्ता द्वारा पासफ़्रेज़ प्रदान किया जाता है, तो यह विकल्प भी निर्दिष्ट करता है कि पासफ़्रेज़ को सही होने के लिए सत्यापित किए जाने के बाद किचेन में संग्रहीत किया जाना चाहिए या नहीं। तर्क 'हां' या 'नहीं' होना चाहिए। डिफ़ॉल्ट 'नहीं' है।


2
इस लिंक के अनुसार: Openradar.appspot.com/27348363 Apple ने "इस क्षेत्र में मुख्यधारा ओपनएसएसएच के साथ [उनके] व्यवहार को फिर से संरेखित किया है"।
थॉमसडब्ल्यू

15
यह बेतुका है कि Apple ने एक तरह से व्यवहार को संशोधित किया जो कि अधिकांश डेवलपर्स के लिए मुद्दों का कारण होगा (क्योंकि GitHub धक्का अगर कुछ और नहीं) और किसी को कुछ नहीं कहा!
मुलिसब्रोन

9
मुझे लगता है कि IdentityFile ~/.ssh/id_rsaयह बेमानी है और इसकी आवश्यकता नहीं है (जब डिफ़ॉल्ट विकल्पों को देखते हुए)। मैंने उस विकल्प को अपनी ssh config फाइल में कभी सेट नहीं किया है।
उपरांत

9
@ जेकगोल्ड आईएमओ बदलना ~/.ssh/config~बेहतर है क्योंकि यह समस्या को हल करता sshहै। नहीं 100% यकीन है कि .bash_profileमॉड जीयूआई ग्राहकों के लिए एक शेल का उपयोग किए बिना एसश का उपयोग करने के लिए काम करेगा।
mluisbrown

7
Apple ने उस परिवर्तन के संबंध में तकनीकी नोट TN2449 प्रकाशित किया ।
केंटोजो

106

कैपिसट्रानो का उपयोग करके कुछ कोड को तैनात करने का प्रयास करते समय मेरे पास यह मुद्दा था । अधिक निराश। इस समस्या से निपटने के लिए मुझे दो विधियां दी गई हैं।

विधि 1: SSH एजेंट में सभी ज्ञात कुंजियाँ जोड़ें ।

इसलिए मुझे जो एक समाधान मिला वह विकल्प के ssh-addसाथ चलना है -A- जो आपके किचेन में संग्रहीत किसी भी पासफ़्रेज़ का उपयोग करके एसएसएच एजेंट को सभी ज्ञात पहचान जोड़ता है - जैसे:

ssh-add -A

अब यह काम करता है लेकिन यह रिबूट के पार नहीं रहेगा। इसलिए यदि आप फिर से इस बारे में कभी चिंता नहीं करना चाहते हैं, तो अपने उपयोगकर्ता की ~/.bash_profileफ़ाइल को इस तरह खोलें :

nano ~/.bash_profile

और इस पंक्ति को नीचे तक जोड़ें:

ssh-add -A 2>/dev/null;

अब जब आप एक नया टर्मिनल विंडो खोलते हैं, तो सब अच्छा होना चाहिए!

विधि 2: एजेंट में कीचेन में केवल SSH कुंजियाँ जोड़ें ।

इसलिए जब ssh-add -Aविकल्प को सबसे बुनियादी मामलों के लिए काम करना चाहिए, तो मैं हाल ही में एक मुद्दे पर भाग गया, जहां मेरे पास 6-7 वैग्रेंट बॉक्स थे (जो कि एक्सेस के लिए SSH कुंजी / पहचान का उपयोग करता है) id_rsa.pubजगह में अधिक सामान्य के शीर्ष पर एक मशीन पर सेटअप ।

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

समस्या यह है कि ssh-add -Aबस मनमाने ढंग से हर एक SSH कुंजी / पहचान आप एजेंट को जोड़ देंगे, भले ही ऐसा करना आवश्यक न हो; जैसे कि वैग्रेंट बॉक्स के मामले में।

बहुत परीक्षण के बाद मेरा समाधान इस प्रकार था।

सबसे पहले, यदि आपके पास जरूरत से ज्यादा SSH कुंजी / पहचान आपके एजेंट में शामिल हैं - जैसा कि ssh-add -lतब दिखाया गया है, तो एजेंट से उन सभी को शुद्ध करें:

ssh-add -D

उस के साथ, फिर SSH एजेंट को पृष्ठभूमि प्रक्रिया के रूप में शुरू करें जैसे:

eval "$(ssh-agent -s)"

अब, यह अजीब हो गया है और मुझे यकीन नहीं है कि क्यों। कुछ मामलों में आप विशेष रूप ~/.ssh/id_rsaसे एजेंट को कुंजी / पहचान जोड़ सकते हैं :

ssh-add ~/.ssh/id_rsa

अपने पासफ़्रेज़ में टाइप करें, हिट करें Returnऔर आपको जाने के लिए अच्छा होना चाहिए।

लेकिन अन्य मामलों में बस इसे चलाने के लिए कुंजी / पहचान जोड़ा जाना पर्याप्त है:

ssh-add -K

यदि यह सब काम कर रहा है, तो टाइप करें ssh-add -lऔर आपको एक अकेला एसएसएच कुंजी / पहचान सूचीबद्ध दिखनी चाहिए।

सब अच्छा? अब अपने को खोलें .bash_profile:

nano ~/.bash_profile

और इस पंक्ति को नीचे तक जोड़ दें; -Aयदि आपके पास जगह है तो टिप्पणी करें या हटाएं :

ssh-add -K 2>/dev/null;

यह SSH कुंजी / पहचान को प्रत्येक स्टार्टअप / रिबूट पर SSH एजेंट को पुनः लोड करने की अनुमति देगा।

अद्यतन: Apple ने अब UseKeychainखुले SSH विन्यास विकल्पों में एक विकल्प जोड़ा है और ssh-add -Aएक समाधान भी मानता है।

MacOS सिएरा 10.12.2 के रूप में, Apple नेUseKeychain SSH कॉन्फ़िगरेशन के लिए एक कॉन्फ़िगरेशन विकल्प जोड़ा है । आदमी पृष्ठ की जाँच (के माध्यम से man ssh_config) निम्नलिखित जानकारी से पता चलता है:

UseKeychain
        On macOS, specifies whether the system should search for
        passphrases in the user's keychain when attempting to use a par-
        ticular key. When the passphrase is provided by the user, this
        option also specifies whether the passphrase should be stored
        into the keychain once it has been verified to be correct.  The
        argument must be ``yes'' or ``no''.  The default is ``no''.

जो इस खुले राडार टिकट में बताए अनुसारssh-add -A आपके समाधान के रूप में एप्पल को देखकर उबलता है या प्रति उपयोगकर्ता विकल्प में से एक को जोड़ता है ।.bash_profile UseKeychain~/.ssh/config


4
@modius: यदि आपके पास एक pw संरक्षित कुंजी है, तो ssh-add -K [path to key]संकेत दिए जाने पर pw करें और दर्ज करें। चाबी का गुच्छा पासवर्ड स्टोर करेगा और ssh-add उसके बाद वहां से मिलेगा।
तिमो

2
नोट- अपने किचेन में रखे किसी भी पासफ्रेज का उपयोग करके एजेंट को पहचान जोड़ने के लिए। यदि आपके पास बिना पासफ़्रेज़ के पहचान है, तो आपको उन्हें अपने एजेंट में जोड़ने के लिए -A विकल्प को छोड़ना होगा।
इवान पोन

12
बस इसमें थोड़ी अधिक दृश्यता जोड़ने के लिए, Apple ने ssh_config को शामिल करने के लिए UseKeychainऔर AddKeysToAgentअपने ssh_config से स्वचालित रूप से अपनी कुंजियाँ जोड़ने के लिए मैन पेज अपडेट किया है । कोई शेल स्क्रिप्टिंग की जरूरत नहीं है। 10.12.2 के लिए अद्यतन जानकारी के लिए नीचे @mluisbrown उत्तर देखें
रयान गिबन्स

1
@JakeGould मुझे वही मिलता है जो आप कह रहे हैं, मुझे वास्तव में पसंद है कि वे क्या कर रहे हैं। किचेन में पासफ़्रेज़ को स्वचालित रूप से सहेजने और बूट पर लोड करने के बजाय, वे आपको आपकी सुरक्षा का नियंत्रण दे रहे हैं। / श्रग
रयान गिब्बन्स

1
@RyanGibbons FWIW, OpenRadar पर इस उत्तर में Apple डेवलपर रिलेशन्स के आधिकारिक सुझाव को देखें: ssh-add -Aयदि आप चाहते हैं कि आपकी चाबियाँ हमेशा लोड रहें, तो आप अपनी ¯\_(ツ)_/¯
आरसी

16

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

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

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


मैं इस जवाब को जोड़ रहा हूँ क्योंकि:

  • अन्य उत्तर आपको IdentityFile ~/.ssh/id_rsaलाइन जोड़ने के लिए कहते हैं , लेकिन कुंजियों को स्वचालित करने के लिए उस विकल्प की आवश्यकता नहीं होती है (और यह वास्तव में उस विशेष कुंजी को बाँध देगा जिसके लिए होस्ट अनुभाग आपके ऐड में है, जिसे आप नहीं चाहेंगे यदि आप विभिन्न कुंजियों का उपयोग करते हैं विभिन्न hots)।
  • स्वीकृत उत्तर में उल्लेख है UseKeychain, लेकिन यह ssh-agentरिबूट के बाद चाबियों को जारी रखने के लिए पर्याप्त नहीं है ।

1
दूसरे बिंदु के संबंध में। बस आप कितने आश्वस्त हैं? वास्तव में रिबूट पर कुछ भी नहीं होता है और इसका उल्लेख आपके संदर्भ सामग्री में भी नहीं किया गया है। उपरोक्त कॉन्फ़िगरेशन के साथ क्या होता है कि आपका SSH क्लाइंट पहले कनेक्शन पर कुंजी को एजेंट में लोड करेगा (और यह चाबी का गुच्छा से पासफ़्रेज़ भी लाएगा), फिर कुंजी लोड रहेगी। आप रिबूट के माध्यम से कुंजियों को सूचीबद्ध करके इस कथन को सत्यापित कर सकते हैं ssh-add -Lऔर यह रिपोर्ट करेगा The agent has no identities। जब तक आप कनेक्ट नहीं करते तब तक कुछ भी नहीं होगा। AddKeysToAgentकिसी भी तरह से रिबूट के बीच कुंजी मौजूद नहीं होता!
दानिला वर्शिन

15

मैंने इस विषय के बारे में एक छोटी पोस्ट लिखी है जो आपकी मदद कर सकती है।

एक समाधान ssh-add -Aहर स्टार्टअप पर कमांड कॉल कर रहा है ।

.plistपथ में निम्नलिखित सामग्री के साथ बस फ़ाइल जोड़ें ~/Library/LaunchAgents/या लिंगोन ऐप के साथ एक बनाएं :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>ssh-add-a</string>
    <key>ProgramArguments</key>
    <array>
        <string>ssh-add</string>
        <string>-A</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

<!-- @@@@LingonWhatStart:ssh-add -A@@@@LingonWhatEnd -->

8

चूंकि macOS 10.12.2 आप UseKeychainविकल्प का उपयोग कर सकते हैं । यहाँ और अधिक पढ़ें या देखें man ssh_config

     UseKeychain
         On macOS, specifies whether the system should search for passphrases in the user's keychain
         when attempting to use a particular key. When the passphrase is provided by the user, this
         option also specifies whether the passphrase should be stored into the keychain once it has
         been verified to be correct.  The argument must be ``yes'' or ``no''.  The default is ``no''.

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

echo "UseKeychain yes" >> ~/.ssh/config


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

आप वहीं हैं :-)
बेन

4

मैंने पाया कि ssh-add -Kमुझे " अवैध विकल्प - के " दिया। ऐसा इसलिए था क्योंकि ssh-add एक अजीब संस्करण / usr / स्थानीय / बिन (काढ़ा द्वारा स्थापित?) से आ रहा था। मैं ssh-add के विशिष्ट उपयोग द्वारा कुंजी जोड़ने में सक्षम था / usr / bin:

/usr/bin/ssh-add -K ~/.ssh/id_rsa

उम्र के लिए आसानी से काम करने में नाकाम रहने के बाद यह काम करता है।
nyxee

4

मुझे पहले यह समस्या थी और मैंने इसे दरकिनार करने का एक तरीका खोज लिया है। मैंने configअपने ~/.sshफ़ोल्डर में एक फ़ाइल बनाई है , जहाँ मैंने निम्नलिखित पंक्तियाँ जोड़ी हैं:

Host github.com
HostName github.com
IdentityFile ~/.ssh/github
IdentitiesOnly yes

मुझे यकीन है कि क्यों नहीं हूँ, लेकिन Hostऔर HostNameदोनों महत्वपूर्ण है। मेरे मामले में अगर उनमें से एक भी मौजूद नहीं था, तो समाधान काम नहीं करता था।

फिर, मैंने अभी किया था ssh-add -Kऔर यह पुनरारंभ होने के बाद भी काम कर रहा था।


1
होस्ट एक विशेष सर्वर के लिए आपका उपयोगकर्ता-परिभाषित नाम / उपनाम है और प्रति सर्वर प्रविष्टियों का सीमांकन करता है: स्टाइलिस्टिक रूप से होस्ट प्रविष्टि का अनुसरण करने वाली लाइनों को इंडेंट करना अच्छा है। HostName सर्वर के नेटवर्क पते को github.com जैसे नाम से इंगित करता है, लेकिन आप IP पते का भी उपयोग कर सकते हैं। होस्ट और होस्टनाम को एक ही चीज़ नहीं होना चाहिए, लेकिन हाँ, वे दोनों ssh config प्रारूप के अभिन्न अंग हैं।
मार्क फॉक्स

4

यदि आप ssh के विभिन्न संस्करण का उपयोग कर रहे हैं (उदाहरण के लिए homebrew के माध्यम से स्थापित) तो उपरोक्त समाधान बॉक्स से बाहर काम नहीं करेंगे। उदाहरण के लिए, AddKeysToAgent yesऔर UseKeychain yesमें .ssh/configफ़ाइल गैर एप्पल ssh संस्करणों द्वारा मान्यता प्राप्त नहीं कर रहे हैं और एक त्रुटि का कारण होगा। के लिए एक ही -Aया -Kके लिए विकल्प sshग्राहक।

इसका मतलब है कि @mluisbrown का जवाब बिल्कुल काम नहीं करेगा। आप @JakeGould के उत्तर की विधि 1 का उपयोग कर सकते हैं और चाबी का गुच्छा में सभी कुंजियों को जोड़ने के लिए ssh-addअपने में macOS उपयोगिता का स्पष्ट रूप से उपयोग कर सकते .bash_profileहैं, अर्थात:

/usr/bin/ssh-add -A

जैसा कि ऊपर एक टिप्पणी द्वारा उल्लेख किया गया है , आपको पहले चाबी का गुच्छा के लिए एक कुंजी जोड़ना पड़ सकता है: उदा/usr/bin/ssh-add -K .ssh/github


2

सभी मेजबानों के लिए UseKeyChain जोड़ने के लिए ~ / .ssh / config में संशोधन करना इस आवर्ती दुःस्वप्न को रोकने के लिए पर्याप्त है;)

Host *
 UseKeychain yes

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


1

मैंने मैक ओएस एक्स सिएरा (10.12.6) को अपडेट किया। मैं अन्य मेजबानों में नहीं बल्कि github.com पर जा सकता हूं।

यही मुझे ~ / .ssh / config में सम्मिलित करना है:

PubkeyAcceptedKeyTypes ssh-dss,ssh-rsa

उस परिवर्तन के बाद, मैं पहले की तरह जीथब का उपयोग कर सकता था।

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