पासवर्ड को .ssh / config में जोड़ना


24

मैं ubuntu 12.04 का उपयोग कर रहा हूं। मैं रोजाना कई सर्वरों से जुड़ने के लिए ssh का उपयोग कर रहा हूं, इसलिए मैंने उनके पैरामीटर को .ssh / config फाइल में डाल दिया है ; इस तरह :

Host server1
User tux
Port 2202
HostName xxx.x.xx.x

क्या प्रत्येक कनेक्शन के लिए इस फ़ाइल में पासवर्ड डालने का कोई तरीका है? इसलिए जब सर्वर पासवर्ड मांगता है, टर्मिनल अपना पास डालता है और सर्वर को भेजता है, इसलिए मुझे हर बार पासवर्ड टाइप करने की आवश्यकता नहीं है। इसके अलावा, मैं सार्वजनिक / निजी कुंजी जोड़ी का उपयोग नहीं करना चाहता।


10
यह किस के लिए है।
माइकल हैम्पटन

जवाबों:


31

नहीं, कमांड लाइन पर पासवर्ड को निर्दिष्ट करने या प्रदान करने की कोई विधि नहीं है, जो एक ओपनशेड बिल्ट-इन मेकेनिज्म का उपयोग करके ss प्रमाणीकरण के लिए गैर-संवादात्मक तरीके से है। कम से कम ऐसा नहीं जो मुझे पता है। आप अपने पासवर्ड को उम्मीद की स्क्रिप्ट में हार्डकोड कर सकते हैं लेकिन यह एक अच्छा समाधान भी नहीं है।

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


बात यह है, अपने ग्राहकों को सर्वर और वे कुंजी का उपयोग कर लॉगिन की अनुमति नहीं है। Im सभी सर्वरों में लॉगिन के लिए अपेक्षा का उपयोग करते हुए एक बैश स्क्रिप्ट लिख रहा है जहाँ क्रेडेंशियल्स को स्टोर किया जा रहा है। धन्यवाद
Ajo ऑगस्टाइन

1
काफी असुरक्षित। उस स्क्रिप्ट में सुझाव देने के लिए केवल एक चीज है जो उस फाइल को कठिन फ़ाइल अनुमतियों के साथ लॉक कर सकती है।
दानिला लैडनर

1
यदि वे कुंजियों की अनुमति नहीं देते हैं, तो वे गलतफहमी करते हैं कि ssh कैसे काम करता है - पासवर्ड लॉगिन की अनुमति आपको शब्दकोश हमलों आदि के लिए खोलती है (यद्यपि बहुत, बहुत धीमी गति से) - यह एक निजी कुंजी जोड़ी के साथ समान पूरा करने के लिए असंभव है, और यदि वे 'गलत हाथों में पड़ने वाली चाबियों के बारे में चिंतित होने पर आप कुंजी के निजी भाग को पासवर्ड-एन्क्रिप्ट कर सकते हैं ताकि आपको इसका उपयोग करने में सक्षम होने के लिए दो कारकों की आवश्यकता हो (पासवर्ड आपके किचेन में / आपके ssh एजेंट द्वारा भी याद किया जा सकता है) )
एलेक्स बेरी

अपने ग्राहकों को शिक्षित करें। उन्हें समझाएं कि पासवर्ड प्रमाणीकरण को अक्षम करना बेहतर है और केवल उन कुंजियों को अनुमति दें जो रिवर्स हैं।
निकिता किप्रियनोव

20

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

मैं इसे स्थापित करना चाहता था क्योंकि मुझे नहीं लगता कि मेरा 2950 स्विच निजी / सार्वजनिक कुंजी का समर्थन करता है और मुझे आशा है कि कुछ बिंदु पर मुझे यह ज्ञान प्राप्त होगा, लेकिन मैं अभी तक वहां नहीं हूं।

एक उपनाम और sshpass का उपयोग करके यह पूरा किया जा सकता है।

  1. Sshpass स्थापित करें
  2. प्रश्न में सूचीबद्ध के रूप में उपयोगकर्ता नाम को शामिल करने के लिए अपनी .ssh / config फाइल को बदल दें
  3. अपने टर्मिनल में एक उपनाम जोड़ें (मैंने .bashrc का इस्तेमाल किया और ग्लोबाल सेटिंग्स के खिलाफ सुझाएगा)
  4. लक्ष्य में प्रवेश करने के लिए अन्य का उपयोग करें

मेरा उदाहरण उपनाम है:

alias ssc='sshpass -pcisco ssh'

जहां "सिस्को" पासवर्ड है। नोट -p और पासवर्ड के बीच कोई स्थान नहीं है।

उपयोग है (प्रश्न का संदर्भ देते हुए):

ssc server1

नोट: यह केवल खोज इंजन का उपयोग करने वालों के लिए शीर्षक में प्रश्न का उत्तर देता है। यदि आप सर्वर का उपयोग कर रहे हैं जैसे प्रश्न उदाहरण, निजी / सार्वजनिक कुंजी जोड़े और इस उत्तर का उपयोग नहीं किया जाना चाहिए


एकमात्र संभव वर्कअराउंड, जब आप वास्तव में जो भी कारण के लिए कुंजी के साथ काम नहीं कर सकते।
sjas

काम करता है! बहुत बढ़िया।
राहुल

