SSH के माध्यम से लॉगिन पर ssh-agent और ssh-add चलाने के लिए सीधे आगे का रास्ता?


38

जब मैं ssh के माध्यम से अपने सर्वर में प्रवेश करता हूं तो मैं निम्नलिखित आदेशों को स्वतः निष्पादित करने की कोशिश कर रहा हूं:

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa

मेरी ssh कुंजी में एक पासफ़्रेज़ है और मैं इसे एक बार लॉगिन करने के बाद दर्ज करने के लिए ठीक हूं।

मैंने इसे अपने .bashrc फ़ाइल में डालने की कोशिश की, हालाँकि मेरा मानना ​​है कि ssh-agent एक नया बैश सत्र शुरू करता है। जब मैं अपने .bashrc में ऐसा करने के बाद लॉगिन करने की कोशिश करता हूं, तो यह अटक जाता है, और मुझे 'बाहर निकलने' के लिए टाइप करना होता है, फिर 'key को अनलॉक करने के लिए पासफ़्रेज़ दर्ज करें' देखें

कोई अन्य सुझाव?

सर्वर Ubuntu LTS चला रहा है


सर्वर पर मुख्य एजेंट क्यों? यह आपके स्थानीय क्लाइंट पर होना चाहिए, जिससे आप कनेक्ट कर रहे हैं।
जोर्डेच

@Zoredache मैं git pullदूरस्थ सर्वर पर ऐसा करने में सक्षम होना चाहता हूं
क्लिक करें

फिर अपने स्थानीय मशीन पर एक SSH एजेंट चलाएं, और एजेंट को अग्रेषित करें।
ज़ोराडैस

@Zoredache धन्यवाद, पता नहीं था कि संभव था। हालाँकि मैं अभी भी अपने स्थानीय मशीन से भी bash स्क्रिप्ट के भीतर ssh-add / ssh-agent करने में सक्षम होना चाहूंगा। इसका दर्द उन कमांडों को मैन्युअल रूप से चलाना है।
Upvote

जवाबों:


52

आप इसे जोड़ने का प्रयास कर सकते हैं:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

इस तरह से ssh-agentएक नया शेल शुरू नहीं होता है, यह सिर्फ पृष्ठभूमि में खुद को लॉन्च करता है और उचित वातावरण चर सेट करने के लिए शेल कमांड से बाहर निकलता है।

जैसा कि टिप्पणी में कहा गया है, हो सकता है कि आप दूरस्थ होस्ट पर एजेंट को बिल्कुल नहीं चलाना चाहते हैं, बल्कि उस बॉक्स पर जिसे आप काम कर रहे हैं, और उपयोग करें

ssh -A remote-host

अपने स्थानीय ssh एजेंट की सेवाओं को दूरस्थ-होस्ट को अग्रेषित करना।

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


जब मैं के ssh-agent /bin/bashसाथ प्रतिस्थापित करता हूं ssh-agent -s, और फिर मैं करने की कोशिश करता हूं git pull, तब भी मुझे इसे अनलॉक करने के लिए निजी कुंजी के पासफ़्रेज़ के लिए कहा जाता है। यह वास्तव में मैं क्या चाहता हूं, मैं केवल ssh-add करने पर पासफ़्रेज़ में प्रवेश करना चाहता हूं, और हर बार जब भी मैं कोई git कमांड चलाता हूं, तो इसे दोहराना नहीं पड़ता। कोई विचार?
Upvote

और एजेंट को स्थानीय रूप से चलाना और ssh -A का उपयोग करना आपके लिए कोई विकल्प नहीं है? समस्या यह है, कि आप हर कनेक्शन पर ssh-Agent को 'पुनः आरंभ' नहीं कर सकते। हर बार जब आप इसे शुरू करते हैं, यह 'कुछ भी नहीं' जानता है और जब आप एसएच-ऐड करते हैं तो आपको इसे डिक्रिप्ट करना
पड़ेगा

आपकी .ssh / config फ़ाइल के लिए: होस्ट रिमोट-होस्ट कंट्रोलमास्टर ऑटो कंट्रोलपाथ ~/.ssh/master-%l-%r@%h:% p
कंट्रोलपर्सिस्ट

1
उफ़ बस में एहसास हुआ कि आप ssh- एजेंट कॉल के सामने एक अतिरिक्त eval की जरूरत है .. ऊपर मेरे जवाब अद्यतन
तोबी Oetiker

1
आप एक उपनाम बना सकते हैं
तोबी ओटीकर

2

एक वैकल्पिक Funtoo के उपयोग करने के लिए है कीचेन । फिर आप अपने बैश शेल में इस वन-लाइनर को चिपका सकते हैं:

eval $(keychain --eval id_rsa)

यह वही काम करता है (ssh एजेंट को लॉन्च करता है, आदि), जबकि प्रत्येक सबशेल के लिए एक ssh- एजेंट प्रक्रिया नहीं चल रही है। इसके बजाय यह "पहले से ही चल रहे" उदाहरणों के लिए दिखता है जो आपके स्वयं के हैं और आपको उनसे जोड़ते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.