एक पंक्ति में एसएसएच कैसे करें


26

मैं एक लाइन में SSH के माध्यम से दूसरे कंप्यूटर से कैसे जुड़ूंगा? अगर मैं ऐसा कर रहा था ssh host@IP, तो मुझे दूसरी पंक्ति में पासवर्ड दर्ज करना होगा। मैं सोच रहा था कि मैं ऐसा कुछ कर सकता हूं: ssh host@IP | echo passwordलेकिन वह पासवर्ड पूछने से पहले पासवर्ड डालता है।


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

3
पासवर्ड रहित लॉगिन स्थापित करने के लिए यह एक अच्छा प्रश्न है। मैं पूछता हूँ कि आप अपने स्वीकृत उत्तर को फिर से देखें। कौन से जकूज़ी का उत्तर -इस-सही है, और काम करेगा, ऐसा करने का उचित तरीका SSH कुंजी के साथ है, जो एलन के उत्तर में वर्णित है।
स्कॉट

यदि sshस्टड से पासवर्ड पढ़ता है, तो echo password | ssh host@IPकाम करेगा, लेकिन आमतौर पर एसएसएच टर्मिनल से सीधे पढ़ने की कोशिश करता है।
पाओलो एबरमन

जवाबों:


82

आपके पासवर्ड को कमांड लाइन पर डालने के बजाय इसे प्रमाणित करने के लिए SSH कुंजियों का उपयोग करना चाहिए क्योंकि यह अत्यंत असुरक्षित है।

जिस तरह से यह काम करता है एक बार जब आप अपने SSH कुंजी सेट कर लेते हैं, तो आपको बस इतना करना होगा कि कमांड जारी करें:

ssh user@host

और दूसरी चीज टाइप किए बिना, आप स्वतः लॉग इन हो जाएंगे।


Mac के लिए SSH सार्वजनिक कुंजी को Mac / FreeBSD / Linux पर कॉपी करें

यह मान लेता है कि आपके पास पासवर्ड आधारित प्रमाणीकरण (पासवर्ड में टाइपिंग) के माध्यम से दूरस्थ सर्वर तक पहुंच है, और आपने पहले ही अपना निजी / सार्वजनिक कीपर तैयार किया है (यदि नहीं, तो नीचे देखें)। निम्नलिखित उदाहरण में, हम RSA का उपयोग कर रहे हैं। शुरू करने के लिए कुंजी को कॉपी करें (ध्यान रखें कि "होम" निर्देशिका macOS, लिनक्स, बीएसडी, आदि के बीच भिन्न होती है):

एससीपी का उपयोग करना:

scp ~/.ssh/id_rsa.pub username@hostname:/Users/username/.ssh/

या फ़ाइल को केवल कैट-आईएनजी authorized_keys(मैं इस विधि को पसंद करता हूं):

cat id_rsa.pub | ssh username@hostname ' cat >>.ssh/authorized_keys'

(आपका मुख्य नाम भिन्न हो सकता है) यदि .ssh निर्देशिका दूरस्थ सर्वर पर मौजूद नहीं है, तो आपको लॉगिन और इसे बनाने की आवश्यकता होगी।

अब कुंजी को मैक से दूरस्थ सर्वर पर कॉपी किया गया है। दूरस्थ सर्वर पर SSH सार्वजनिक कुंजी के लिए सही अनुमतियाँ सेट करें:

chmod 600  ~/.ssh/id_rsa.pub

यदि फ़ाइल मौजूद नहीं है, तो SSH अधिकृत_की फ़ाइल की कुंजी जोड़ें।

यदि फ़ाइल authorized_keysपहले से ही ~/.sshनिम्न कमांड के उपयोग में मौजूद है :

cat id_rsa.pub >> authorized_keys

यदि फ़ाइल मौजूद नहीं है, तो निम्न कमांड दर्ज करें:

cat id_rsa.pub > authorized_keys

chmod 600 authorized_keys
chown user:group authorized_keys


MacOS पर SSH सार्वजनिक / निजी कुंजी उत्पन्न करें