मैं सुझाव दूंगा कि उपनाम को पूरी शेल स्क्रिप्ट द्वारा बदल दिया जाए; यह मेजबान पैरामीटर के आधार पर डायनामिकली किस पासवर्ड फ़ाइल का उपयोग करने का अवसर देगा।
7heo.tk

एक बहुत अच्छी तरह से -p और पासवर्ड के बीच एक स्थान रख सकता है, क्योंकि यह अक्सर cli प्रोग्राम के साथ होता है ...
Masterxilo

10

हां, जैसा कि ऊपर बताया गया है कि पासवर्ड को सहेजने का कोई तरीका नहीं है। मैं प्राधिकरण के लिए ssh कुंजी का उपयोग करने की सलाह दूंगा।

सबसे पहले, अपनी कुंजी उत्पन्न करें:

ssh-keygen

फिर अपने सर्वर / डेस्कटॉप पर कुंजी की प्रतिलिपि बनाएँ:

ssh-copy-id -i .ssh/id_rsa.pub user@ip-address:

बस इतना ही। आपसे फिर कभी पासवर्ड नहीं मांगा जाएगा।

मैं भी सामान्य रूप से पासवर्ड प्राधिकरण को हटाने की सलाह देता हूं लेकिन यह आपके ऊपर है।


1
Ssh-copy-id के संदर्भ के लिए धन्यवाद! मैं कुछ गर्भनिरोधक का उपयोग करता था, sshpass -p $PASSWORD ssh $USERNAME@$HOST "echo `cat ~/.ssh/id_rsa` >> /home/$USERNAME/.ssh/authorized_keys"लेकिन यह कार्यक्रम क्लीनर है और इरादा स्पष्ट करता है।
मास्टरएक्सिलो

3

Ssh के साथ ऐसा करने का कोई तरीका नहीं है, यह उतना ही असुरक्षित है जितना इसे मिल सकता है।

जैसा कि दानिला ने उल्लेख किया है कि आप उम्मीद की लिपियों का उपयोग कर सकते हैं लेकिन मैं परेशान नहीं करूंगा।

मुझे आश्चर्य है कि आप क्या हासिल करने की कोशिश कर रहे हैं? क्या आप एक सर्वर से दूसरे में हॉप करना चाहते हैं? इस स्थिति में आप अपने वर्कस्टेशन पर ssh-Agent को सेटअप और उपयोग करना चाहते हैं और एजेंट को लक्ष्य मेजबानों पर अग्रेषित करने में सक्षम करते हैं; इस तरह से आपके निजी एजेंट को आपकी निजी कुंजी को कॉपी किए बिना क्रेडेंशियल एक्सचेंज आपके स्थानीय एजेंट के पास भेज दिया जाएगा।


VisualStudio में व्यक्तिगत एक्सेस टोकन की अवधारणा है जो ऐप विशिष्ट पासवर्ड की तरह हैं जहां यह सुविधा सहायक होगी।
स्पूडर

1

मैं ~/.local/binनिर्देशिका से इस स्क्रिप्ट का उपयोग करें

#!/usr/bin/bash

ORIG_SSH=/usr/bin/ssh
HOST=$1

SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
    export SSHPASS
    sshpass -e $ORIG_SSH $@
else
    $ORIG_SSH $@
fi

जो मुझे फ़ाइल के रूप #PS <password>में पासफ़्रेज़ निर्दिष्ट करने की अनुमति देता है .ssh/config

लेकिन, जैसा कि हर कोई कहता है, जब संभव हो तो इसका उपयोग ssh-keysकरना बेहतर होता ssh-agentहै


0

इस स्थिति को संभालने का सही तरीका सत्र-आधारित ssh- एजेंट का उपयोग करना है। यहां कैसे:

$ eval `ssh-agent`
$ ssh-add /home/user/.ssh/your_key
Enter passphrase for /home/user/.ssh/your_key:

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

हैरान कि इतने लंबे समय के बाद यह जवाब यहाँ नहीं था!


कारण यह नहीं था कि संभवतः पोस्टर ने विशेष रूप से कहा है कि वह सार्वजनिक / निजी कुंजी जोड़ी का उपयोग नहीं करना चाहता है।
जेनी डी का कहना है कि मोनिका

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

-1

आप इसे sshpass का उपयोग करके सुरक्षित तरीके से कर सकते हैं

  1. इतिहास के बिना अपना पासवर्ड सेट करें

    निर्यात PS = your_password ; इतिहास -d $ (इतिहास 1)

  2. मेजबान उपनाम को ~ / .ssh / config में ऊपर सेट करें

  3. पर्यावरण चर का उपयोग करने के लिए ssh पास का उपयोग करें और सिंगल कमांड में आवश्यक मशीन में लॉगिन करें

sshpass -p $ PS ssh host_alias

आपका वातावरण आपके पासवर्ड को पकड़ रहा है और यह जोखिम भरा है कि निष्पादित करने वाली कोई भी स्क्रिप्ट इस पासवर्ड को लीक कर सकती है यदि आपको नहीं पता कि आप क्या चला रहे हैं


नहीं, यह सुरक्षित नहीं है। और यह काफी बदसूरत है।
7heo.tk

समस्या से अधिक "समाधान" नहीं है? उन सभी अतिरिक्त चरणों, और आपको अभी भी टाइप करना होगाsshpass -p $PS ...
Dan H
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.