जब AgentForwarding उपयोग में है तो ssh_config में IdentityFile निर्देश का उपयोग करना


15

क्या .ssh / config में IdentityFile के निर्देश का उपयोग करके अग्रेषित कुंजी निर्दिष्ट करना संभव है?

जब हम अपने उत्पादन सर्वर पर Capistrano / GIT के माध्यम से कुछ कोड को तैनात करने का प्रयास कर रहे थे, तो मैं इस क्वर्की में भाग गया। मेरे व्यक्तिगत और मेरे काम दोनों GIT कुंजियाँ हमेशा मेरे SSH एजेंट में लोड की जाती हैं और यह सिर्फ इतना हुआ कि मेरी व्यक्तिगत कुंजी को पहले एजेंट में जोड़ा गया। जब कैपिस्ट्रानो के साथ तैनाती करते समय मैं एजेंट फॉरवर्डिंग का उपयोग करता हूं, तो जब मेजबान `गिट पुल 'ऑपरेशन को प्रमाणित करने की कोशिश करता है, तो यह निम्न त्रुटि के साथ विफल रहा:

त्रुटि: `कुछ रेपो` को` अपने उपयोगकर्ता` से वंचित करने की अनुमति।

क्योंकि यह उचित कुंजी (जो बाद में ssh एजेंट में आया था) की कोशिश करने से पहले मेरी व्यक्तिगत गिट कुंजी का उपयोग करके प्रमाणित करने का प्रयास करता है और यह मान लेता है कि मैं एक विदेशी रेपो तक पहुंच रहा था जिसे मुझे एक्सेस करने की अनुमति नहीं है। मैं संभावित रूप से अपने व्यक्तिगत उपयोगकर्ता को हर काम के लिए रेपो प्रदान कर सकता हूं, लेकिन अपनी स्थानीय मशीन पर मैं कस्टम डोमेन में .ssh / config जैसे डिफॉल्ट डोमेन द्वारा इस समस्या को हल कर सकता हूं:

होस्ट personal.github.com
होस्टनाम github.com
उपयोगकर्ता Git
IdentityFile ~ / .ssh / some_key

होस्ट work.github.com
होस्टनाम github.com
उपयोगकर्ता Git
IdentityFile ~ / .ssh / some_other_key

और इस तरह गिट कभी भ्रमित नहीं होता है। क्या मेरे उत्पादन बक्से पर अग्रेषित कुंजी के लिए .ssh / config नियम बनाना संभव है ताकि वे हमेशा यह जान सकें कि नए कोड में खींचते समय किस कुंजी का उपयोग करना है? मूल रूप से मैं ऐसा करने में सक्षम होना चाहता हूं:

होस्ट work.github.com
होस्टनाम github.com
उपयोगकर्ता Git
IdentityFile some_forwarded_key

धन्यवाद!

जवाबों:


22

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

  1. एक सुविधाजनक स्थान (जैसे ~/.ssh/some_other_key.pub) में वांछित कुंजी के सार्वजनिक भाग की एक प्रति के लिए मध्यवर्ती मशीन की व्यवस्था करें ।

    किसी भी मशीन से, जिसमें पहले से ही सार्वजनिक कुंजी है:

    scp some_other_key.pub intermediate:.ssh/
    

    या, मध्यवर्ती मशीन पर:

    ssh-add -L | grep something_unique > ~/.ssh/some_other_key.pub
    

    आप कुंजी की उत्पत्ति / मालिक / उद्देश्य (या उसी को छिपाने का प्रयास) को बेहतर ढंग से पहचानने के लिए सार्वजनिक कुंजी के पीछे के "टिप्पणी" भाग को संपादित करना चाह सकते हैं।

  2. उपरोक्त सार्वजनिक कुंजी फ़ाइल में -iया के साथ pathname का उपयोग करें IdentityFile

  3. आपको अपने अग्रेषित एजेंट से किसी भी अतिरिक्त पहचान की पेशकश करने की कोशिश करने से ssh रखने के लिए IdentitiesOnly yes( .ssh/configया में -o) का उपयोग करने की आवश्यकता हो सकती है ।


यह केवल एक चीज है जिसने मेरे लिए 10 अन्य समाधानों से काम किया है।
ट्रेसी फू

1
इसके साथ खेलने से मुझे महसूस हुआ कि यदि आप उस निजी कुंजी से जुड़ी सार्वजनिक कुंजी को रखते हैं जिसे आप ~ / .ssh / id_rsa.pub में उपयोग करना चाहते हैं, तो इसका उपयोग डिफ़ॉल्ट रूप से किया जाएगा, ~ / में किसी भी विन्यास की कोई आवश्यकता नहीं है .ssh / config फाइल।
bschlueter

धन्यवाद क्रिस और bschlueter! अब मैं इससे जुड़ता हूं: ssh someserver -t "ssh-add -L | grep something_un>> ~ / .shsh / id_rsa.pub; cd some / other / folder; bash --login
blablabla

जब मैं ssh -v -T ...सर्वर के साथ यह कोशिश करता हूं तो सार्वजनिक कुंजी स्वीकार करता है, लेकिन तब ssh कहता है No such identity: /home/name/.ssh/id_rsa: No such file or directoryऔर बाद में प्रमाणीकरण विफल हो जाता है। मैंने अपने सभी कॉन्फ़िगरेशन में फॉरवर्डएजेंट को सक्षम किया है। क्या समस्या हो सकती है?
लार्स Nyström
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.