मान लीजिए कि aliceएक github.com उपयोगकर्ता है, जिसमें 2 या अधिक निजी रिपॉजिटरी हैं repoN। इस उदाहरण के लिए हम सिर्फ दो नामित खजाने के साथ काम करेंगे repo1औरrepo2
https://github.com/alice/repo1
https://github.com/alice/repo2
आपको इन रिपॉजिटरी से एक सर्वर या एक से अधिक सर्वर पर पासवर्ड दर्ज किए बिना खींचने की आवश्यकता है। आप git pull origin masterउदाहरण के लिए प्रदर्शन करना चाहते हैं , और आप चाहते हैं कि पासवर्ड के लिए पूछे बिना ऐसा हो।
आप ssh- एजेंट के साथ व्यवहार करना पसंद नहीं करते हैं, आपने ~/.ssh/configएक फ़ाइल के बारे में पता लगाया है (या अब आप खोज रहे हैं) कि चलो अपने ssh क्लाइंट को पता है कि Hostname और यूज़रनेम के आधार पर उपयोग करने के लिए निजी कुंजी क्या है जो एक साधारण कॉन्फ़िगरेशन प्रविष्टि के साथ दिखती है यह:
Host github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/alice_github.id_rsa
IdentitiesOnly yes
तो आप आगे बढ़े और अपनी (alice_github.id_rsa, alice_github.id_rsa.pub)कीपियर बनाई , तो आप भी अपनी रिपॉजिटरी की .git/configफाइल में चले गए और आपने अपने रिमोट के url को originकुछ इस तरह से संशोधित किया :
[remote "origin"]
url = "ssh://git@github.com/alice/repo1.git"
और अंत में आप रिपॉजिटरी Settings > Deploy keysसेक्शन में गए और की सामग्री जोड़ीalice_github.id_rsa.pub
इस बिंदु पर आप अपना git pull origin masterपासवर्ड बिना किसी समस्या के दर्ज कर सकते हैं ।
लेकिन दूसरे भंडार के बारे में क्या?
तो आपकी वृत्ति उस कुंजी को हथियाने के लिए होगी और उसे repo2'डिप्लॉय कीज' में जोड़ें , लेकिन github.com त्रुटि करेगा और आपको बताएगा कि कुंजी का उपयोग पहले से ही किया जा रहा है।
अब आप जाते हैं और एक अन्य कुंजी उत्पन्न करते हैं ( ssh-keygen -t rsa -C "alice@alice.com"बेशक पासवर्ड के बिना), और ताकि यह एक गड़बड़ न बने, अब आप अपना नाम इस तरह से लिखेंगे:
repo1 कुंजीयुग्म: (repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)
repo2 कुंजीयुग्म: (repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)
repo2अब आप github.com पर नई सार्वजनिक कुंजी को तैनात करेंगे, लेकिन अब आपके पास इससे निपटने के लिए एक ssh समस्या है।
Ssh यह कैसे बता सकता है कि किस रिपॉजिटरी को एक ही github.comडोमेन पर होस्ट करने के लिए किस कुंजी का उपयोग किया जाए ?
आपकी .ssh/configफ़ाइल इंगित करती है github.comऔर यह नहीं जानती है कि खींचने के समय कौन सी कुंजी का उपयोग करना है।
इसलिए मुझे github.com के साथ एक ट्रिक मिली। आप अपने ssh क्लाइंट को बता सकते हैं कि प्रत्येक रिपॉजिटरी एक अलग github.com सबडोमेन में रहती है, इन मामलों में, वे होंगे repo1.github.comऔरrepo2.github.com
तो पहली बात .git/configआपके रेपो क्लोन पर फ़ाइलों को संपादित करना है , इसलिए वे इसके बजाय इस तरह दिखते हैं:
रेपो 1 के लिए
[remote "origin"]
url = "ssh://git@repo1.github.com/alice/repo1.git"
रेपो 2 के लिए
[remote "origin"]
url = "ssh://git@repo2.github.com/alice/repo2.git"
और फिर, अपनी .ssh/configफ़ाइल पर, अब आप प्रत्येक उपडोमेन के लिए एक विन्यास दर्ज कर सकेंगे :)
Host repo1.github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/repo1.alice_github.id_rsa
IdentitiesOnly yes
Host repo2.github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/repo2.alice_github.id_rsa
IdentitiesOnly yes
अब आप git pull origin masterदोनों रिपॉजिटरी से कोई भी पासवर्ड डाले बिना सक्षम हैं ।
यदि आपके पास कई मशीनें हैं, तो आप प्रत्येक मशीन की चाबी कॉपी कर सकते हैं और उनका पुन: उपयोग कर सकते हैं, लेकिन मैं सलाह दूंगा कि आप प्रति मशीन 1 कुंजी और रेपो उत्पन्न करने के लिए पैर का काम करें। आपके पास संभालने के लिए और भी बहुत सी चाबियां होंगी, लेकिन अगर आप समझौता कर लेते हैं तो आप कम कमजोर होंगे।