स्नो लेपर्ड पर ssh-Agent को मेरी कुंजी जोड़ने से ssh को कैसे रोकें?


8

मैंने हाल ही में स्नो लेपर्ड (कुछ वर्षों के लिए तेंदुए का उपयोग करने के बाद) का उपयोग करना शुरू किया, और मैंने देखा कि जब मैं पासफ़्रेज़-रक्षित निजी कुंजी का उपयोग कर रहा हूं, ssh स्वतः ssh-agent की कुंजी जोड़ देगा। प्रश्न 1: मैं एसएचएस को इस तरह से व्यवहार करने से कैसे रोक सकता हूं (ऑटो-ऐड करना)?

मैं ssh- एजेंट के ऑटो-लॉन्च को अक्षम करने के लिए नहीं देख रहा हूं । मैं वास्तव में इसका उपयोग करता हूं, लेकिन मैं चाहता हूं कि चाबियाँ मैन्युअल रूप से जोड़ी जाए (ssh-add के माध्यम से), स्वचालित रूप से नहीं।

मेरा वर्तमान वर्कअराउंड: मैंने /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist को "-t 1" तर्क के साथ चलाने के लिए संपादित किया है और यह अच्छी तरह से काम करता है। लेकिन मुझे डर है कि कुछ सॉफ़्टवेयर अपडेट इसे वापस कर देंगे। प्रश्न 2: अगर मैं संशोधित प्लीस्ट को ~ / लाइब्रेरी / लॉन्चअगेंट में डाल दूं / तो क्या मेरे यूजर के लिए इन / सिस्टम को अनदेखा किया जाएगा? यह एक स्थिर समाधान के रूप में अर्हता प्राप्त करेगा।


अच्छा सवाल है, लेकिन मुझे पहले चेतावनी वाक्य की आवश्यकता नहीं
दिखती

ssh-add -Dआदेशों के किस क्रम के बाद कुंजी जुड़ने का कारण बनता है? ssh somwhereअपने आप चाबियाँ नहीं जोड़ना चाहिए। एक नए शुरू किए गए एजेंट में चाबियाँ होती हैं जो एक किचेन में पासफ़्रेज़ संग्रहीत होती हैं और जब भी एक एसएसएच कमांड विज्ञापन एजेंट सॉकेट का उपयोग करने की कोशिश करता है, तो एक एजेंट स्वचालित रूप से एक एजेंट शुरू करेगा। हालाँकि, ऐसे स्वचालित रूप से जोड़े गए कुंजी डिफ़ॉल्ट जीवनकाल -t(बग के कारण?) के लिए प्रतिरक्षा हैं , इसलिए यदि जोड़ना -tप्रभावी है, तो आपकी कुंजियों को किसी अन्य तरीके से जोड़ा जा रहा है ( ssh-addशेल स्टार्टअप स्क्रिप्ट में या कुछ सामान्य रूप से रन स्क्रिप्ट?)।
क्रिस जॉन्सन

@ क्रिस-जॉनसन क्या आप वास्तव में हिम तेंदुए पर यह परीक्षण कर रहे हैं ? SL पर SSH तेंदुए से अलग कार्य करता है। मुझे पता है कि SL की ssh ssh-agent में मेरी कुंजी जोड़ रही है क्योंकि मैंने नए मैक पर यह कोशिश की थी। मैं बाद में "ssh-add -D" के साथ संग्रहीत कुंजी साफ़ कर सकता हूं और फिर मुझे पासफ़्रेज़ डायलॉग बॉक्स फिर से मिलेगा, लेकिन यह स्वीकार्य समाधान नहीं है। लॉग आउट करने से संग्रहीत कुंजी भी साफ हो जाएगी (यह व्यवहार ssh- एजेंट छोड़ने के अनुरूप है)। समस्या प्रजनन योग्य है। मैं अकेला नहीं हूँ: serverfault.cms-forex.info/details/144147/…
केल्विन

हां, मैं स्नो लेपर्ड का उपयोग कर रहा हूं, लेकिन मैंने हमेशा Apple द्वारा प्रदान किए गए संस्करण के बजाय "स्टॉक" ssh का उपयोग किया है। मैंने Apple के ssh के साथ आपके "ssh ऑटो-ऐड" व्यवहार को पुन: पेश किया । जब मैंने कोड की जांच की, तो मुझे एक अनिर्धारित सेटिंग मिली जो ऐसा लगता है कि यह आपकी समस्या को हल कर देगा (हालांकि आपको GUI- आधारित पासफ़्रेज़ प्रॉम्प्ट को छोड़ना होगा)।
क्रिस जॉन्सन

जवाबों:


5

स्वचालित रूप से जोड़े गए कुंजी

स्नो लेपर्ड में एसएसएच कीज को एसएच-एजेंट में जोड़ने के तीन तरीके हैं ।

  • मैन्युअल रूप से, 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- एजेंट को इन "याद कुंजी" को जोड़ने के लिए छोड़ देता है। पहले शुरू होता है।KeychainIntegrationprocess_add_from_keychainkeychain.cmainssh-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 :

  1. ~/Library/LaunchAgents/
  2. /Library/LaunchAgents/
  3. /Network/Library/LaunchAgents/ (अधिकांश प्रणालियों पर मौजूद नहीं)
  4. /System/Library/LaunchAgents/

यह प्रलेखित नहीं लगता है, लेकिन प्रत्येक लेबल (जैसे org.openbsd.ssh-agent) के लिए केवल पहली नौकरी विन्यास रखा जाएगा। बाद की डायरेक्टरी से कोई भी कॉन्फिगरेशन जो पहले वाली डायरेक्टरी से कॉन्फिगरेशन के समान है, प्रभावी रूप से स्किप हो जाती है।


1 मेंNSStartSearchPathEnumeration इस्तेमाल किया launchctl.c और NSSystemDirectories.h/ में परिभाषित देखें NSSystemDirectories.c

2 लॉन्च भी अन्य प्रकार की नौकरियों के लिए LaunchDaemons/विभिन्न LaunchAgents/निर्देशिकाओं के आगे निर्देशिका में दिखता है ।


@ क्रिस-जॉनसन मुझे एहसास है कि आप मददगार बनने की कोशिश कर रहे हैं, लेकिन कृपया संपूर्ण चरण-दर-चरण समाधान निकालने से पहले समस्या के विवरण को समझने की कोशिश करें।
केल्विन

जब मैं अपने SL मशीन पर होता हूं, तो मैं आपके "AskPassGUI" समाधान की कोशिश करूंगा। यदि यह काम करता है तो मैं आपके उत्तर को स्वीकार करूंगा। इसके अलावा, मैंने /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist को वापस कर दिया और अपनी संशोधित कॉपी / लाइब्रेरी / LaunchAgents / में डाल दी। मेरा मॉड लोड हो गया था।
केल्विन

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