आप ssh-server की सार्वजनिक कुंजी की प्रतिलिपि कैसे बनाते हैं?


33

यहाँ मैंने कोशिश की है, और मुझे एक त्रुटि मिली है:

$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password: 
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory

दो चरणों में क्यों नहीं? इसे कॉपी करें और फिर संलग्न करें?
फहीम मीठा

@ फहीममिथ: यह काम करता है, धन्यवाद! मैं वास्तव में परेशानी का कारण महसूस कर सकता हूं। कृपया मेरी नई पोस्ट देखें ?
टिम

-F पैरामीटर के साथ आपको निजी कुंजी की आवश्यकता नहीं होती है, इसलिए आप केवल किसी की सार्वजनिक कुंजी के साथ उनके लिए कुंजी पास कर सकते हैं!
Kzqai

जवाबों:


67

OpenSSH ऐसा करने के लिए एक कमांड के साथ आता है ssh-copy-id,। आप इसे केवल दूरस्थ पता देते हैं और यह authorized_keysदूरस्थ मशीन पर फ़ाइल में आपकी सार्वजनिक कुंजी जोड़ता है :

$ ssh-copy-id tim@just.some.other.server

आपको -iअपनी स्थानीय मशीन पर सार्वजनिक कुंजी खोजने के लिए ध्वज का उपयोग करने की आवश्यकता हो सकती है :

$ ssh-copy-id -i ~/.ssh/id_rsa.pub tim@just.some.other.server

1
धन्यवाद! मेरी आज्ञा क्यों नहीं चलती?
टिम

@ इस उत्तर ने इसे समझाया; >>आपके शेल द्वारा नियंत्रित किया जाता है, और आप शेल के बजाय SSH के माध्यम से कमांड चला रहे हैं। SSH एक खोल, जो फिर अपना आदेश चलाता को दिखाए जाने का उनका ठीक, काम करना चाहिए
माइकल Mrozek

धन्यवाद! (1) ssh-copy-id भी काम नहीं करता है। मैं मैन्युअल रूप से फ़ाइल को दूरस्थ रूप से कॉपी करता हूं और इसकी सामग्री को जोड़ता हूं, फिर यह काम करता है। मुझे आश्चर्य है कि यह क्यों है? मैंने पाया कि सर्वर पर मेरा डिफ़ॉल्ट शेल कुछ स्क्रिप्ट है, जिसे मैं अपने मूल पोस्ट में अपडेट करता हूं, और इसका कारण हो सकता है। कृपया एक नज़र डालें। (२) मुझे आश्चर्य है कि अगर ssh-copy-id सिर्फ रिमोट की सार्वजनिक कुंजी है, तो यह निजी और सार्वजनिक कुंजी नहीं बनाता है, है ना?
टिम

1
मान लें कि SSH सर्वर इस तरह से कॉन्फ़िगर किया गया है कि यह केवल प्रमाणीकरण प्रणाली के रूप में सार्वजनिक कुंजी प्रमाणीकरण को स्वीकार करता है। उस स्थिति में, ssh-copy-idकाम करना सही नहीं होगा?
अब्दुल

1
@ अब्दुल तब तक नहीं जब तक कि आपके पास उस मशीन से जुड़ी कोई अन्य कुंजी पहले से ही न हो। यह सिर्फ अधिक SSH जोड़ने है
माइकल Mrozek

31

आप हमेशा कुछ ऐसा कर सकते हैं:

scp ~/.ssh/id_rsa.pub user@remote.example.com:/tmp/id_rsa.pub
ssh user@remote.example.com 
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

मुझे यकीन नहीं है कि आप catएक स्थानीय मशीन से एक सत्र सत्र में कर सकते हैं। बस इसे सुझाव के अनुसार / tmp में ले जाएँ।

संपादित करें: यह वास्तव में क्या ssh-copy-idकरता है। जैसे माइकल ने कहा।


धन्यवाद! मुझे आश्चर्य है कि अगर ssh-copy-id सिर्फ रिमोट की सार्वजनिक कुंजी की प्रतिलिपि है। यह निजी और सार्वजनिक कुंजी नहीं बनाता है, यह करता है?
टिम

नहीं, यह इसे नहीं बनाता है। बस इसे जोड़ता है।
मिस्टर मंकी

@ Mr.Monkey हां, आप ssh सत्र में ( catया अन्यथा) से डेटा को पाइप कर सकते हैं । आप जो वर्णन कर रहे हैं वह पुराने ढंग का है; ssh-copy-idकी सिफारिश की जाती है क्योंकि टाइपोस या फाइलों को गलत अनुमतियाँ देने का कम जोखिम है।
गाइल्स का SO- बुराई से दूर रहना '

@ गिल्स, आपके पास हमेशा क्लाइंट के लिए सर्वर तक पहुंच नहीं होती है, खासकर जब आप इसके संचालन के लिए कंप्यूटर तैयार कर रहे होते हैं, इसलिए यह विधि ssh-cpy-id का उपयोग करने से बहुत बेहतर है क्योंकि आपको उपकरण लेने की आवश्यकता नहीं है या सेटिंग से पहले नेटवर्क से कनेक्ट करें।
ई-जानकारी128

