SSH एजेंट विभिन्न उपयोगकर्ता नाम और विभिन्न कुंजियों का उपयोग करके अग्रेषित करता है


19

एक बहुत ही समान प्रश्न है कि यदि उत्तर दिया गया हो तो इस प्रश्न का उत्तर हो सकता है। दुर्भाग्य से यह "मेरे द्वारा पूछे गए प्रश्न का उत्तर देने की आवश्यकता नहीं है क्योंकि समस्या वह नहीं थी जो मैंने सोचा था कि यह थी।"

स्थापित करना

  1. सर्वर bastion.ec2 मेरे कार्य केंद्र से ssh कनेक्शन को स्वीकार करता हैssh -i mykey.pem myname@bastion.ec2
  2. सर्वर सेवा 1.ec2 केवल sast कनेक्शन को bastion.ec2 के माध्यम से स्वीकार करता हैssh -i sharedkey.pem shareduser@service1.ec2

आवश्यकताएँ

  1. दोनों कुंजियाँ केवल मेरे कार्य केंद्र पर हैं इसलिए मैं वास्तव में कुंजी को कॉपी किए बिना दूसरा कमांड नहीं कर सकता
  2. सुरक्षा कारणों से मैं bastion.ec2 पर कॉपी ssh कुंजियों के बजाय ssh-Agent अग्रेषण का उपयोग करना चाहता हूं

समाधान

यह वह जगह है जहां आप आते हैं। मैं दूसरे कनेक्शन के लिए एक अलग कुंजी कैसे अग्रेषित कर सकता हूं?

अगर शेयर करने वाले के पास mykey.pub है तो यह ~/.ssh/authorized_keysकाम करेगा:

ssh -i mykey.pem myname@bastion.ec2 ssh shareduser@service1.ec2

हालाँकि, मैं नहीं चाहता कि प्रत्येक उपयोगकर्ता को हर सर्वर में अपनी सार्वजनिक कुंजी डालनी पड़े।

जवाबों:


22

चरण 1

सुनिश्चित करें कि आपका स्थानीय एजेंट तैयार है

सिर्फ इसलिए कि आप अपने में ssh सकते गढ़ सर्वर अपने प्रमुख पथ निर्दिष्ट या पासवर्ड के लिए संकेत हो रही बिना, इसका मतलब यह नहीं है कि अपने ssh एजेंट चल रहा है और अपने प्रमुख पहना हुआ है। कुछ आधुनिक OSes (जैसे: OSX) आपके लिए इसे संभालते हैं।

अपने स्थानीय मशीन पर

$ ssh-add -L
ssh-rsa ObahfCbvagGbLbhSbeHfvatEBG13== ~/.ssh/mykey.pem
ssh-rsa LbhNerWhfgJnnlGbbPyrireEBG13== ~/.ssh/sharedkey.pem

चित्र एक

इसका मतलब है कि आपका एजेंट चल रहा है और आपकी चाबी है।

$ ssh-add -L
The agent has no identities.

रेखा चित्र नम्बर 2

इसका मतलब है कि आपने अपने एजेंट में कोई कुंजी नहीं जोड़ी है। इसे ठीक करें:

ssh-add ~/.ssh/mykey.pem ~/.ssh/sharedkey.pem

fig.3

चरण 2

सुनिश्चित करें कि आपका रिमोट एजेंट तैयार है

SSH अपने गढ़ सर्वर में और fig.1 और fig.2 से जांच दोहराएं । हालाँकि, आपको मिलने वाली त्रुटि यह है:

$ ssh-add -L
Could not open a connection to your authentication agent.

Fig.4

यह सबसे अधिक संभावना है कि आपका SSH क्लाइंट आपके प्रमाणीकरण एजेंट कनेक्शन को अग्रेषित नहीं कर रहा है।

आप इसे -Aध्वज के साथ बाध्य कर सकते हैं (जब तक कि सर्वर पर sshd config इसे अनुमति देता है, जो कि डिफ़ॉल्ट है )।

