SSH के माध्यम से कनेक्ट करें और सार्वजनिक कुंजी का उपयोग किए बिना, स्वचालित रूप से पासवर्ड टाइप करें


20

एक सर्वर SSH कनेक्शन की अनुमति देता है, लेकिन सार्वजनिक कुंजी प्रमाणीकरण का उपयोग नहीं कर रहा है। इस समय इसे बदलना मेरी शक्ति के भीतर नहीं है (तकनीकी कठिनाइयों के कारण, संगठनात्मक नहीं) लेकिन मैं इसे जल्द से जल्द प्राप्त करूंगा!

मुझे अब एक स्क्रिप्ट से सादे पुराने खाते + पासवर्ड प्रमाणीकरण का उपयोग करके सर्वर पर कमांड निष्पादित करने की आवश्यकता है । यही है, मुझे इसे गैर-इंटरैक्टिव तरीके से करने की आवश्यकता है। क्या यह संभव है? और मैं इसे कैसे करूँ?

क्लाइंट जो स्क्रिप्ट निष्पादित करेगा, वह Ubuntu Server 8.04 पर चलता है। सर्वर Cygwin और OpenSSH चलाता है।


2
कुंजी-आधारित प्रमाणीकरण सक्षम करने में तकनीकी कठिनाइयाँ क्या हैं? शायद आपको यह सवाल पूछना चाहिए, या इसके अलावा।
Zoredache

1
मैं यह पूछ रहा हूं। :-) serverfault.com/questions/125842/… मुझे अभी एक भागने के मार्ग की आवश्यकता है, क्योंकि मैं उस समय अपना सिर पीट रहा हूं। लेकिन निश्चित रूप से मेरा लक्ष्य इसे लंबे समय तक काम में लाना है।
नष्ट कर दिया

जवाबों:


22

एक लिनक्स उपयोगिता कहा जाता है sshpass। यह आपको वही करने की अनुमति देता है जो आप चाहते हैं और सर्वर पासवर्ड या तो कमांड लाइन तर्क के रूप में लेंगे, या फ़ाइल से (मैं इस तरह से पसंद करता हूं, इसलिए मेरे पास शेल इतिहास में मेरा सर्वर पासवर्ड नहीं है) और आप इसका उपयोग करते हैं इस तरह:

sshpass -f file_with_password ssh user@server ls -la

यह एक सर्वर में ssh और रन करेगा ls -la। एक बात, हालाँकि, आपको पहले एक सर्वर में मैन्युअल रूप से ssh करना होगा (यदि आपने ऐसा पहले नहीं किया है), तो सर्वर आपके साथ जुड़ जाता है ~/.ssh/known_hosts। यदि आप ऐसा नहीं करते हैं, तो sshpassकाम नहीं करेगा।


2
यह ओपनएसएसएच का एक मानक हिस्सा नहीं है, और सचमुच मेरी मशीनों में से कोई भी नहीं (मैक ओएस एक्स 10.7, उबंटू 12.04, फ्रीबीएसडी 8, डेबियन 3.1) है ...
voretaq7

@ voretaq7: sshpass एक SourceForge प्रोजेक्ट है: sourceforge.net/projects/sshpass
kevinarpe

1
@KCArpe मुझे लगता है कि आपको मेरी बात याद आ गई ("पूरी दुनिया आपकी लिनक्स मशीन नहीं है - अन्य जगहों पर काम करने वाले समाधान चुनने की कोशिश करें")। SSH_ASKPASSचर का उपयोग करना एक अधिक सामान्य समाधान है जो ओपनएसएसएच के साथ किसी भी सिस्टम पर काम करता है, और अतिरिक्त सॉफ़्टवेयर स्थापित करने की आवश्यकता नहीं होती है। हम में से कुछ के लिए (विनियमित उद्योगों में) नए सॉफ़्टवेयर को स्थापित करने से बहुत सारे प्रशासनिक कार्य शुरू होते हैं।
voretaq7

@ voretaq7 का उपयोग करना SSH_ASKPASSसभी प्रणालियों पर काम नहीं करता है। यदि क्लाइंट इसका समर्थन करता है, तो भी यह काम नहीं करेगा यदि सर्वर उपयोग करता है keyboard-interactive। मैं वास्तव में उस समस्या का सामना कर चुका हूं जब एक authorized_keysफाइल को कई एम्बेडेड मशीनों में वितरित करने के लिए एक स्क्रिप्ट लिख रहा हूं ।
कास्परड

8

आप ऐसा करने के लिए Expect का उपयोग कर सकते हैं । जाहिर है, यह सुरक्षा के दृष्टिकोण से बेहतर नहीं है, क्योंकि इसके लिए आपको एक स्क्रिप्ट का उपयोग करना होगा जिसमें आपका पासवर्ड प्लेनटेक्स्ट में हो। (लेकिन मैं उस बिंदु पर विश्वास नहीं करूंगा क्योंकि आपने अपने प्रश्न में कहा था कि आप जल्द से जल्द सार्वजनिक कुंजी प्रमाणीकरण का उपयोग करने की योजना बना रहे हैं!)


ऐसा लग रहा है कि यह मेरी समस्या को हल करेगा! मैं कल इसकी जाँच करूँगा। यह अंतिम समाधान नहीं है, लेकिन यह कुछ सुरक्षा प्रदान करता है। जब मैं इसके बारे में सोचता हूं, यदि स्क्रिप्ट उपयोगकर्ता केवल स्क्रिप्ट पढ़ने की अनुमति देता है। तब यह मेरी निजी कुंजी के रूप में सुरक्षित होगी जो फ़ाइल सिस्टम अनुमतियों द्वारा "केवल" संरक्षित है। या किसी को याद किया था?
नष्ट कर दिया

मैं कल परिणामों के साथ वापस आऊंगा। :-) जवाब देने के लिए शुक्रिया!
नष्ट कर दिया

यह काम करने लगता है। लेकिन इस विशिष्ट मामले IMHO के लिए sshpass आसान था।
हटा दिया गया

7

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

यदि आप इसे (बा) श स्क्रिप्ट के साथ करने का इरादा रखते हैं और ओपनएसएसएच का उपयोग करते हैं तो यह कठिन हो जाता है। ओपनएसएसएच स्पष्ट रूप से आपको कमांड लाइन पर पासवर्ड डालने से रोकता है (जैसा कि सभी उपयोगकर्ता कमांड लाइन को कुछ का उपयोग करके देख सकते हैं ps -fe, जो कि खराब है)। इस मामले में आपको सीधे ssh प्रोग्राम के साथ बातचीत करनी होगी और दो विकल्प होंगे:

  • Expect जैसी किसी चीज़ का उपयोग करके आप काफी मात्रा में सपोर्ट कोड लिख सकते हैं।
  • आप SSH_ASKPASS वैरिएबल का उपयोग करके एक हैक करते हैं, यह बताकर कि आपके पासवर्ड को वापस करने वाले एप्लिकेशन को कॉल करते हैं और इसे टर्मिनल से पढ़ने से रोकने के लिए बैच जॉब के रूप में चलाते हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.