आकार में लाना
एक अलग github / bitbucket / जो भी खाते के तहत git रेपो का प्रबंधन करने के लिए, आपको बस एक नई SSH कुंजी उत्पन्न करने की आवश्यकता है।
लेकिन इससे पहले कि हम आपकी दूसरी पहचान के साथ रिपोज को धक्का देना / खींचना शुरू कर सकें, हम आपको आकार में ले लेंगे - मान लें कि आपका सिस्टम एक विशिष्ट id_rsa
और id_rsa.pub
महत्वपूर्ण जोड़ी के साथ सेटअप है । अभी तो आपका tree ~/.ssh
लुक ऐसा है
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub
सबसे पहले, उस प्रमुख जोड़ी को नाम दें - एक वर्णनात्मक नाम जोड़ने से आपको यह याद रखने में मदद मिलेगी कि किस कुंजी का उपयोग किस उपयोगकर्ता / रिमोट के लिए किया जाता है
# change to your ~/.ssh directory
$ cd ~/.ssh
# rename the private key
$ mv id_rsa github-mainuser
# rename the public key
$ mv id_rsa.pub github-mainuser.pub
अगला, चलो एक नई कुंजी जोड़ी बनाते हैं - यहाँ मैं नई कुंजी का नाम दूंगाgithub-otheruser
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser
अब, जब tree ~/.ssh
हम देखते हैं तो हम देखते हैं
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub
अगला, हमें एक ~/.ssh/config
फ़ाइल सेटअप करने की आवश्यकता है जो हमारे प्रमुख कॉन्फ़िगरेशन को परिभाषित करेगी। हम इसे उचित स्वामी-पठन / लेखन-केवल अनुमतियों के साथ बनाएँगे
$ (umask 077; touch ~/.ssh/config)
अपने पसंदीदा संपादक के साथ खोलें, और निम्नलिखित सामग्री जोड़ें
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
संभवतया, आपके पास अपनी प्राथमिक गितुब पहचान के साथ जुड़े कुछ मौजूदा भंडार होंगे। उस कारण से, "डिफ़ॉल्ट" github.com Host
आपकी mainuser
कुंजी का उपयोग करने के लिए सेटअप है । यदि आप एक खाते को दूसरे के पक्ष में नहीं करना चाहते हैं, तो मैं आपको अपडेटेड ssh कॉन्फ़िगरेशन का उपयोग करने के लिए अपने सिस्टम पर मौजूदा रिपॉजिट अपडेट करने का तरीका दिखाता हूँ ।
अपने नए SSH कुंजी को github में जोड़ें
अपनी नई सार्वजनिक कुंजी जोड़ने के लिए github.com/settings/keys पर जाएं
आप सार्वजनिक कुंजी सामग्री का उपयोग कर प्राप्त कर सकते हैं: इसे github पर कॉपी / पेस्ट करें
$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...
अब आपकी नई उपयोगकर्ता पहचान सभी सेटअप की है - नीचे हम आपको दिखाएंगे कि इसका उपयोग कैसे करें।
सामान करना: रेपो का क्लोन बनाना
तो यह कैसे git और github के साथ काम करने के लिए एक साथ आता है? ठीक है क्योंकि आपके पास बिना अंडे और मुर्गी नहीं हो सकती है, हम एक मौजूदा रेपो के क्लोनिंग को देखेंगे। यदि आपके पास अपने कार्यस्थल के लिए नया जीथब खाता है और आपको कंपनी के प्रोजेक्ट में जोड़ा गया है तो यह स्थिति आपके लिए लागू हो सकती है।
मान लीजिए कि github.com/someorg/somerepo
पहले से मौजूद है और आपको इसमें जोड़ा गया है - क्लोनिंग जितना आसान है
$ git clone github.com-otheruser:someorg/somerepo.git
उस बोल्ड भाग कोHost
आपकी ~/.ssh/config
फ़ाइल में हमारे द्वारा सेट किए गए नाम से मेल खाना चाहिए । यह सही ढंग से git को संबंधित से जोड़ता है IdentityFile
और ठीक से आपको github से प्रमाणित करता है
सामान प्राप्त करना: एक नया रेपो बनाना
ठीक है क्योंकि आपके पास अंडे और अंडे के बिना चिकन नहीं हो सकता है, हम आपके द्वितीयक खाते पर एक नया रेपो प्रकाशित करने पर विचार करेंगे। यह स्थिति उन उपयोगकर्ताओं पर लागू होती है जो अपने द्वितीयक जीथूब खाते का उपयोग करके नई सामग्री बनाते हैं ।
मान लेते हैं कि आपने पहले से ही स्थानीय स्तर पर थोड़ा काम किया है और अब आप जीथब को आगे बढ़ाने के लिए तैयार हैं। आप चाहें तो मेरे साथ-साथ चल सकते हैं
$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init
अब अपनी पहचान का उपयोग करने के लिए इस रेपो को कॉन्फ़िगर करें
$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"
अब अपना पहला काम करें
$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"
अपनी नई पहचान देखने के लिए कमिट का उपयोग करें git लॉग का उपयोग किया गया था
$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>
ठीक है, जीथुब को पुश करने का समय! चूँकि github को अभी हमारे नए रेपो के बारे में पता नहीं है, इसलिए पहले github.com/new पर जाएं और अपना नया रेपो बनाएं - इसका नाम somerepo
अब, सही पहचान / साख का उपयोग करके अपने रेपो को "बात" करने के लिए कॉन्फ़िगर करने के लिए, हमने एक रिमोट जोड़ा है। अपने नए खाते के लिए अपने github उपयोगकर्ता नाम मान रहा है someuser
...
$ git remote add origin github.com-otheruser:someuser/somerepo.git
वह बोल्ड भाग बिल्कुल महत्वपूर्ण है और यह उस मैच से मेल खाना चाहिएHost
जो हमने आपकी ~/.ssh/config
फाइल में परिभाषित किया है
अंत में, रेपो को धक्का दें
$ git push origin master
नए SSH कॉन्फ़िगरेशन का उपयोग करने के लिए मौजूदा रेपो अपडेट करें
मान लें कि आपके पास पहले से कुछ रेपो क्लोन है, लेकिन अब आप एक नए SSH कॉन्फ़िगरेशन का उपयोग करना चाहते हैं। ऊपर दिए गए उदाहरण में, हमने आपकी पिछली id_rsa
/ id_rsa.pub
मुख्य जोड़ी को Host github.com
आपकी SSH कॉन्फिगर फ़ाइल में असाइन करके आपके मौजूदा रिपॉज को चालू रखा । इसमें कुछ भी गलत नहीं है, लेकिन मेरे पास अब कम से कम 5 गिटब विन्यास हैं और मुझे उनमें से एक को "डिफ़ॉल्ट" कॉन्फ़िगरेशन के रूप में सोचना पसंद नहीं है - मैं हर एक के बारे में स्पष्ट होना चाहूंगा।
इससे पहले कि हमारे पास यह था
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
इसलिए अब हम इसे अपडेट करेंगे ( बोल्ड में परिवर्तन )
Host github.com-mainuser
HostName github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
लेकिन इसका मतलब है कि अब github.com
रिमोट के साथ कोई भी मौजूदा रेपो इस पहचान फ़ाइल के साथ काम नहीं करेगा। लेकिन चिंता मत करो, यह एक साधारण तय है।
अपने नए SSH कॉन्फ़िगरेशन का उपयोग करने के लिए किसी भी मौजूदा रेपो को अपडेट करने के लिए, बस रेपो के git कॉन्फिग फ़ाइल को खोलें और url को अपडेट करें!
$ cd existingrepo
$ nano .git/config
दूरस्थ मूल फ़ील्ड अपडेट करें ( बोल्ड में परिवर्तन )
[remote "origin"]
url = github.com-mainuser:someuser/existingrepo.git
fetch = +refs/heads/*:refs/remotes/origin/*
बस। अब आप अपने दिल की सामग्री के लिए push
/ कर सकते हैंpull
SSH कुंजी फ़ाइल अनुमतियाँ
यदि आप अपनी सार्वजनिक कुंजियों के सही ढंग से काम न करने की समस्या से जूझ रहे हैं, तो SSH आपकी निर्देशिका और संबंधित कुंजी फ़ाइलों पर अनुमत फ़ाइल अनुमतियों पर काफी सख्त है~/.ssh
अंगूठे के एक नियम के रूप में, किसी भी निर्देशिका होनी चाहिए 700
और कोई भी फाइल होनी चाहिए 600
- इसका मतलब है कि वे मालिक-पढ़ने / लिखने-केवल हैं - कोई अन्य समूह / उपयोगकर्ता उन्हें पढ़ / लिख नहीं सकता है
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/config
$ chmod 600 ~/.ssh/github-mainuser
$ chmod 600 ~/.ssh/github-mainuser.pub
$ chmod 600 ~/.ssh/github-otheruser
$ chmod 600 ~/.ssh/github-otheruser.pub
मैं अपनी SSH कुंजियों का प्रबंधन कैसे करता हूं
मैं अपने द्वारा होस्ट किए जाने वाले प्रत्येक होस्ट के लिए अलग-अलग SSH कुंजियों का प्रबंधन करता हूं, जैसे कि यदि किसी एक कुंजी से कभी समझौता किया जाता है, तो मुझे उस कुंजी का उपयोग करने वाले प्रत्येक अन्य स्थान पर कुंजियों को अपडेट करने की आवश्यकता नहीं है। यह तब होता है जब आपको Adobe से यह सूचना मिलती है कि उनके उपयोगकर्ताओं की 150 मिलियन जानकारी चुरा ली गई है - अब आपको उस क्रेडिट कार्ड को रद्द करना होगा और उस पर निर्भर होने वाली हर सेवा को अपडेट करना होगा - एक उपद्रव।
यहां मेरी ~/.ssh
निर्देशिका क्या दिखती है: मेरे पास .pem
प्रत्येक उपयोगकर्ता के लिए एक कुंजी है, जो मैं प्रत्येक डोमेन से कनेक्ट करता हूं। मैं .pem
कुंजियों का उपयोग करता हूं इसलिए मुझे प्रति कुंजी केवल एक फ़ाइल की आवश्यकता है ।
$ tree ~/.ssh
/Users/naomik/.ssh
├── config
├── github.com
│ ├── naomik.pem
│ ├── someusername.pem
├── known_hosts
├── naomi.makes.software
│ ├── naomi.pem
├── somedomain.com
│ ├── someuser.pem
└── someotherdomain.org
└── someuser.pem
और यहाँ मेरी संबंधित /.ssh/config
फाइल है - जाहिर है कि जीथ्यूब सामान इस सवाल के जवाब के लिए प्रासंगिक है, लेकिन यह जवाब आपको किसी भी सेवाओं / मशीनों पर अपनी ssh पहचान का प्रबंधन करने के लिए ज्ञान से लैस करना है।
Host github.com-naomik
HostName github.com
User git
IdentityFile ~/.ssh/github.com/naomik.pem
Host github.com-someuser
HostName github.com
User git
IdentityFile ~/.ssh/github.com/someusername.pem
Host naomi.makes.software
User naomi
IdentityFile ~/.ssh/naomi.makes.software/naomi.pem
Host somedomain.com
HostName 162.10.20.30
User someuser
IdentityFile ~/.ssh/somedomain.com/someuser.pem
Host someotherdomain.org
User someuser
IdentityFile ~/.ssh/someotherdomain.org/someuser.pem
PEM कुंजी से अपनी SSH सार्वजनिक कुंजी प्राप्त करना
ऊपर आपने देखा कि मेरे पास प्रत्येक कुंजी के लिए केवल एक फ़ाइल है। जब मुझे एक सार्वजनिक कुंजी प्रदान करने की आवश्यकता होती है, तो मैं बस आवश्यकतानुसार इसे उत्पन्न करता हूं ।
इसलिए जब github आपकी ssh सार्वजनिक कुंजी मांगता है, तो सार्वजनिक कुंजी को stdout में कॉपी करने के लिए आउटपुट के लिए इस कमांड को चलाएं - जहां जरूरत हो कॉपी / पेस्ट करें
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...
ध्यान दें, यह वही प्रक्रिया है जिसका उपयोग मैं किसी दूरस्थ मशीन में अपनी कुंजी जोड़ने के लिए करता हूं। ssh-rsa AAAA...
मूल्य रिमोट की कॉपी किया जाता है ~/.ssh/authorized_keys
फ़ाइल
पीईएम प्रारूप में अपने id_rsa
/ id_rsa.pub
प्रमुख जोड़े परिवर्तित करना
तो आप कुंजी फ़ाइलों को वश में करना चाहते हैं और कुछ फ़ाइल सिस्टम cruft में कटौती करना चाहते हैं? अपनी प्रमुख जोड़ी को एकल पीईएम में परिवर्तित करना आसान है
$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem
या, ऊपर दिए गए हमारे उदाहरणों के साथ, हमने नाम बदल दिया id_rsa -> github-mainuser
और id_rsa.pub -> github-mainuser.pub
- तो
$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem
अब केवल यह सुनिश्चित करने के लिए कि हमने इसे सही रूपांतरित कर दिया है, आप यह सत्यापित करना चाहेंगे कि उत्पन्न सार्वजनिक कुंजी आपकी पुरानी सार्वजनिक कुंजी से मेल खाती है
# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
अब जब आपके पास आपकी github-mainuser.pem
फ़ाइल है, तो आप अपनी पुरानी github-mainuser
और github-mainuser.pub
फ़ाइलों को सुरक्षित रूप से हटा सकते हैं - केवल PEM फ़ाइल आवश्यक है; जब भी आपको आवश्यकता हो, तो सार्वजनिक कुंजी उत्पन्न करें ^ _ ^
खरोंच से पीईएम चाबियाँ बनाना
आपको निजी / सार्वजनिक कुंजी जोड़ी बनाने की आवश्यकता नहीं है और फिर एकल पीईएम कुंजी में परिवर्तित करें। आप सीधे PEM कुंजी बना सकते हैं।
आइए बनाते हैं a newuser.pem
$ openssl genrsa -out ~/.ssh/newuser.pem 4096
SSH सार्वजनिक कुंजी प्राप्त करना समान है
$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==
ssh-add ~/.ssh/id_rsa_COMPANY
<br/> ssh- एजेंट को इसे उपयोग के लिए शामिल करने के लिए कहने के लिए। <hr /> बाकी मेरे लिए उपर्युक्त ट्यूटोरियल के साथ ठीक काम करता है।