पोर्ट फ़ॉरवर्डिंग का उपयोग करते समय मैं एक बड़ी scp फ़ाइल स्थानांतरण को कैसे फिर से शुरू कर सकता हूँ?


10

मेरे पास एक मशीन है, जो कुछ हूप्स दूर है, और मुझे फ़ाइलों को स्थानांतरित करने के लिए पोर्ट अग्रेषण स्थापित करने की आवश्यकता है।

संपादित करें: स्पष्ट होने के लिए, दूरस्थ मशीन तक पहुंचने के लिए कई हॉप्स की आवश्यकता होती है। अपनी मशीन से, मैंने एक वीपीएन स्थापित किया, जहां मैं 10.255.xx तक पहुंच सकता हूं - यही एकमात्र मशीन है जिसे मैं वीपीएन के माध्यम से कनेक्ट कर सकता हूं। एक बार .xx में लॉग इन करने के बाद, मैं फिर अन्य मशीनों से जुड़ सकता हूं - आप उनमें से एक हैं।

मेरी मशीन से:

ssh -L 4567:localhost:4567 me@10.255.x.x

फिर उस मशीन से:

ssh -L 4567:localhost:22 me@10.255.y.y

मैं तब कर सकता हूं

scp -P 4567 me@localhost:/path/to/large/file.gz .

मैंने इस रनिंग ओवरनाइट को छोड़ दिया, केवल यह पता लगाने के लिए कि स्थानांतरण किसी बिंदु पर मर गया।

मैंने स्थानांतरण को फिर से शुरू करने के लिए sss पर rsync का उपयोग करने के लिए कुछ सुझाव देखे हैं, लेकिन मैं स्पष्ट नहीं हूं कि इसे कैसे सेट किया जाए। क्या यह संभव है?


ये सभी हॉप्स किस लिए हैं? scp me@10.255.x.x:/path/to/large/file.gz .बिल्कुल वैसा ही हासिल नहीं होगा ? क्लाइंट और सर्वर पर scp (ssh) का कौन सा संस्करण स्थापित है?
डेनिस

@ डेनिस: एससीपी एक स्थानांतरण को फिर से शुरू करने का समर्थन नहीं करता है - जो आप सुझाते हैं वह डाउनलोड को पुनरारंभ करेगा।
क्रिस

कुछ संस्करण करते हैं (मेरे लैपटॉप का scp करता है, मेरे VPS का नहीं)। कारण मैं पूछ रहा हूँ क्योंकि हॉप्स मेरे लिए अनावश्यक लगता है, और हॉप्स के बिना rsyncing एक बहुत आसान हो जाएगा।
डेनिस

यह उत्तर आपकी सहायता कर सकता है: unix.stackexchange.com/a/43097/14084
बर्नहार्ड

जवाबों:


9

Scp के कुछ संस्करणों के साथ (स्रोत कंप्यूटर पर संस्करण की कुंजी प्रतीत होती है), बस स्थानांतरण को फिर से शुरू करने के लिए scp कमांड को फिर से निष्पादित करना होगा। लेकिन सावधान रहना! यदि आपका संस्करण आंशिक स्थानान्तरण का समर्थन नहीं करता है, तो आंशिक फ़ाइल बस ओवरराइट हो जाएगी।

निम्नलिखित rsync स्विच एक टूटे हुए स्थानांतरण को फिर से शुरू करने के लिए काम करते हैं यदि scp इसका समर्थन नहीं करता है:

     --append                append data onto shorter files
     --append-verify         like --append, but with old data in file checksum
 -e, --rsh=COMMAND           specify the remote shell to use
     --progress              show progress during transfer

आदेश

rsync --append-verify --progress --rsh="ssh -p 4567" me@localhost:/path/to/large/file.gz .

वांछित प्रभाव होना चाहिए। ध्यान दें कि -pस्विच ssh के लिए कम होना चाहिए।


गंतव्य सर्वर पर नेटवर्क को कॉन्फ़िगर करने के तरीके के कारण हॉप्स की आवश्यकता होती है। Ss पर rsync का उपयोग करने में समस्या यह है कि मुझे स्थानीय पोर्ट 4567 का उपयोग करने की आवश्यकता है, फ़ाइल 10.255.xx सर्वर पर मौजूद नहीं है।
क्रिस

मेरी गलती। मैं मान रहा था कि 10.255.y.yक्लाइंट कंप्यूटर था।
डेनिस

मैंने अपना उत्तर अपडेट कर दिया है।
डेनिस

और अगर rsync का उपयोग करने का कोई तरीका नहीं है, तो क्या करें? मेरे मामले में मेरे पास केवल दूरस्थ मेजबान पर उपलब्ध ftp है।
dr.dimitru

1
@ एंज़ो सवाल एससीपी के बारे में है, इसका जवाब एसपीपी के बारे में होना चाहिए। सवाल एक अधूरे scp हस्तांतरण के बारे में है, न कि scp टूल के बारे में। यह शाब्दिक रूप से कहता है कि मैंने स्थानांतरण को फिर से शुरू करने के लिए sss पर rsync का उपयोग करने के लिए कुछ सुझाव देखे हैं, लेकिन मैं स्पष्ट नहीं हूं कि इसे कैसे सेट किया जाए। क्या यह संभव है? तल पर।
डेनिस

3

Scp के बजाय sftp का उपयोग करें

आपके मामले में:

sftp -a -P 4567 me@localhost:/path/to/large/file.gz .

Sftp मैन पेज से:

-a      Attempt to continue interrupted downloads rather than overwriting existing partial or complete copies of files.  If the remote file contents differ from the partial local copy then the resultant file is likely to be corrupt.

1

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


-1

मैं वास्तव में नहीं देख सकता कि आपकी सुरंगों का क्या मतलब है, इसलिए यहाँ बताया गया है कि मैं आपकी समस्या को कैसे हल करूँगा:

ssh -R $tunnelPort:localhost:$localSSHPort $remoteUser@$remoteHost -p $remoteSSHPort

यह स्थानीय मशीन (लोकलहोस्ट) से रिमोट मशीन (रिमोटहॉस्ट) के लिए एक रिवर्स सुरंग खोलता है। $ टनलपोर्ट पोर्ट है, जिस पर सुरंग रिमोटहॉस्ट पर पाई जानी है। $ localSSHPort वह बंदरगाह है, जिस पर स्थानीय sshd चलता है और $ RemoteSSHPort वह स्थान है जहाँ Remotehost का sshd सुनता है।

अब जब आप (रिवर्स!) सुरंग के अंदर हैं तो आप डेनिस द्वारा प्रस्तावित कम या ज्यादा कर सकते हैं:

rsync --apend-verify -az -e 'ssh -p $tunnelPort' /path/to/large/file $user@localhost:/destination

-a और -z झंडे rsync के मैन पेज में बताए गए हैं, इसलिए मैं उनके बारे में विस्तार से नहीं बताऊंगा। अब क्या होता है कि जब आप रिमोटहॉस्ट पर rsync चलाते हैं तो ऊपर से यह सभी डेटा को पोर्ट $ टनलपॉर्ट में धकेल देता है जो तब आपके लोकलहोस्ट के sshd $ localSSHPort पर फ़ॉरवर्ड किया जाता है।

उम्मीद है कि मदद की।


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