मध्यवर्ती होस्ट के माध्यम से Rsync फ़ाइलें


22

मैं वर्तमान में अपने LAN से दूर हूँ और मुझे अपने लैपटॉप का बैकअप बनाने की आवश्यकता है। मेरे पास अपने सर्वर पर अपने लैपटॉप की कुछ हालिया कॉपी है और मैं आमतौर पर rsync का उपयोग करके लैपटॉप को वापस करता हूं। अब मैं ऐसा करना चाहता हूं, लेकिन मेरे लैन के बाहर।

संक्षेप में, मैं A से C के माध्यम से B, जहाँ A मेरा लैपटॉप, B मेरा रूटर और C मेरा सर्वर है, से डेटा भेजना चाहता हूँ।

मुझे यह कमांड मिली: A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destinationजो स्कैप के माध्यम से फाइल ट्रांसफर करने के लिए ठीक काम करता है - लेकिन चूंकि मेरे पास पहले से ही मेरे सर्वर का अधिकांश डेटा है और मैं केवल सिंक को सिंक करने के लिए rsync का उपयोग करना चाहता हूं।

मैंने कोशिश की है: A$ rsync file -e 'ssh B ssh' Cऔर वह काम करता है जहां तक ​​मुझे उपयोगकर्ता के लिए पासवर्ड देने के लिए प्रेरित किया जाता है: सी। हालाँकि, जब मैं पासवर्ड दर्ज करता हूं तो कुछ भी नहीं होता है। राउटर Tomato v1.28 चल रहा है और मैं इसे c w / oa पासवर्ड पर लॉग इन करने के लिए सक्षम करने के लिए एक ssh कॉन्फिग फाइल का उपयोग करने में असमर्थ है।

यह काम करने के तरीके पर कोई विचार?


2
ProxyCommandकॉन्फ़िगरेशन फ़ाइल में समान का उपयोग करें । Rsync को वह चुनना चाहिए।
जकूजी

जवाबों:


32

इस प्रश्न का अनिवार्य रूप से अन्यत्र उत्तर दिया गया है, यहाँ scp के लिए और यहाँ rsync के लिए । चूंकि उत्तरार्द्ध में मेरा उत्तर शामिल है, लेकिन कोई उत्तर स्वीकार नहीं किया गया था, मैं इसे यहां दोहराऊंगा।

आप बताया गया है, आप का उपयोग कर सकते rsyncहै -e | --rshविकल्प है, लेकिन यह थोड़ा अधिक जटिल होने वाला है:

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/

या, यदि आपका संस्करण sshनया पर्याप्त है (OpenSSH> = v7.3), तो आप -J( ProxyJump) विकल्प का उपयोग कर सकते हैं

rsync -azv -e 'ssh -A -J USER@PROXYHOST:PORT' foo/ dest:./foo/

ध्यान दें कि मैं उपयोग कर रहा हूँ -A(एजेंट अग्रेषण), लेकिन यह भी आप कुंजी का उपयोग करना चाहिए पासवर्ड प्रमाणीकरण के साथ काम करता है, तो नहीं है, और, ज़ाहिर है, आप बदल सकते हैं proxyके साथ Bऔर destसाथ Cअपने उदाहरण में।

यदि संयोग से आपके पास एक नया पर्याप्त sshसंस्करण नहीं है (> = 5.3, IIRC), तो आप विकल्प के netcatबजाय इसका उपयोग कर सकते हैं :-Wssh

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/

अंत में, जैसा कि पहले ही टिप्पणियों में उल्लेख किया गया है, आप ProxyCommandअपनी $HOME/.ssh/configफ़ाइल में डाल सकते हैं ताकि आपके पास ऐसी जटिल कमांड लाइन न हो। विशेष रूप से, कुछ इस तरह से जोड़ें:

Host C
  ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p

या, ProxyJumpOpenSSH> = v 7.3 के लिए उपयोग करना:

Host C
  ProxyJump PROXYHOST

तो आप बस करने में सक्षम होना चाहिए:

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