$ ssh -A bastion.ec2

Fig.5

चरण 3

सुनिश्चित करें कि आप सही कुंजियों का उपयोग कर रहे हैं

यदि आपने अपने एजेंट में कुंजियाँ जोड़ी हैं, तो आपका एजेंट अग्रेषित कर रहा है, और आपका दूरस्थ एजेंट आपके स्थानीय कुंजी को सूचीबद्ध करता है। केवल दो संभावित कारण हैं जिनसे आपको कनेक्शन नहीं मिल रहा है। या तो आप सही कुंजी का उपयोग नहीं कर रहे हैं या आप सही उपयोगकर्ता नाम का उपयोग नहीं कर रहे हैं।

अपनी निजी कुंजी के लिए सार्वजनिक समकक्ष का उत्पादन करें:

$ cd
$ cd .ssh
$ ssh-keygen -y -f mykey.pem
ssh-rsa ObahfCbvagGbLbhSbeHfvatEBG13
$ ssh-keygen -y -f sharedkey.pem
ssh-rsa LbhNerWhfgJnnlGbbPyrireEBG13

Fig.6

ये तुम क्या से देख रहे थे के रूप में ही किया जाना चाहिए ssh-add -Lकरने के लिए ==अंत के पास।

अब एक या दूसरे तरीके से आपको उस बॉक्स में जाना होगा जिसे आप कनेक्ट करने में असफल हो रहे हैं और $HOME/.ssh/authorized_keysउस उपयोगकर्ता के लिए फ़ाइल की सामग्री को देख रहे हैं जिसे आप कनेक्ट करने का प्रयास कर रहे हैं। आपको यह सुनिश्चित करने की आवश्यकता है कि ऊपर बताए गए आदेश के साथ आप जिस सार्वजनिक कुंजी का उत्पादन कर रहे हैं, वह उस फ़ाइल पर एक पंक्ति में ही है। आप विश्वास नहीं कर सकते हैं कि sharedkey.pubभाई 2 क्यूब्स ने आपको सही ईमेल किया है। सत्यापित करें! इसके लिए आपको किसी अन्य व्यक्ति को प्राप्त करने की आवश्यकता हो सकती है जो SSH को उस उपयोगकर्ता के रूप में आपको अधिकृत_की फ़ाइल प्राप्त करने या रूट एक्सेस प्राप्त करने के लिए कर सकता है। यदि आप यह बहुत दूर आ गए हैं और यह अभी भी काम नहीं कर रहा है, तो आप शॉर्टकट लेने से परे हैं।

चरण 4

इसे आसान बनाएं

उम्मीद है कि ऊपर दिए गए चरणों ने आपको अंदर खींच लिया है। अब आप इस सिरदर्द को तब तक के लिए दूर कर दें जब तक आप इस कार्य केंद्र का उपयोग कर रहे हैं।

अपने स्थानीय ssh- क्लाइंट को कॉन्फ़िगर करें

Host *
    # A lot of people put an IdentityFile line in this Host * section.
    # Don't do that unless you will use only 1 key everywhere forever.
    #IdentityFile id_rsa

Host bastion.ec2
    # You want to make sure you always forward your agent to this host.
    # But don't forward to untrusted hosts. So don't put it in Host *
    ForwardAgent yes
    # Go a head and put the IP here in case DNS ever fails you.
    # Comment it out if you want. Having it recorded is a good backup.
    HostName 172.31.0.1
    # You don't want to create a proxy loop later, so be explicit here.
    ProxyCommand none
    # SSH should try using all keys in your .ssh folder, but if you
    # know you want this key, being explicit speeds authentication.
    IdentityFile ~/.ssh/mykey.pem

