मुझे इस समस्या का हल निकालने में बहुत मज़ा आया। इसके लिए दोनों मशीनों पर टूल nc (netcat) और SSH (SFTP की जरूरत नहीं है) की आवश्यकता होती है।
इस उदाहरण में, मैं उस मशीन को कॉल करूंगा जिसके पास डेटा है जिसे लाइनक्स-ए का बैकअप लेने की आवश्यकता है, और जिस मशीन को बैकअप लिनक्स-बी प्राप्त करने की आवश्यकता है।
Linux-a पर, netcat को एक पोर्ट पर सुनें (मुझे 2000 लगे) और इसे एक फाइल पर रीडायरेक्ट करें। यह बस वहां बैठेगा और तब तक इंतजार करेगा जब तक कि उस बंदरगाह पर कुछ न हो जाए।
[kenny@linux-b /var/backups]$ nc -l 2000 > backup.tgz
Linux-b पर, linux-a के लिए एक ssh टनल को खोलें, मैंने फिर से पोर्ट 2000 का उपयोग किया। यह आपके द्वारा TCPH 2000 में लोकलहोस्ट पर TCP पोर्ट 2000 में linux-a, जहां netcat सुन रहा है, पर कुछ भी रीडायरेक्ट करेगा।
[kenny@linux-a /var/data]$ ssh -L 2000:localhost:2000 -CfN linux-b
अब टार आर्काइव बनाएं, लेकिन आउटपुट को स्टडआउट (उपयोग -) के लिए भेजें और इसे कुछ कम्प्रेशन के लिए gzip पर पाइप करें। अब इसे एक और नेटकैट पर पाइप करें जो इसे पोर्ट 2000 पर टीसीपी पर लोकलहोस्ट को भेजता है।
[kenny@linux-a /var/data]$ tar cf - important-data | gzip -fc | nc localhost 2000
हमारा काम हो गया! Linux-b पर netcat अब सुन नहीं रहा है, और एक नई फ़ाइल बनाई गई है। सबसे अच्छी बात यह है कि टार आर्काइव को कभी भी लिनक्स-ए की हार्ड डिस्क पर नहीं रखा गया था।
[kenny@linux-b /var/backups]$ file backup.tgz
backup.tgz: gzip compressed data, from Unix, last modified: Thu Jul 5 13:48:03 2012
मुझे पता है कि यह वास्तव में आपके द्वारा पूछे गए सवाल के बारे में नहीं है, लेकिन अगर आपके पास नेटकाट उपलब्ध है, तो यह आपकी समस्या का एक व्यावहारिक समाधान है।
संपादित करें: मैं एक बात भूल गया: यदि आप इन निर्देशों का पालन करते हैं, तो आपके पास अभी भी SSH सुरंग होगी, जो linux-a पर तैरती रहेगी। पता करें कि प्रक्रिया आईडी क्या है और इसे मार दें।
[kenny@linux-a /var/data]$ ps -ef | grep "ssh -L"
kenny 5741 1 0 13:40 ? 00:00:00 ssh -L 2000:localhost:2000 -CfN linux-b
kenny 5940 3360 0 14:13 pts/1 00:00:00 grep --color=auto ssh -L
[kenny@linux-a /var/data]$ kill 5741