एप्लिकेशन -> उपयोगिताओं -> टर्मिनल पर जाकर टर्मिनल खोलें

टर्मिनल में, मुख्य पीढ़ी शुरू करने के लिए निम्नलिखित कमांड का उपयोग करें

ssh-keygen -t rsa

आगे आपको वह स्थान प्रदान करने के लिए कहा जाएगा जहाँ आप निजी कुंजी फ़ाइल बनाना चाहते हैं:

फ़ाइल दर्ज करें जिसमें कुंजी को सहेजना है ( /Users/username/.ssh/id_rsa):

डिफ़ॉल्ट स्थान में कुंजी बनाने के लिए इसे खाली छोड़ दें, जो है /Users/username/.ssh/id_rsa। सार्वजनिक कुंजी फ़ाइल उसी स्थान पर और उसी नाम से बनाई जाएगी, लेकिन .PUB एक्सटेंशन के साथ।

आपको पासफ़्रेज़ चुनने के लिए प्रेरित किया जाएगा। यह निजी कुंजी का उपयोग करने के लिए पासवर्ड वैकल्पिक है।

Enter passphrase (empty for no passphrase):

आपकी SSH कुंजी उत्पन्न हो गई है।

अब, ध्यान रखें, यदि आप पासफ़्रेज़ में रखते हैं, तो आपको हर बार कनेक्ट होने पर इसे दर्ज करना होगा। उपयोगिता ssh-agentपासफ़्रेज़ को स्मृति में बनाए रखने की आवश्यकता को बनाए रखेगी जो आपको एक ही सत्र में कनेक्ट होने पर हर बार कनेक्ट करने की आवश्यकता होती है। अधिक जानकारी के लिए देखेंman ssh-agent


6
पूरी तरह से यह - चाबियाँ इंटरनेट पर किसी भी ssh एक्सेस के लिए पासवर्ड को पूरी तरह से बदल सकती हैं और होनी चाहिए। मैं आपको निजी कुंजी की सुरक्षा की आवश्यकता पर विस्तार करने का सुझाव दूंगा, कि आपके सभी कंप्यूटरों में इसके बारे में कुछ नहीं होना चाहिए।
क्रैगी

+1 यह वास्तव में एक अच्छा जवाब है, न केवल इस कारण से कि यह क्या कहता है, बल्कि यह भी है कि आपने इसे कैसे समझाया है। कुछ भी जो उपयोगकर्ताओं के लिए अनुसरण करना आसान है और उन्हें अधिक सुरक्षित बनाने में मदद करता है वह मेरी पुस्तकों में एक प्लस है!
Monomeeth

7
बहुत बढ़िया जवाब। बस यह जोड़ना चाहता था कि ssh-copy-idउपरोक्त में से कुछ को स्वचालित करने के लिए एक अच्छा उपकरण है।
स्कॉट

Ssh- एजेंट का उल्लेख भी मदद कर सकता है। OS X / macOS के अधिकांश (सभी?) संस्करण इसके साथ आते हैं, और यह कुंजी को संरक्षित पासवर्ड होने पर भी पासवर्ड-कम लॉगिन की अनुमति देता है।
Qsigma

1
@ स्थान - यह डिफ़ॉल्ट रूप से macOS का हिस्सा नहीं है और इसे Homebrew या MacPorts द्वारा इंस्टॉल किया जाना चाहिए । मैं उन चीजों के लिए सॉफ़्टवेयर स्थापित करने का प्रशंसक नहीं हूं, जिन्हें 1 पंक्ति या एक छोटी, स्व-लिखित स्क्रिप्ट में पूरा किया जा सकता है और उन कारणों से मुझे लगा कि यह उत्तर के दायरे से बाहर है। हालांकि, यह एक छोटी सी उपयोगिता और उल्लेख के लायक है।
एलन

13

कई संभावनाएं हैं। आपका उदाहरण स्पष्ट रूप से काम नहीं करेगा, लेकिन आप sshpassउपयोगिता का उपयोग करके कुछ समान हासिल कर सकते हैं :

sshpass -p password ssh host@IP