1
या फिर आप पाइप कर सकते हैं गंतव्य के लिए सीधे : cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'
पाब्लो ए

7

यह उत्तर बताता है कि कैसे काम करने के तरीके को दिखाया गया है।

आप >>पुनर्निर्देशन ऑपरेटर के विशेष अर्थ की व्याख्या करने के लिए दूरस्थ कंप्यूटर पर एक शेल निष्पादित कर सकते हैं :

ssh tim@just.some.other.server sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub

पुनर्निर्देशन ऑपरेटर >>को आमतौर पर एक शेल द्वारा व्याख्या की जाती है।

जब आप निष्पादित करते हैं ssh host 'command >> file'तो यह गारंटी नहीं है कि command >> fileएक शेल द्वारा व्याख्या की जाएगी। आपके मामले command >> fileमें विशेष व्याख्या के बिना शेल के बजाय निष्पादित >>किया जाता है और कमांड को एक तर्क के रूप में दिया गया था - उसी तरह जैसे command '>>' fileशेल में चल रहा है।

SSH (OpenSSH_5.9) के कुछ संस्करण स्वचालित रूप से दूरस्थ सर्वर पर शेल का आह्वान करेंगे और कमांड को इसे पास करेंगे जब वे एक शेल द्वारा व्याख्या किए जाने वाले टोकन का पता लगा लेंगे ; > >>आदि।


3

opensshप्रदान करता है ssh-copy-id। अनुक्रम होगा:

  • एक सभ्य 4k कुंजी उत्पन्न करें

    ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
    
  • अपने ssh- एजेंट को शुरू करें और जैसे जानकारी SSH_AGENT_PIDआदि में चूसें ।

    ssh-agent -s > ~/mysshagent
    source ~/mysshagent
    rm ~/mysshagent
    
  • अब अपने SSH Agent में चाबियाँ लोड करना शुरू करें

    ssh-add ~/.ssh/id_rsa4k
    
  • जांचें कि यह लोड है

    ssh-add -l
    ssh-add -L
    

    यह आपको दिखाएगा कि आपके पास ssh-Agent में क्या है

  • अब वास्तव में SSH एक दूरस्थ प्रणाली के लिए

    ssh username@remotehost.network
    
  • अब आप ssh-copy-id को बिना किसी तर्क के चला सकते हैं:

    ssh-copy-id
    

    यह ~/.ssh/authorized_keysssh- एजेंट से आवश्यक मूलभूत जानकारी बनाता है और भरता है।


Btw, मैं एक छोटा सा स्क्रिप्ट बनाने के github.com/centic9/generate-and-send-ssh-key जो एक ही बार में इनमें से अधिकांश चरणों चलाता है और इसके साथ ही फ़ाइल / निर्देशिका अनुमतियाँ जो आम तौर पर हमेशा की वजह से मुझे सिर दर्द सुनिश्चित करता है ...
centic

पासवर्ड लॉगिन अक्षम होने पर उपयोग करने के लिए यह एक शानदार तरीका है। यह पूर्व कुंजी के साथ प्रमाणीकरण करते समय एक नई कुंजी जोड़ने की अनुमति देता है।
MountainX

1

22 से अधिक पोर्ट चुनने पर मुझे ssh-copy-id से परेशानी हुई ... इसलिए यहाँ एक अलग ssh-port (जैसे 7572) के साथ मेरा ऑनलाइनर है:

ssh yourServer.dom -p7572 "mkdir .ssh; chmod 700 .ssh; umask 177; sh -c 'cat >> .ssh/authorized_keys'" < .ssh/id_rsa.pub

0

वास्तव में the ssh-copy-idकमांड बिलकुल यही करता है ( openssh-clientपैकेज से):

ssh-copy-id user@host

नोट: आईपी ​​पते या डोमेन का
host मतलब है ।


मैं भी कुछ जोड़ना चाहते हैं में अतिरिक्त जानकारी के लिए इस के लिए

1) हम गंतव्य सर्वर पर SSH के लिए एक अलग पोर्ट निर्दिष्ट कर सकते हैं :

ssh-copy-id "-p 8127 user@host"

नोट: बंदरगाह के सामने होना चाहिए या यह समाधान नहीं होगा।
user@host

स्रोत

2) हम एक सार्वजनिक कुंजी के साथ एक फ़ाइल निर्दिष्ट कर सकते हैं :

ssh-copy-id -i ~/.ssh/id_rsa.pub user@host

नोट: विकल्प हमें फ़ाइल है कि सार्वजनिक कुंजी है के साथ नाम का उचित स्थान इंगित करने के लिए अनुमति देता है।
-i

कभी-कभी यह काम में आ सकता है, खासकर अगर हम इसे एक गैर-मानक स्थान पर संग्रहीत करते हैं या हमारे कंप्यूटर पर एक से अधिक सार्वजनिक कुंजी होती है और हम किसी विशिष्ट को इंगित करना चाहते हैं।

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