स्वचालित रूप से जोड़े गए कुंजी
स्नो लेपर्ड में एसएसएच कीज को एसएच-एजेंट में जोड़ने के तीन तरीके हैं ।
- मैन्युअल रूप से, ssh-add के साथ ,
- स्वचालित रूप से, ssh द्वारा जब आप GUI प्रॉम्प्ट के माध्यम से एक कुंजी के पासफ़्रेज़ की आपूर्ति करते हैं, और
- स्वचालित रूप से, ssh- एजेंट द्वारा जब यह पहली बार शुरू होता है।
अंतिम दो तरीके Apple एक्सटेंशन हैं: स्टॉक ओपनएसएसएच के साथ "स्वचालित" अतिरिक्त नहीं हैं। Ssh , ssh-agent , और ssh-add के सभी संदर्भ नीचे Apple के स्नो लेपर्ड संस्करणों के हैं, जब तक कि मैं विशेषण "स्टॉक" के साथ कार्यक्रम का नाम उपसर्ग नहीं करता।
आप Apple के सभी किचेन-ओरिएंटेड SSH संशोधनों को (undocumented?) प्राथमिकता सेटिंग के साथ अक्षम कर सकते हैं:
defaults write org.openbsd.openssh KeychainIntegration -bool false
कुंजी ssh द्वारा स्वचालित रूप से जोड़ा गया
(यह वह हिस्सा है जिसे मैंने अपने मूल उत्तर के पिछले संस्करण में याद किया था क्योंकि मैं आमतौर पर "स्टॉक" ssh का उपयोग करता हूं ।)
जब भी ssh दूरस्थ होस्ट को प्रमाणित करने के लिए पासफ़्रेज़ संरक्षित SSH कुंजी का उपयोग करने का प्रयास करता है, तो यह SSH कुंजी के पासवर्ड के लिए GUI संकेत जारी करेगा। कुंजी को एजेंट में भी लोड किया जाता है (यदि पासफ़्रेज़ सही है) तो आप "मेरे किचेन में पासवर्ड याद रखें" चेकबॉक्स को चिह्नित करते हैं या नहीं।
इस GUI प्रॉम्प्ट को जारी करने से ssh को रोकने के दो (अविभाजित) तरीके हैं (और इस प्रकार SSH कुंजी को ssh-agent में जोड़ते हैं ):
एक प्राथमिकता सेटिंग:
defaults write org.openbsd.openssh AskPassGUI -bool false
एक
ssh_config
प्रविष्टि (या -o
विकल्प ssh ) जो निर्दिष्ट करता है AskPassGUI no
।
(देखें keychain_read_passphrase
में
keychain.c
; oAskPassGUI
पैरामीटर से आता है AskPassGUI
विन्यास सेटिंग)
जब AskPassGUI
अक्षम किया जाता है, तो ssh आपको कुंजी के पासवर्ड के लिए सामान्य तरीके से संकेत देगा (यानी ट्टी के माध्यम से)।
आप "स्टॉक" ssh (जैसे कि MacPorts द्वारा संकलित OpenSSH
,
Homebrew -alt , या
Fink ) से Homebrew "डुप्लिकेट"
का उपयोग करके
ssh से स्वचालित रूप से जोड़े जाने से बच सकते हैं ।
कुंजी ssh- एजेंट द्वारा स्वचालित रूप से जोड़ा गया
Ssh- एजेंट जो कुंजी स्वचालित रूप से जोड़ते हैं, वे हैं जो उनके पासफ़्रेज़ को किचेन में संग्रहीत करते हैं। जब कोई नया ssh- एजेंट शुरू होता है तो ये "याद की हुई" कुंजियाँ अपने आप जुड़ जाती हैं
। कोई आदेश पंक्ति या विन्यास विकल्प (के अलावा अन्य है
, ऊपर वर्णित है) को रोकने के लिए ssh-एजेंट स्वचालित रूप से "याद कुंजी" लोड करने से (करने के लिए कॉल को देखने
में परिभाषित (
से) में
)। यदि, हालांकि, आप अपने SSH कुंजी पासफ़्रेज़ को संग्रहीत करने वाले किचेन को लॉक करने की व्यवस्था कर सकते हैं, तो आप रद्द कर सकते हैं जब ssh- एजेंट किचेन को अनलॉक करने के लिए कहता है और प्रभावी रूप से ssh- एजेंट को इन "याद कुंजी" को जोड़ने के लिए छोड़ देता है। पहले शुरू होता है।KeychainIntegration
process_add_from_keychain
keychain.c
main
ssh-agent.c
यदि कोई ssh-एजेंट चल रहा है, के अपने पहले उपयोग ssh संभावना को गति प्रदान करेगा launchd एक शुरू करने के लिए ssh-एजेंट जो सभी "याद कुंजी" लोड होगा। इससे ऐसा लगता है जैसे ssh एजेंट्स में चाबियाँ लोड कर रहा है, लेकिन यह वास्तव में एजेंट ही है जो चाबियाँ लोड कर रहा है। यह केवल यह स्वचालित रूप से करता है जब यह पहली बार शुरू होता है।
-k
का विकल्प ssh-ऐड "याद कुंजी" जोड़ने के लिए (देखें एक मैनुअल तरीका प्रदान करता है add_from_keychain
में
ssh-add.c
एजेंट जो कॉल के लिए एक संदेश के रूप में समाप्त होता है जो
process_add_from_keychain
से process_message
में
ssh-agent.c
)।
लॉन्च विन्यास
आप सही हैं कि सिस्टम अपडेट फ़ाइल में आपके संशोधन को अधिलेखित कर सकता है /System/Library/LaunchAgents/
। आपको हमेशा चीजों को बदलने से बचना चाहिए /System/
; अधिकांश चीजें वहां बदलाव किए बिना कॉन्फ़िगर (पुनः) की जा सकती हैं। इस मामले में, ऐसा लगता है कि आपको एक फ़ाइल के साथ प्रति उपयोगकर्ता आधार पर सिस्टम डिफॉल्ट लॉन्चड जॉब विनिर्देश को ओवरराइड करने में सक्षम होना चाहिए ~/Library/LaunchAgents/
।
क्या मैं 1 बता सकता हूं , इस क्रम में प्रविष्टियां भरी हुई हैं 2 :
~/Library/LaunchAgents/
/Library/LaunchAgents/
/Network/Library/LaunchAgents/
(अधिकांश प्रणालियों पर मौजूद नहीं)
/System/Library/LaunchAgents/
यह प्रलेखित नहीं लगता है, लेकिन प्रत्येक लेबल (जैसे org.openbsd.ssh-agent
) के लिए केवल पहली नौकरी विन्यास रखा जाएगा। बाद की डायरेक्टरी से कोई भी कॉन्फिगरेशन जो पहले वाली डायरेक्टरी से कॉन्फिगरेशन के समान है, प्रभावी रूप से स्किप हो जाती है।
1 मेंNSStartSearchPathEnumeration
इस्तेमाल किया launchctl.c
और NSSystemDirectories.h
/ में परिभाषित
देखें
NSSystemDirectories.c
।
2
लॉन्च भी अन्य प्रकार की नौकरियों के लिए LaunchDaemons/
विभिन्न LaunchAgents/
निर्देशिकाओं के आगे निर्देशिका में दिखता है ।