दूसरी मशीन में ssh कीज़ कॉपी करने का सबसे आसान तरीका?


342

मैं घर पर आलसी हूं और अपनी घरेलू मशीनों के लिए पासवर्ड प्रमाणीकरण का उपयोग करता हूं। मैं कुंजी आधारित प्रमाणीकरण पर जाने के लिए तैयार हूं। ऐसा करने के लिए वेब पर कई विकल्प हैं, जिसमें बिल्ली पालना, फिर कुंजी को दबाना, सीधे चाबी को ऊपर उठाना, आदि।

मैं एक कुंजी को कॉपी करने का सबसे आसान और अनुशंसित तरीका ढूंढ रहा हूं, उम्मीद है कि उबंटू एसएस पैकेज में कहीं एक सुविधा आवरण है?

मुझे पहले से ही पता है कि पासवर्ड लॉग इन को कैसे बंद करना है


जवाबों:


463

ssh-copy-idआदेश (में openssh-ग्राहक पैकेज और डिफ़ॉल्ट रूप से स्थापित) वास्तव में यह करता है:

ssh-copy-id user@hostname.example.com

-i identity_fileदूरस्थ होस्ट के लिए आपकी डिफ़ॉल्ट पहचान ( अन्य पहचान के लिए उपयोग ) की सार्वजनिक कुंजी की प्रतिलिपि बनाता है ।

डिफ़ॉल्ट पहचान आपकी "मानक" ssh कुंजी है। यह अपने में दो फ़ाइलें (सार्वजनिक और निजी कुंजी) के होते हैं ~/.sshनिर्देशिका, सामान्य रूप से नामित identity, id_rsa, id_dsa, id_ecdsaया id_ed25519(और के साथ एक ही .pub), कुंजी के प्रकार पर निर्भर। यदि आपने एक से अधिक ssh कुंजी नहीं बनाई है, तो आपको पहचान निर्दिष्ट करने के बारे में चिंता करने की ज़रूरत नहीं है, ssh-copy-id बस इसे स्वचालित रूप से चुन लेगी।

यदि आपके पास कोई पहचान नहीं है, तो आप उपकरण के साथ एक उत्पन्न कर सकते हैं ssh-keygen

इसके अलावा, यदि सर्वर डिफ़ॉल्ट एक ( 22) से भिन्न पोर्ट का उपयोग करता है, तो आपको इस तरह से उद्धरण चिह्नों का उपयोग करना चाहिए ( स्रोत ):

ssh-copy-id "user@hostname.example.com -p <port-number>"

1
डिफ़ॉल्ट पहचान क्या है?
ऑक्सीविवि

17
अलग-अलग पोर्ट के लिए इसका इस्तेमाल करें:ssh-copy-id "user@host -p 6842"
jibon57

5
यदि दूरस्थ सर्वर जिसे आप कॉपी कर रहे हैं वह पासवर्ड प्रॉम्प्ट की अनुमति नहीं देता है और मूल रूप से SSH के उपयोग के लिए सहेजा गया है?
काइल

10
मैक पर आप कर सकते हैं brew install ssh-copy-idऔर फिर कमांड चला सकते हैं ।
अवीशाई सेप

1
@MarcelStimberg शामिल -i प्रोफ़ाइल के लिए जवाब अद्यतन करें; लोगों के पास 1 से अधिक कुंजी होने की संभावना है और उन सभी को धक्का दे सकता है, या टिप्पणियों में -i विकल्प के लिए शिकार करना होगा
निक

129

मुझे मार्सेल का जवाब पसंद है। मैं इस आज्ञा को नहीं जानता था। मैं हमेशा ओरेकल वेब साइट पर मुझे जो भी मिला है उसका उपयोग कर रहा हूं :

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'

मैंने इसे अभी भी यहां पोस्ट करने के लिए सोचा, क्योंकि यह एक अच्छा उदाहरण है कि किस शक्ति के साथ शेल कोड में प्राप्त किया जा सकता है ssh। लेकिन इसका उपयोग ssh-copy-idनिश्चित रूप से ठीक से करने के लिए एक सुरक्षित तरीका है!

ध्यान दें कि यदि फ़ोल्डर .sshपहले से मौजूद नहीं है, तो उपरोक्त कमांड विफल हो जाएगी। इसके अलावा, न्यूनतम संभव अनुमति (मूल रूप से केवल मालिक के लिए पठन-लेखन) सेट करने के लिए फ़ाइल बनाते समय बेहतर हो सकता है। यहाँ एक और अधिक उन्नत कमांड है:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'

2
यह सटीक कमांड एक मैक से भी काम करता है
Mihai P।

यह सबसे खोल के साथ किसी भी यूनिक्स के तहत काम करना चाहिए। यदि फ़ोल्डर .sshदूरस्थ तरफ मौजूद नहीं है, तो मैंने एक अद्यतन कमांड के साथ पोस्ट अपडेट किया है ।
ह्यूजेंस

1
यह catआवश्यक नहीं है - एक सामान्य इनपुट पुनर्निर्देशन पर्याप्त है, उदाहरण के लिए< ~/.ssh/id_rsa.pub | ssh ...
maxschlepzig

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

2
मैं इस तरह से बहुत पसंद करता हूं क्योंकि यह आपको वर्बोज़ ssh का उपयोग करने देता है जो यह पता लगाने में सहायक है कि चीजें क्यों टूटी हुई हैं। sshcopyid बस जम गया और कभी काम नहीं किया, यह पूरी तरह से चला गया।
सायरन

31

