सवाल एकाधिक एसएसएच पब्लिक कीज़ का उपयोग करना


मेरे पास अनफुडल पर एक व्यक्तिगत खाता और एक कंपनी खाता है। अनफूडल एसएसएच कुंजी पर केवल एक ही खाते पर उपयोग किया जा सकता है, इसलिए मुझे अपने लैपटॉप पर दोनों खातों के लिए एक अलग एसएसएच कुंजी बनाने की आवश्यकता है। मैं भाग गया ssh-keygen -t rsa विभिन्न नामों के साथ दो कुंजी उत्पन्न करने के लिए (व्यक्तिगत डिफ़ॉल्ट नाम और कंपनी {company} _rsa है)। समस्या यह है कि ऐसा प्रतीत होता है कि मेरी डिफ़ॉल्ट कुंजी हर जगह उपयोग की जाती है और मुझे यह नहीं पता कि व्यक्तिगत रिपोज़ के लिए गिट में उपयोग करने के लिए कुंजी निर्दिष्ट कैसे करें।

तो मेरा सवाल है: मैं रेपो-टू-रेपो आधार पर उपयोग करने के लिए एक एसएसएच कुंजी कैसे निर्दिष्ट करूं?

मैं अपना ssh_config (~ / .ssh / config) सेटअप करता हूं लेकिन यह अभी भी काम नहीं कर रहा है।

config:

Host {personalaccount}.unfuddle.com
     HostName {personalaccount}.unfuddle.com
     User git
     IdentityFile /Users/dave/.ssh/id_rsa

Host {companyaccount}.unfuddle.com
     HostName {companyaccount}.unfuddle.com
     User git
     IdentityFile /Users/dave/.ssh/cage_rsa

मेरी कंपनी unfudle खाते पर एक रेपो के लिए मेरी गिट repo config फ़ाइल इस तरह दिखता है:

[remote "origin"]
     url = git@{companyaccount}.unfuddle.com:{companyaccount}/overall.git
     fetch = +refs/heads/*:refs/remotes/origin/*

तो मुझे यकीन नहीं है कि मेरे एसएसएच कॉन्फ़िगरेशन या मेरी गिट कॉन्फ़िगरेशन में कुछ गड़बड़ है या नहीं।


94
2018-04-18 13:26


मूल


आपकी एसएसएच कॉन्फ़िगर सही दिखती है, मैं एक समान विन्यास का उपयोग कर रहा हूं। - Paŭlo Ebermann


जवाब:


यदि आपके पास सक्रिय है ssh-एजेंट तुम्हारा है id_rsa कुंजी लोड, तो समस्या की संभावना है ssh पहले उस कुंजी की पेशकश कर रहा है। अनफुल्डल शायद इसे प्रमाणीकरण के लिए स्वीकार करता है (उदा sshd) लेकिन कंपनी के भंडारों तक पहुंचने के लिए प्राधिकरण के लिए इसे अस्वीकार कर दिया गया है (उदाहरण के लिए जो भी आंतरिक सॉफ़्टवेयर वे प्राधिकरण के लिए उपयोग करते हैं, संभवतः गिटोलाइट के समान कुछ)। शायद कंपनी खाते में अपनी व्यक्तिगत कुंजी जोड़ने का एक तरीका है (एकाधिक लोग इसे साझा नहीं कर रहे हैं corp_rsa सार्वजनिक और निजी कुंजी फाइलें, वे हैं?)।


IdentitiesOnly  .ssh/config कॉन्फ़िगरेशन कीवर्ड का उपयोग उस कुंजी को सीमित करने के लिए किया जा सकता है ssh रिमोट को प्रदान करता है sshd केवल उन लोगों के लिए निर्दिष्ट है IdentityFile कीवर्ड (यानी यह सक्रिय में लोड होने वाली किसी भी अतिरिक्त कुंजी का उपयोग करने से इंकार कर देगा ssh-एजेंट)।

इन्हें कोशिश करें .ssh/config वर्गों:

Host {personalaccount}.unfuddle.com
     IdentityFile ~/.ssh/id_rsa
     IdentitiesOnly yes

Host {companyaccount}.unfuddle.com
     IdentityFile ~/.ssh/{companyaccount}_rsa
     IdentitiesOnly yes

फिर, इन तरह गिट यूआरएल का प्रयोग करें:

git@{personalaccount}.unfuddle.com:{personalaccount}/my-stuff.git
git@{companyaccount}.unfuddle.com:{companyaccount}/their-stuff.git

यदि आप इसका पूरा फायदा लेना चाहते हैं .ssh/config तंत्र, आप अपना खुद का कस्टम होस्टनाम आपूर्ति कर सकते हैं और डिफ़ॉल्ट उपयोगकर्ता नाम बदल सकते हैं:

Host uf-mine
     HostName {personalaccount}.unfuddle.com
     User git
     IdentityFile ~/.ssh/id_rsa
     IdentitiesOnly yes

Host uf-comp
     HostName {companyaccount}.unfuddle.com
     User git
     IdentityFile ~/.ssh/{companyaccount}_rsa
     IdentitiesOnly yes

फिर, इन तरह गिट यूआरएल का प्रयोग करें:

uf-mine:{personalaccount}/my-stuff.git
uf-comp:{companyaccount}/their-stuff.git

108
2018-04-19 03:21



यदि आपके पास एक ही अनफूडल सबडोमेन (विभिन्न एसएसएच कुंजी के साथ) पर एकाधिक खाते हैं, तो आपको दूसरी विधि का उपयोग करने की आवश्यकता होगी। - leolobato
पहचान मेरे गिटोलाइट सेटअप में केवल मेरे लिए जरूरी था, धन्यवाद! - Koen.
बहुत बढ़िया यह इस मुद्दे को हल करता है कि मेरी सभी चाबियाँ जिथब को भेजी जाती हैं। हालांकि, ओएस एक्स पर मुझे हर बार अपने पासफ्रेज टाइप करना होगा। क्या कॉन्फ़िगरेशन में निर्दिष्ट कुंजी का उपयोग करने का कोई तरीका है लेकिन एसएसएच एजेंट का उपयोग करना जारी रखें? - Drew
@ ड्रू: यदि कुंजी पहले ही एजेंट में लोड हो चुकी है, तो कमांड को अभी भी एजेंट से खींचा जाना चाहिए। क्या आप वाकई अपनी कुंजी प्री-लोडेड हैं? इससे जाँच करें ssh-add -l इससे पहले कि आप अपने गिट होस्ट उपनाम का उपयोग करें। इसके अलावा सार्वजनिक कुंजी फ़ाइल मौजूद होने की आवश्यकता है ssh उस कुंजी को पहचान सकते हैं ssh-एजेंट भंडारण कर रहा है आप एक खोया पुनर्जन्म कर सकते हैं .pub जैसे कमांड के साथ फाइल करें ssh-keygen -f blah -y > blah.pub। - Chris Johnsen
हाँ यह वहां है। जब मैंने पहचान केवल कॉल को हटा दिया, तो यह 4 अलग-अलग कुंजियों को भेजता है (जिसमें सही एक w / o पासफ्रेज मांगना शामिल है)। जब मैं कॉल जोड़ता हूं, तो यह केवल एक कुंजी भेजता है लेकिन हर बार पासफ्रेज़ का अनुरोध करता है। यहां तक ​​कि जब मैं ओएसएक्स को अपने कीचेन में पासफ्रेज वैल्यू स्टोर करने के लिए कहता हूं। - Drew


man ssh_config

कुछ इस तरह

Host personal_repo
  User personal
  IdentityFile .ssh/personal_rsa

Host company_repo
  User company
  IdentityFile .ssh/company_rsa

और उपयोग करें personal_repo आपके गिट रेपो में मेजबान के रूप में।


3
2018-04-18 14:05



टैस, क्या आप ऊपर दिए गए मेरे परिवर्तनों की समीक्षा कर सकते हैं? मैंने अपना ssh_config और मेरी गिट कॉन्फ़िगरेशन जोड़ा।
Host सिर्फ एक पहचानकर्ता है - पूर्ण डोमेन नाम की आवश्यकता नहीं है। यह शायद कुछ छिपी हुई बग बनाता है। यदि आप इसे बदलते हैं, तो आपको अपने गिट कॉन्फ़िगरेशन में पूरा नाम लिखने की आवश्यकता नहीं है।
गिटोरियस के लिए, उपयोगकर्ता = गिट और होस्ट gitorious.org: उदा। git@gitorious.org: ~ revelut / qt / bruce-sandbox-qt.git आप अपने होस्ट में यूआरएल का एक हिस्सा कैसे मेल खाते हैं? (आमतौर पर ~ मेरे लिए revelut)
@ टास तो अगर मैं एसएसएच कॉन्फ़िगरेशन में company_unfuddle नाम देता हूं तो मेरा यूआरएल @ company_unfuddle: {company} /overall.git होना चाहिए? @ ब्रूस - मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं। क्या आप थोड़ा और विस्तार कर सकते हैं?


पहचानफाइल और पहचान केवल अच्छी तरह से काम करते हैं। मुझे परेशान करने के लिए अलग-अलग होस्ट नामों का उपयोग करना याद रखना है, और तथ्य यह है कि अग्रेषित एजेंट कनेक्शन अभी भी सभी चाबियाँ रखता है, जिसका अर्थ है कि अगर रिमोट होस्ट से समझौता किया गया है, तो वे मेरे किसी भी पहचान का उपयोग कर सकते हैं ।

मैंने हाल ही में उपयोग करना शुरू कर दिया है:

https://github.com/ccontavalli/ssh-ident

यह एसएसएच के चारों ओर एक रैपर है, यह:

  • आपके द्वारा परिभाषित प्रत्येक पहचान के लिए एक पूरी तरह से अलग एजेंट रखता है।
  • लॉगिन सत्रों में स्वचालित रूप से एजेंटों को साझा करता है, आपके .bashrc में कुछ भी नहीं करना है।
  • पहली बार मांग की आवश्यकता पर एजेंट और संबंधित कुंजी को लोड करता है।
  • निर्धारित करता है कि कौन सा एजेंट एसएसएच कमांड लाइन (होस्टनाम और इस तरह) या आपकी वर्तमान कार्यशील निर्देशिका के आधार पर उपयोग करना है। यह विशेष रूप से आसान है क्योंकि मैं जो कुछ भी कर रहा हूं उसके आधार पर अलग-अलग पथों से काम करता हूं।

3
2018-03-15 04:20