ध्यान दें, यह अनुशंसित नहीं है क्योंकि passwordअन्य प्रक्रियाओं या शेल इतिहास में दिखाई देगा।

ऐसा करने का एक बेहतर तरीका एसएसएच कुंजी का उपयोग करके पासवर्ड रहित प्रमाणीकरण स्थापित करना है। संक्षेप में:

ssh-keygen -t rsa -f ~/.ssh/id_rsa
ssh-copy-id IP

sshpassजैसा आपने सुझाया, मैंने कोशिश की, लेकिन यह कहा कि कमांड नहीं मिला।
बेन ए।

8
खैर ... आपको इसे स्थापित करना होगा। और नहीं, मैं इसकी सिफारिश नहीं करता। Ssh कीज़ का उपयोग करके पासवर्ड रहित प्रमाणीकरण सेट करें।
जकूजी

4
@BenA। एक सार्वजनिक / निजी कीपैड को परिभाषित करके और इसमें शामिल दोनों मशीनों पर पासवर्ड रहित प्रमाणीकरण स्थापित करें। यही कारण है कि बहुत आसान है (और वास्तव में सुरक्षित) के अलावा कोई पासवर्ड है
nohillside

8
एक हज़ार बार नं। sshpass एक गंदा हैक है जो उन उपकरणों से कनेक्ट करने के लिए उपयोग किया जाता है जो ssh बोलते हैं लेकिन ठीक से चाबियाँ नहीं करते हैं, और इसका मुख्य उपयोग सेटअप स्क्रिप्ट है। आप एक बहुउपयोगकर्ता मशीन पर sshpass का उपयोग नहीं ps auxw | grep sshpass करेंगे दूसरे उपयोगकर्ताओं को ssh पासवर्ड बताएंगे।
क्रैगी

1
@ क्रिगी, पूरी तरह से नहीं। जब मैं की-बेस्ड सॉल्यूशन से 100% पीछे हूं, तो मैंने आंतरिक-रास्पबेरी पिस के एक जोड़े पर रैंडम किया है। अपने आदेश को चलाने से निम्न आउटपुट मिलता है pi@sshbox:~ $ ps auxw | grep sshpass pi 4891 0.0 0.3 2256 1560 pts/0 S+ 06:29 0:00 sshpass -p zzzzzzzz ssh pi@192.168.0.208:। zzzzzzzzशाब्दिक है, sshpass पासवर्ड की सामग्री को मास्क करता है। शायद पहले की पुनरावृत्तियाँ कम गोपनीयता के बारे में थीं।
flith

3

मैंने इसका जवाब ढूंढने में भी लंबा समय लगाया है। यह असुरक्षित होने के बावजूद और ये सभी लोग आपको RSA कुंजियों ( जो कि अधिक सुरक्षित और विश्वसनीय विचार है ) का उपयोग करने के लिए कह रहे हैं , यह काफी संभव है।

इसके expectलिए नामक एक कार्यक्रम का उपयोग करें। उम्मीद है कि आप के लिए stdout (और मुझे लगता है कि अगर सही ढंग से कॉन्फ़िगर किया गया है) stderout, कुछ संदेशों के लिए इंतजार कर रहा है और आउटपुट के साथ उन्हें जवाब देंगे। उम्मीद करना वास्तव में एक स्क्रिप्टिंग भाषा है, और जब मैं यही काम कर रहा था, तो मुझे समय की वजह से काम करने के लिए अपनी खुद की स्क्रिप्ट प्राप्त करने में बहुत कठिन समय मिला। हालांकि, उम्मीद में एक उपयोगी उपयोगिता भी शामिल है जिसे कहा जाता है autoexpect

ऑटोफ़ेक्ट के साथ, यह आपको देखेगा और आपके लिए एक अपेक्षित स्क्रिप्ट उत्पन्न करेगा। बस ऑटोकरेक्ट चलाएं और जो कमांड आप चाहते हैं:

autoexpect ssh host@ip 

