डेमॉन-ओवर-ssh मोड में काम करने के लिए rsync नहीं मिल सकता है


11

मैं हर दिन सर्वर से डेटा कॉपी करने के लिए rsync सेट करने का प्रयास कर रहा हूं। सिस्टम को यथासंभव प्रतिबंधित करने के लिए, मैं मैन पेज में वर्णित मोड का उपयोग करने की कोशिश कर रहा हूं: "RSYNC-DAEMON फीचर्स VIA A REMOTE-SHELL CONNECTION" का उपयोग करना

तो मैंने रूट होम फोल्डर में rsyncd.conf नामक फाइल लगाई है:

[root]
path = /
read only = true

और परीक्षण के रूप में कॉपी / / / पास करने की कोशिश की:

rsync -vv -e ssh myserver::root/etc/passwd .

लेकिन मुझे निम्नलिखित मिलते हैं:

opening connection using: ssh myserver rsync --server --daemon . 
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(635) [receiver=3.0.3]

मैं यह सब करने का कारण यह है कि एक बार जब मैं इसे काम कर लेता हूं, तो मुझे कमांड निर्दिष्ट करके पहुंच को प्रतिबंधित करने की योजना है

rsync --server --daemon .

~ / .ssh / अधिकृत_की में


प्राप्त सर्वर पर / var / लॉग / सुरक्षित या / var / लॉग / संदेश में लॉग इन किया है?
डेव चेनी

यह था: rsync: कॉन्फ़िगरेशन फ़ाइल खोलने में असमर्थ "/etc/rsyncd.conf": ऐसी कोई फ़ाइल या निर्देशिका (2) धन्यवाद नहीं, जिसके कारण समाधान हुआ, जिसे मैं उत्तर के रूप में पोस्ट करूंगा।
rjmunro

जवाबों:


11

दस्तावेज़ में बग या rsync का निहितार्थ प्रतीत होता है। आदमी rsync कहता है:

रुसीट एक दूरस्थ शेल का उपयोग करके होस्ट से कनेक्ट करने का समर्थन करता है और फिर एकल-उपयोग "डेमन" सर्वर को जन्म देता है जो दूरस्थ उपयोगकर्ता के होम डायर में इसकी कॉन्फ़िगरेशन फ़ाइल को पढ़ने की उम्मीद करता है ।

लेकिन जब रूट से कनेक्ट हो रहा है, / var / log / संदेश के अनुसार, यह config फ़ाइल के लिए /etc/rsyncd.conf में लग रहा था (SSH पर उपयोग नहीं किए जाने पर rsyncd.conf फ़ाइल के लिए मानक स्थान)।

मुझे ssh सर्वर को जोड़कर सही कॉन्फ़िग फ़ाइल का उपयोग करने के लिए मजबूर करना पड़ा

command="rsync --config=/root/rsyncd.conf --server --daemon ."

to /root/.ssh/authorized_keys

इसका कारण यह है कि मैंने डिफॉल्ट लोकेशन में सिर्फ डिफॉल्ट को नहीं डाला है, मैं नहीं चाहता कि कोई गलती से एक सामान्य rsync डेमॉन शुरू करे - मैं केवल एक डेमॉन चाहता हूं कि यह सही एक्सेस की है जब इसे सही ssh कुंजी मिली हो।


5

डेमॉन मोड में rsync वह नहीं है जो मैं आपको सुझाव दूंगा कि क्या आप इसे यथासंभव बंद करना चाहते हैं। आप उस कमांड को प्रतिबंधित करना चाहते हैं जो SSH कुंजी को चलाने और उस कमांड का उपयोग करके कॉपी कमांड को लागू करने की अनुमति देता है।

यह पता लगाने के लिए कि कुंजी को प्रतिबंधित करने के लिए क्या कमांड है, ss कमांड में एक मामूली संशोधन के साथ उपयुक्त rsync कमांड लाइन चलाएं:

rsync -avz -e 'ssh -v' stuff somewhere:/place

आपको डिबग आउटपुट में एक पंक्ति दिखाई देगी जैसे:

debug1: Sending command: rsync --server -vlogDtprze.iLs . /place

वह सटीक आदेश है जिसे आप .ssh / अधिकृत_की में चलाने में सक्षम होने के लिए कुंजी को प्रतिबंधित करना चाहते हैं:

command="rsync --server -vlogDtprze.iLs . /place" ssh-dss AAAASSHKEY=

3
मैं सिस्टम के कुछ हिस्सों का केवल अलग-अलग बैकअप पढ़ने में सक्षम होना चाहता हूं - जैसे बैकअप ई-मेल और एसक्यूएल डेटाबेस हर दिन, लेकिन सप्ताह में एक बार अन्य चीजें। मुझे प्रत्येक संभावित बैकअप के लिए एक विशिष्ट कमांड और एक विशिष्ट कुंजी की आवश्यकता होगी, और मैं एक ही बुनियादी ढांचे के साथ अतिरिक्त तदर्थ बैकअप करने में सक्षम नहीं होगा।
rjmunro

2
पर्याप्त रूप से - मुझे लगता है कि "प्रणाली को यथासंभव प्रतिबंधित करने के लिए" काफी शाब्दिक रूप से :) :)
मिकी

1
आप एक स्क्रिप्ट में कई कमांड डाल सकते हैं और स्क्रिप्ट को पहली पंक्ति इनपुट के रूप में पैरामीटर पास कर सकते हैं।
alecco

1
वहाँ डिबग जानकारी के माध्यम से जाने के बिना आदेश धारावाहिक उत्पन्न करने के लिए एक रास्ता है? '-vlogDtprze.iLs'
qodeninja
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.