आप rsync के साथ एक पहचान फ़ाइल का उपयोग कैसे करते हैं?


125

आप rsync के साथ एक पहचान फ़ाइल का उपयोग कैसे करते हैं?

यह सिंटैक्स है जो मुझे लगता है कि मुझे कनेक्ट करने के लिए पहचान फ़ाइल का उपयोग करने के लिए rsync के साथ उपयोग करना चाहिए:

rsync -avz -e 'ssh -p1234 -i ~ / .ssh / 1234-पहचान' \
"" / स्थानीय / dir / "RemoteUser@22.33.44.55:" / रिमोट / dir / "

लेकिन यह मुझे एक त्रुटि दे रहा है:

चेतावनी: पहचान फ़ाइल ~ / .ssh / 1234-पहचान सुलभ नहीं: ऐसी कोई फ़ाइल या निर्देशिका नहीं।

फ़ाइल ठीक है, अनुमतियाँ सही ढंग से सेट हैं, यह ssh करते समय काम करता है - बस rsync के साथ नहीं - कम से कम मेरे सिंटैक्स में। मैं क्या गलत कर रहा हूं? क्या यह रिमोट मशीन पर पहचान फ़ाइल देखने की कोशिश कर रहा है? यदि हां, तो मैं यह कैसे निर्दिष्ट करूं कि मैं अपने स्थानीय मशीन पर पहचान फ़ाइल का उपयोग करना चाहता हूं ?

जवाबों:


86

आप उपयोग कर सकते हैं ssh-agentऔर ssh-addकुंजी को मेमोरी में लोड करना चाहते हैं । sshssh- एजेंट से पहचान की कोशिश करेगा यदि यह उन्हें मिल सकता है। कमैंट्स होंगे

eval $(ssh-agent) # Create agent and environment variables
ssh-add ~/.ssh/1234-identity

ssh-agentएक उपयोगकर्ता डेमॉन है जो मेमोरी में अनएन्क्रिप्टेड ssh कीज़ रखता है। ssh इसे पर्यावरण वैरिएबल पर आधारित पाता है जो ssh- एजेंट आउटपुट को रन करते समय देता है। evalइस आउटपुट का मूल्यांकन करने के लिए उपयोग करने से पर्यावरण चर बन जाता है। ssh-addवह कमांड है जो कुंजी मेमोरी का प्रबंधन करता है। एजेंट को ssh-add का उपयोग करके लॉक किया जा सकता है। Ssh- एजेंट को शुरू करने पर कुंजी के लिए एक डिफ़ॉल्ट जीवनकाल निर्दिष्ट किया जा सकता है, और इसे जोड़ने पर कुंजी के लिए निर्दिष्ट किया जाता है।