# Connect effortlessly by hostname or IP address
# This assumes that your internal DNS uses the fake TLD ec2
# This assumes that 172.31.0.0 is your C-Class subnet
Host *.ec2 172.31.*
    # This command says proxy all ssh connections through bastion as if
    # you had done an ssh -A
    ProxyCommand ssh -W %h:%p bastion.ec2
    ForwardAgent yes
    # These next lines are documentation you leave as a love letter to
    # your future self when all else fails or you have to help a
    # coworker and decide to look at your own config.
    # ssh-add ~/.ssh/*.pem
    # ssh -At bastion.ecs ssh admin@172.31.18.19

Fig.7

आप से कुछ और दूर कुछ भी नहीं लेते हैं Fig.7 यह के समुचित उपयोग होना चाहिए ProxyCommandऔर ForwardAgent

ऑटो अपने .bash_profile को आबाद करें

ssh-addहर बार जब आप अपनी मशीन में लॉग इन करते हैं तो आपको मैन्युअल रूप से नहीं करना होता है । ~/.bash_profileएक स्क्रिप्ट है जो हर बार जब आप लॉगिन करते हैं **। अंजीर से लाइन लगाएं। वहाँ में 3 और आप हमेशा अपने एजेंट तैयार होना चाहिए।

** इसे भ्रमित न करें .bashrcजिसके साथ प्रत्येक नए [संवादात्मक] टर्मिनल के लिए चलता है। यदि आप अपने सभी टर्मिनल सत्रों को बंद कर देते हैं तो भी आपका एजेंट चालू रहता है। अपनी चाबी पुनः लोड करने की आवश्यकता नहीं

उपयोग करने के लिए वैकल्पिक .bash_profile

मैंने एक gist भी बनाया है जो OSX / macOS Launch Agent को जोड़ता है । आप ssh-agentबूट पर अपना काम शुरू करने के लिए उस विधि का उपयोग कर सकते हैं । इसे स्थापित करना बहुत आसान है:

curl -sSL https://gist.github.com/RichardBronosky/429a8fff2687a16959294bcee336dd2a/raw/install.sh | bash

चरण 2: यदि होस्ट इसे अस्वीकार करता है, तो आप इसके ForwardAgent yesसाथ बाध्य नहीं कर सकते -A
dlamblin

धन्यवाद @dlamblin, मैंने प्रासंगिक जानकारी और sshd प्रलेखन के लिए एक लिंक जोड़ा।
ब्रूनो ब्रोंस्की

1

यह वह जगह है जहां आप आते हैं। मैं दूसरे कनेक्शन के लिए एक अलग कुंजी कैसे अग्रेषित कर सकता हूं?

आप चाबियां आगे नहीं रखते। आप एजेंट को अग्रेषित करते हैं और आपके पास पहली छलांग में प्रमाणीकरण के लिए उपयोग की जाने वाली पूरी तरह से स्वतंत्र कुंजी हो सकती है। अपने एजेंट में कुंजियों का उपयोग करके जांचें ssh-add -L

लेकिन इससे भी बेहतर, कनेक्शन को चलाएं ProxyCommand ssh -W %h:%p myname@bastion.ec2, जो एजेंट, ढेर या कमांड-लाइन विकल्पों को अग्रेषित करने की आवश्यकता और तत्काल होस्ट से प्रमाणित करने की आवश्यकता से बचना होगा।

आप बस अपने विन्यास में इसे देख सकते हैं (देखें man ssh_config)।


1
सौभाग्य से मुझे वास्तव में पता है कि आप यहां किस बारे में बात कर रहे हैं, लेकिन औसत उपयोगकर्ता नहीं होगा। आप अपने "आप फॉरवर्ड एजेंटों, कुंजी नहीं" बात के साथ शब्दार्थ का तर्क देते हैं। आपने मुझे जाने के लिए पर्याप्त दिया कि मैं इसे हल करने में सक्षम था इसलिए मैं आपको अपना उत्तर जोड़ने से पहले अपने उत्तर को सही करने का मौका देना चाहता हूं। संकेत: ssh-add mykey.pem sharedkey.pemके साथ तो पुष्टि ssh-add -Lतोssh -At myname@bastion.ec2 ssh shareduser@service1.ec2
ब्रूनो Bronosky
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.