यदि आप इंटरमीडिएट मशीन पर डेटा की एक प्रति रखने के लिए खुश हैं, तो आप बस एक स्क्रिप्ट लिख सकते हैं जो एक संदर्भ के रूप में सर्वर 1 का उपयोग करके स्थानीय प्रतिलिपि को अपडेट करता है और फिर एक संदर्भ के रूप में स्थानीय प्रतिलिपि का उपयोग करके सर्वर 2 पर बैकअप अपडेट किया जाता है:
#!/bin/sh
rsync user@server1:/path/to/stuff /path/to/loca/copy -a --delete --compress
rsync /path/to/loca/copy user@server2:/path/to/where/stuff/should/go -a --delete --compress
एक सरल स्क्रिप्ट का उपयोग करने का मतलब है कि आपने सब कुछ करने के लिए एकल कमांड को वांछित किया है। यदि डेटा संवेदनशील है (तो आप या आपकी कंपनी के अन्य लोग, आपके लैपटॉप पर इधर-उधर तैरने वाली कॉपी नहीं चाहते हैं) तो यह निश्चित रूप से एक सुरक्षा नहीं-नहीं हो सकता है। यदि सर्वर 1 आपके लिए स्थानीय है, तो आप बाद में स्थानीय कॉपी को हटा सकते हैं (क्योंकि यह हर बार स्थानीय लैन पर पुनर्निर्माण करने के लिए त्वरित होगा)।
एक सुरंग का निर्माण करना ताकि सर्वर प्रभावी रूप से एक दूसरे से बात कर सकें और अधिक संभव हो सके जैसे कि:
- सर्वर 2 पर / बिन / श की एक प्रति / usr / स्थानीय / बिन / shforkeepalive बनाते हैं। एक कॉपी के बजाय एक प्रतीकात्मक लिंक का उपयोग करें, फिर आप इसे पैच / बिन / श के सुरक्षा अपडेट के बाद अपडेट नहीं करना है।
सर्वर 2 पर एक ऐसी स्क्रिप्ट बनाएं जिसमें कुछ सेकंड के लिए लूप स्लीपिंग के अलावा कुछ नहीं होता है, फिर थोड़ी मात्रा में टेक्स्ट आउट की गूंज होती है, और इसमें अभी sh की "कॉपी" का उपयोग होता है:
#!/usr/local/bin/shforkeepalive
while [ "1" != "0" ]; do
echo Beep!
sleep 5
done
( echo
शायद इसकी जरूरत नहीं है, क्योंकि सत्र काफी समय से बेकार नहीं जा रहा है, भले ही एसएसएचडी को एसश क्लाइंट से जिंदा पैकेट को अनदेखा करने के लिए कॉन्फ़िगर किया गया हो)
अब आप अपने लैपटॉप पर एक स्क्रिप्ट लिख सकते हैं जो पृष्ठभूमि में आपकी रिवर्स सुरंग शुरू करता है, सर्वर 1 को कॉपी ऑपरेशन करने के लिए rsync का उपयोग करने के लिए कहता है, फिर लूपिंग स्क्रिप्ट को मारकर रिवर्स सुरंग को मारता है (जो एसएसएच सत्र बंद कर देगा):
#!/bin/sh
ssh user@server2 -L2222:127.0.0.1:22 /usr/local/bin/keepalivesctipt &
ssh user@server1 -R2222:127.0.0.1:2222 rsync /path/to/stuff user@127.0.0.1:/destination/path/to/update -a --delete --compress -e 'ssh -p 2222'
ssh user@server2 killall shforkeepalive
जिस तरह से यह काम करता है:
- पंक्ति 1: मानक "कमांड इस स्क्रिप्ट की व्याख्या करने के लिए उपयोग करने के लिए" मार्कर
- पंक्ति 2: रिवर्स सुरंग के साथ एक SSH कनेक्शन शुरू करें और इसे खुला रखने के लिए इसके माध्यम से रखने योग्य स्क्रिप्ट चलाएँ। अनुगामी & bash को पृष्ठभूमि में इसे चलाने के लिए कहता है ताकि अगली पंक्तियाँ समाप्त होने की प्रतीक्षा किए बिना चल सकें
- पंक्ति 3: एक सुरंग शुरू करें जो कि सर्वर से ऊपर सुरंग से जुड़ेगी इसलिए server1 को देख सकते हैं, और इस व्यवस्था पर प्रतिलिपि / अद्यतन करने के लिए rsync चलाएं
- पंक्ति 4: rsync ऑपरेशन पूरा होने पर (और इसलिए दूसरा SSH कॉल रिटर्न), जो पहले ssh सत्र को पूरा करेगा, कीप-लिपि स्क्रिप्ट को मारें।
यह विशेष रूप से साफ महसूस नहीं करता है, लेकिन यह काम करना चाहिए। मैंने उपरोक्त परीक्षण नहीं किया है इसलिए आपको इसे ट्विक करने की आवश्यकता हो सकती है। सर्वर 1 पर rsync कमांड को सिंगल लाइन स्क्रिप्ट बनाने से 'ssh' कॉलिंग कमांड पर वर्णों से बचने की किसी भी आवश्यकता को कम करने में मदद मिल सकती है।
BTW: आप कहते हैं "मत पूछो" क्यों दो सर्वर एक दूसरे को सीधे नहीं देख सकते हैं, लेकिन इसके लिए अक्सर अच्छा कारण है। मेरा होम सर्वर और सर्वर जिस पर ऑनलाइन बैकअप होता है, वे एक-दूसरे को लॉगिन नहीं कर सकते हैं (और सभी उपयोगकर्ताओं के लिए अलग-अलग पासवर्ड + कुंजियाँ हैं) - इसका मतलब है कि यदि दोनों में से किसी एक को हैक किया जाता है तो इसे एक आसान मार्ग के रूप में उपयोग नहीं किया जा सकता है दूसरे को हैक करें ताकि मेरे ऑनलाइन बैकअप सुरक्षित हों (कोई व्यक्ति मेरे डेटा को लाइव से हटाने के लिए दुर्भावनापूर्ण तरीके से बैकअप बैकअप को अपडेट करने की अपनी क्षमता का उपयोग नहीं कर सकता, क्योंकि इसमें मुख्य बैकअप साइट को छूने की कोई सीधी क्षमता नहीं है)। दोनों सर्वर दोनों एक इंटरमीडिएट सर्वर से कनेक्ट कर सकते हैं - लाइव सर्वर अपने बैकअप को (rsync के माध्यम से) सुबह-सुबह इंटरमीडिएट मशीन को पुश करने के लिए सेट है और कनेक्ट करने के लिए बैकअप सर्वर सेट किया गया है (थोड़ी देर बाद चरण एक को पूरा करने के लिए) और बैकअप एकत्र करें (फिर से rsyc के माध्यम से एक स्नैपशॉट कदम के बाद बैकअप के कई उम्र बनाए रखने के लिए)। यह तकनीक आपकी परिस्थिति में भी उपयोग करने योग्य हो सकती है, और यदि ऐसा है तो मैं इसे बहुत साफ-सुथरे तरीके से करने की सलाह दूंगा।
संपादित करें: हारून के साथ मेरी हैकिंग को विलय करना / सभी के बारे में / बिन / श की प्रतियां और सर्वर 2 पर एक अलग रखने वाली लिपि से बचने के लिए, इस स्क्रिप्ट को आपके लैपटॉप पर पूरी नौकरी करनी चाहिए:
#!/bin/sh
ssh user@server2 -L2222:127.0.0.1:22 sleep 60 &
pid=$!
trap "kill $pid" EXIT
ssh user@server1 -R2222:127.0.0.1:2222 rsync /path/to/stuff user@127.0.0.1:/destination/path/to/update -a --delete --compress -e 'ssh -p 2222'
जैसा कि ऊपर कहा गया है, rsync लोकलहोस्ट से जुड़ रहा है: 2222 जो आपके लैपटॉप की लोकलहोस्ट के लिए सुरंग के नीचे है: 2222 जो कि दूसरी सुरंग के माध्यम से सर्वर 2 के लोकलहोस्ट: 22 में जाता है।
संपादित करें 2: यदि आपको सर्वर 1 से कोई फर्क नहीं पड़ता है, तो यह सर्वर 2 के साथ सीधे प्रमाणित करने की अनुमति देता है (भले ही यह बिना सुरंग के सर्वर 2 को नहीं देख सकता) आप इसके साथ और भी सरल कर सकते हैं:
#!/bin/sh
ssh user@server1 -R2222:123.123.123:22 rsync /path/to/stuff user@127.0.0.1:/destination/path/to/update -a --delete --compress -e 'ssh -p 2222'
जहां 123.123.123.123 सर्वर 2 के लिए एक सार्वजनिक पता है, जिसे स्क्रिप्ट की बजाय कॉपी-पेस्ट वन-लाइनर के रूप में इस्तेमाल किया जा सकता है।