आप पोर्ट और की डेफिनिशन की आपूर्ति करने के लिए एक ~ / .ssh / कॉन्फिग फ़ाइल सेटअप करना चाहते हैं। (अधिक विकल्पों के लिए `आदमी ssh_config देखें।)

host 22.33.44.55
    IdentityFile ~/.ssh/1234-identity
    Port 1234

Ssh कमांड को उद्धृत करने से शेल के विस्तार को रोका जा सकेगा जिसकी आवश्यकता है ~या $HOME। आप एकल उद्धरण में कुंजी के लिए पूर्ण या सापेक्ष पथ का उपयोग कर सकते हैं।


2
डबल उद्धरण और $ HOME के ​​उपयोग से मेरी समस्या हल हो गई। क्या आप पहले दो आज्ञाओं के बारे में विस्तार से बता सकते हैं? मैं पहले से ही एक कॉन्फ़िगर फ़ाइल स्थापित करने से परिचित था - एकमात्र समस्या यह है कि जब मेरे पास एक सर्वर पर कई खाते हैं। मुझे उम्मीद नहीं है कि यह मुझे एक ही होस्ट के लिए कई पहचान फ़ाइलों को निर्दिष्ट करने देगा।
cwd

+1 यह ड्रोन के साथ मेरे मुद्दे को तय करता है ।io :) बहुत बहुत धन्यवाद।
भार्गव नानकेलवा २१'१४ को

यह फ्रिगिनिन का कमाल है। FTR, आप User ubuntuएक EC2 Ubuntu उदाहरण के लिए कॉन्फ़िगर करते समय , जैसे कि कनेक्ट करने के लिए डिफ़ॉल्ट उपयोगकर्ता नाम भी निर्दिष्ट कर सकते हैं :) धन्यवाद!
डैनियलस्मेडगार्डबस

यदि आप csh स्टाइल शेल (जैसे fish) का उपयोग कर रहे हैं, तो करेंeval (ssh-agent -c)
डेव

77

या तो उपयोग करें $HOME

rsync -avz -e "ssh -p1234  -i \"$HOME/.ssh/1234-identity\"" dir remoteUser@server:

या कुंजी के लिए पूर्ण पथ:

rsync -avz -e "ssh -p1234  -i /home/username/.ssh/1234-identity" dir user@server:

Ubuntu पर rsync 3.0.9 के साथ परीक्षण किया गया


3
हाँ, यह ठीक काम करता है, ssh- एजेंट या अन्य विन्यास विकल्पों का उपयोग करने की कोई आवश्यकता नहीं है।
लॉरेंट

2
+1: यह एक घिनौना मुद्दा है, जैसे आप "ls '~'" नहीं कर सकते थे
एलेक्स

$HOMEसरल उद्धरण (कोई चर विस्तार नहीं) के अंदर काम नहीं करेगा, इसलिए आपको या तो दोहरे उद्धरण चिह्नों या पूर्ण पथ का उपयोग करना होगा।
अनोल

मानक बैश में काम करना चाहिए "$HOME"या $HOMEबिना किसी अंतर के भी ( "${HOME}"यदि आप इसे जटिल बनाना चाहते हैं तो भी संभव है)
टॉमबार्ट

मैंने सिंगल कोट्स को डबल्स में बदल दिया है।
स्टीव बेनेट

36

आपको अपनी पहचान कुंजी फ़ाइल के लिए पूर्ण पथ निर्दिष्ट करना होगा। यह शायद rsync में किसी प्रकार का झगड़ा है। (यह बिल्कुल सही नहीं हो सकता)

मैं कुछ दिन पहले इस मुद्दे पर भागा था :-)


आप ~ का उपयोग कर सकते हैं, लेकिन आप इसे एकल उद्धरणों के भीतर एम्बेड नहीं कर सकते, क्योंकि तब यह सही ढंग से / होम / उपयोगकर्ता नाम से प्रतिस्थापित नहीं होता है / आपको उस कार्य को सही ढंग से करने के लिए दोहरे उद्धरण चिह्नों का उपयोग करना होगा, @ilcavero का समाधान देखें
X

24

यह मेरे लिए काम करता है

rsync -avz --rsh="ssh -p1234  -i ~/.ssh/1234-identity"  \
"/local/dir/" remoteUser@22.33.44.55:"/remote/dir/"

2
किसी कारण से मुझे पहचान फ़ाइल के लिए पूर्ण पथ निर्दिष्ट करना पड़ा, अर्थात /home/user/.ssh/1234-identity। फिर काम हुआ। संभवतः क्योंकि यह एक अलग शेल है, जैसा कि दारुक के उत्तर में सुझाया गया है।
osa

@ ओसा आपने मुझे वहाँ बचाया! मैं Drupal और rSYNC के साथ एक मुद्दा बना रहा था और मुद्दा रास्ता था ... अजीब।
ली वुडमैन

6

क्या आप कमांड को bash या sh में निष्पादित कर रहे हैं? इससे फर्क पड़ सकता है। के ~साथ बदलने की कोशिश करें $HOME-eविकल्प के लिए स्ट्रिंग को डबल-कोट करने का प्रयास करें ।


6

rsync के साथ कुंजी फ़ाइल का उपयोग करें:

rsync -rave "ssh -i /home/test/pkey_new.pem" /var/www/test/ ubuntu@231.210.24.48:/var/www/test
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.