SSH config - एक ही मेजबान लेकिन विभिन्न कुंजी और उपयोगकर्ता नाम


31

मैंने दो GitHub खाते सेट किए हैं, लेकिन मुझे सही तरीके से काम करने के लिए ssh कुंजियाँ नहीं मिल सकती हैं। मैं विभिन्न विन्यास की कोशिश की है।


Host github_username1
    HostName github.com
    IdentityFile ~/.ssh/rsa_1
    User username1
Host github_username2
    HostName github.com
    IdentityFile ~/.ssh/rsa_2
    User username2

git push:

Permission denied (publickey).
fatal: The remote end hung up unexpectedly

उपयोगकर्ता नाम 1 के लिए काम करता है:

Host github.com
    HostName github.com
    IdentityFile ~/.ssh/rsa_1
    User username1
Host github.com
    HostName github.com
    IdentityFile ~/.ssh/rsa_2
    User username2

git push username2 के रेपो में:

ERROR: Permission to username2/repo.git denied to username1.
fatal: The remote end hung up unexpectedly

मैंने भी और उसी के तहत git pushदोनों सेटिंग्स के साथ कोशिश की है । आउटपुट अंतिम कॉन्फ़िगरेशन के साथ ही है।IdentityFileUserHost

मुझे लगता है कि git स्वचालित रूप से Host "github.com" की खोज करता है क्योंकि रिमोट ऐसा है। यह कहा जाता है कि होस्ट कुछ भी आप चाहते हैं ( /programming//a/3828682 ) हो सकता है। क्या कोई तरीका है जो ssh config से होस्ट को विशिष्ट रेपो उपयोग के लिए बदलना चाहिए?

यह आदर्श होगा अगर मैं इसे सिर्फ ~ / .ssh / config से हल कर सकता हूं।

जवाबों:


44

OpenSSH क्लाइंट केवल Hostसेक्शन आइडेंटिफ़ायर के रूप में लाइन का उपयोग करता है , और बाकी सब सेटिंग्स हैं। यदि आप से कनेक्ट करते हैं foo@bar.com, तो SSH " User foo" के लिए खोज नहीं करेगा ; यह केवल " Host bar.com" के लिए खोज करेगा ।

दूसरे शब्दों में: यदि Host github_username2आपके SSH कॉन्फिगर में " " है, तो आपको अपने Git रीमोट्स में समान होस्ट का उपयोग करना होगा - github_username2नहीं git@github.com

हालाँकि, ऐसा नहीं है जो प्रमाणीकरण विफलताओं का कारण बनता है, के मामले में github.com, SSH उपयोगकर्ता नाम " git" होना चाहिए । GitHub SSH सर्वर उपयोगकर्ताओं को केवल उनके SSH कुंजी द्वारा पहचानते हैं।


एक सही SSH विन्यास होगा:

Host github_username1
    Hostname github.com
    User git
    IdentityFile ~/.ssh/rsa_1
Host github_username2
    Hostname github.com
    User git
    IdentityFile ~/.ssh/rsa_2

Git कॉन्फ़िगरेशन:

[remote "origin"]
    url = git@github_username1:username2/repo.git

नोट: भले ही मैंने gitअपने उदाहरण में दोनों स्थानों में उपयोगकर्ता नाम निर्दिष्ट किया है , लेकिन इसे केवल एक बार निर्दिष्ट किया जाना है - git@Git URL User gitमें SSH कॉन्फ़िगरेशन में प्राथमिकता लेगा ।


2
कुछ मामलों में आपको यह सुनिश्चित करने के लिए IdentitiesOnly=yesप्रत्येक hostअनुभाग पर जोड़ना होगा कि ssh केवल चुनी हुई पहचान फ़ाइल को लेगा और डिफ़ॉल्ट रूप से कुछ और प्रयास नहीं करेगा ..
TCB13
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.