चित्रमय विधि

  1. ओपन आवेदनपासवर्ड और कुंजीमेरा व्यक्तिगत कुंजी
  2. अपनी कुंजी का चयन करें और फिर सुरक्षित शेल के लिए दूरस्थकॉन्फ़िगर कुंजी पर क्लिक करें ।

SSH कनेक्शन के लिए कंप्यूटर सेट अप करें


मेरे पास मेरे मेनू में "पासवर्ड और एन्क्रिप्शन कुंजी" नहीं है।
जॉर्ज कास्त्रो

उबंटू रिलीज़ क्या आप उपयोग कर रहे हैं? Ubuntu 10.04 LTS में यह डिफ़ॉल्ट रूप से उपलब्ध होना चाहिए।
ændrük

10.10, बस टैग जोड़ा गया। मार्सेल का उत्तर वही है जो मैं खोज रहा हूं, हालांकि आपके डेस्कटॉप उन्मुख उत्तर के लिए +1!
जॉर्ज कास्त्रो

4
इस कार्यक्रम है seahorse
गाइल्स

1
मुझे लगता है कि यह एप्लिकेशन सिस्टम में है- 10.10 में वरीयताएँ मेनू (अभी इसकी जांच नहीं कर सकता, मैं 10.04 पर हूं)
Huygens

18

Ubuntu पर आप लॉन्चपैड से अपनी चाबी प्राप्त कर सकते हैं:

ssh-import-id [launchpad account name]

विवरण :

  1. आपको लॉन्चपैड खाते की आवश्यकता है इसलिए लॉगिन करें या खाता बनाएं
  2. लॉग इन करने के बाद, SSH कुंजियों के आगे स्थित बटन पर क्लिक करें :
  3. उस फ़ील्ड (टिप्पणी सहित) में अपनी सार्वजनिक कुंजी फ़ाइल की सामग्री चिपकाएँ। इस तरह की एक कुंजी लग रहा है:

    ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
    

    यहाँ, ssh-rsaइंगित करता है कि कुंजी RSA कुंजी AAAAB3Nza .... UyDOFDqJpहै, वास्तविक कुंजी है और lekensteynटिप्पणी है।

  4. आयात सार्वजनिक कुंजी दबाकर कुंजी को सहेजें
  5. यदि सब कुछ ठीक रहा, तो आपकी कुंजी अब SSH कुंजी के तहत सूचीबद्ध होनी चाहिए :

पैकेज ssh-import-idको मशीन पर स्थापित करने की आवश्यकता होती है जिसे रिमोट से एक्सेस करने की आवश्यकता होती है। यह पैकेज पैकेज के साथ मिलकर स्थापित किया गया openssh-serverहै क्योंकि यह एक अनुशंसित पैकेज है openssh-server। यह सुनिश्चित करने के बाद कि ssh-import-idग्राहक मशीन पर स्थापित किया गया है, चलाएँ:

ssh-import-id [launchpad account name]

यह HTTPS पर लॉन्चपैड सर्वर से सार्वजनिक कुंजी डाउनलोड करेगा जो आपको MITM हमलों से बचाता है।

उबंटू ल्यूसिड पर और इससे पहले, आप के साथ एक ही पूरा कर सकते हैं:

wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys

echoआदेश SSH कुंजी के साथ पंक्ति के बाद एक अतिरिक्त न्यू लाइन प्राप्त करने के लिए की जरूरत है।


14

कस्टम पोर्ट के लिए

ssh-copy-id -i "user@hostname.example.com -p2222"

-i स्विच डिफॉल्ट को ~ /। ssh / id_rsa.pub पर, यदि आप दूसरी कुंजी चाहते हैं, तो कुंजी का पथ डाल दें -i

चेतावनी: यदि आपने -i नहीं लिखा है तो यह आपके / .ssh में पाए गए सभी कुंजी को कॉपी कर देगा


1
क्या आप उस चेतावनी के बारे में निश्चित हैं? "-i पहचान_फाइल - पहचान_फाइल में निहित केवल कुंजी (एस) का उपयोग करें (बजाय ssh-add (1) या default_ID_file के माध्यम से पहचान की तलाश में)। यदि फ़ाइल का नाम समाप्त नहीं होता है। तो यह जोड़ा जाता है। यदि फ़ाइल नाम है छोड़ा गया है, default_ID_file का उपयोग किया जाता है। "
योषा अलायबॉब

0

ssh-copy-idठीक वैसा ही करता है। मुझे यकीन नहीं है कि कुछ अन्य उत्तर यहां गलत जानकारी क्यों जोड़ते हैं। मदद निम्नलिखित दिखाती है:

~$ ssh-copy-id -h
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
    -f: force mode -- copy keys without trying to check if they are already installed
    -n: dry run    -- no keys are actually copied
    -h|-?: print this help

मैंने सिर्फ Ubuntu 18.04 क्लाइंट पर CentOS 7.6 सर्वर के साथ निम्नलिखित की कोशिश की और यह एक आकर्षण की तरह काम किया। उदाहरण कस्टम पोर्ट का उपयोग करके दिखाता है 2222और सार्वजनिक कुंजी निर्दिष्ट करता है~/.ssh/path-to-rsa.pub

$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 myusername@hostname.tld

कमांड चलाने से पहले, मैंने वास्तव में -nएक सूखी रन करने के लिए स्विच का उपयोग किया था जो पुष्टि करता था कि कमांड इरादा के अनुसार काम करेगा। एक बार जब मैंने इसकी पुष्टि की तो मैंने -nस्विच के बिना फिर से ऊपर के रूप में कमांड चलाया ।

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