और वह करो जो तुम सामान्य रूप से करते हो। जब आप प्रोग्राम से बाहर निकलें ( exitssh'd शेल में टाइप करके ), तो यह स्क्रिप्ट उत्पन्न करेगा। इस मामले में कि आप पूरी स्क्रिप्ट नहीं चाहते हैं कि आप एक उम्मीद की स्क्रिप्ट में लिख रहे हैं, आप शेल में कमांड script.expटाइप करने से पहले बाहर निकलने के लिए ऑटोपेक्टेक्ट (बुलाया ) से स्क्रिप्ट को संपादित कर सकते हैं exit। स्क्रिप्ट को समाप्त करने के लिए आप जिस पंक्ति को स्थानांतरित करना चाहते हैं वह है:

expect eof

जिसका मतलब है कि फ़ाइल के अंत की उम्मीद है। उम्मीद है की यह मदद करेगा!


1
मामले में किसी और ने अभी तक यह नहीं कहा है: वेलकम टू आस्क डिफरेंट!
Synoli

2

का उपयोग करते हुए expectटेस्ट स्वीट में के अलावा और कुछ के लिए एक ssh कनेक्शन में लॉग इन करने के लिए सिर्फ सादा गलत है।

क्या @ बेन-ए की तलाश पहले से ही ssh में लागू है। ट्रिक यह है कि इसका उपयोग कैसे किया जाए। तो यहाँ जाता है:

  1. का उपयोग कर एक सार्वजनिक / निजी कीपर उत्पन्न करें ssh-keygen-t(या प्रकार) के रूप में या तो ईसीडीएसए या आरएसए का उपयोग करें और आरएसए के लिए 2048 या 4096 -b(या बिट्स लंबाई) के रूप में उपयोग करें । यह लिखने के क्षण में पर्याप्त होना चाहिए। हमेशा एक पासवर्ड का उपयोग करें!
  2. ssh-copy-idया (उर्फ सर्वर) ~/.ssh/authorized_keysफ़ाइल को लॉग ऑन करने वाली मशीन पर बनाने के लिए उपर्युक्त कार्यप्रणाली का उपयोग करें । आपके द्वारा अभी जनरेट की गई कुंजी की एक प्रति है।
  3. अब आप जिस मशीन पर 'सर्वर' (या क्लाइंट) लॉग इन करने के लिए फाइल का उपयोग करते हैं ~/.ssh/config। यदि यह मौजूद नहीं है तो आप इसे बना सकते हैं।
  4. इस फ़ाइल में, आप अपनी आवश्यकताओं के लिए निम्नलिखित जोड़ते हैं

    host <name you want to use for this connection>
        Hostname <DNS or IP of the server>
        user <user name you want to use>
        identitiesonly yes
        identityfile <path to the private key>
  5. अब आप केवल ssh <name>कनेक्शन सेट करने के लिए उपयोग कर सकते हैं , लेकिन इसके लिए आपकी कुंजी के लिए पासवर्ड की आवश्यकता होगी। इसे हल करने के लिए, विकसित और शामिल ssh- एजेंट के लिए इस उद्देश्य का उपयोग करें। एजेंट के लिए अपनी कुंजी जोड़ने के लिए बस का उपयोग करें ssh-add <path to keyfile>। आपसे पासवर्ड मांगा जाएगा, और यह आपके लिए इस सत्र के लिए कुंजी सुरक्षित रूप से संग्रहीत करेगा। यदि यह त्रुटि देता है "ssh- एजेंट नहीं ढूँढ सकता" (या समान), इसका मतलब है कि शायद एजेंट शुरू नहीं किया गया है। आप इस सत्र का उपयोग करके इसे शुरू कर सकते हैं ssh-agent bash। यह इसमें सक्रिय एजेंट के साथ एक नया शेल शुरू करेगा।

इन चरणों का उपयोग करते समय, आप न केवल किसी को आपके क्रेडेंशियल्स को हाईजैक करने से रोकना कठिन बना सकते हैं, बल्कि प्रयोज्यता को क्रम में भी रख सकते हैं (सादे पासवर्ड की तुलना में इसका उपयोग करना आसान है)।

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