सवाल एसएफटीपी (एसएसएच खोल के बिना) पर rsync का उपयोग करना संभव है?


एसएसएच पर रुपये, हर बार महान काम करता है।

हालांकि, किसी होस्ट को rsync करने का प्रयास कर रहा है जो केवल sftp लॉगिन को अनुमति देता है, लेकिन ssh लॉगिन नहीं, निम्न त्रुटि प्रदान करता है:

rsync -av / स्रोत ssh उपयोगकर्ता @ remotehost: / target /

प्रोटोकॉल संस्करण विसंगति - आपका है   खोल साफ है? (rsync मैन पेज देखें   एक स्पष्टीकरण के लिए) rsync त्रुटि:   प्रोटोकॉल असंगतता (कोड 2) पर   compat.c (171) [प्रेषक = 3.0.6]

Rsync मैन पेज से प्रासंगिक अनुभाग यहां दिया गया है:

यह संदेश आमतौर पर आपकी स्टार्टअप स्क्रिप्ट या के कारण होता है   रिमोट खोल सुविधा उत्पादन   धारा पर अवांछित कचरा है कि   rsync के लिए उपयोग कर रहा है   इसका परिवहन इस समस्या का निदान करने का तरीका आपका चलाना है   इस तरह रिमोट खोल:

          ssh remotehost /bin/true > out.dat

फिर out.dat देखें। अगर सब ठीक से काम कर रहा है तो   out.dat शून्य लंबाई फ़ाइल होना चाहिए।   अगर आपको उपर्युक्त त्रुटि मिल रही है   rsync से          तो आप शायद यह पता लगाएंगे कि out.dat में कुछ टेक्स्ट है या   डेटा। सामग्री को देखो और कोशिश करें   इसे तैयार करने का काम करें।   सबसे कॉम-          मोन कारण गलत स्टार्टअप स्क्रिप्ट कॉन्फ़िगर किया गया है (जैसे   के रूप में .cshrc या .profile) जिसमें शामिल हैं   गैर-इंटरैक्टिव के लिए आउटपुट स्टेटमेंट्स   प्रवेश नहीं हैं।

मेरे सिस्टम पर इसे करने का प्रयास निम्नलिखित में किया गया। डेटा:

एसएसएच-डमी-खोल: कमांड की अनुमति नहीं है।

जैसा कि मैंने सोचा था, मेजबान एसएसएच लॉगिन की अनुमति नहीं दे रहा है।

निम्नलिखित संपर्क दिखाता है कि एसएसएफएफ के साथ फ्यूज का उपयोग करके इस कार्य को पूरा करना संभव है - हालांकि यह बेहद धीमी है, और उत्पादन के उपयोग के लिए उपयुक्त नहीं है।

क्या rsync sftp काम करने के लिए कोई मौका है?


51
2018-04-25 11:07


मूल


एलएफटीपी चाल करेगा। मैं -आर स्विच के साथ रिमोट को स्थानीय सिंक कर दूंगा
क्या आप जानते हैं कि सर्वर पर आदेश कैसे प्रतिबंधित हैं? अगर यह sshd_config में ForceCommand को सेट करके है, तो देखें कि क्या आप उस फ़ाइल को संशोधित कर सकते हैं जो इंगित करता है। या अगर यह अधिकृत_की में कमांड द्वारा सेट किया गया है, तो हो सकता है कि आप sshfs पर अधिकृत_की को एक्सेस कर सकें और इसे बदल सकें? - ptman
तुम कोशिश कर सकते हो csync: csync /home/csync sftp://csync@krikkit.galaxy.site:2222/home/csync यह देखो उत्तर। - nachtigall
आखिरकार, मैंने इसे किया lftp: lftp -e "mirror -eRv /local/dir/ /remote/dir; quit;" sftp://user@server:port - nachtigall
@nachtigall क्या आप जानते हैं कि एकाधिक इनपुट फ़ाइलों / फ़ाइलों और डीआईआर की सूची के साथ lftp का उपयोग कैसे करें? - bortran


जवाब:


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

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

यदि आप मेजबान PHP या समान में स्क्रिप्टिंग की अनुमति देता है और इसे लॉक नहीं किया गया है तो अतिरिक्त प्रक्रियाएं नहीं हो सकती हैं execउपयोगकर्ता स्क्रिप्ट द्वारा संपादित करें, फिर आप इस तरह से सुनने मोड में rsync शुरू करने का प्रयास कर सकते हैं। यदि आपका अंत कनेक्ट करने योग्य है (आप बाहरी दुनिया में एसएसएच पहुंच रहे हैं) तो आप इसे रिवर्स में आजमा सकते हैं - सर्वर पर एक स्क्रिप्ट रन rsync है लेकिन आने वाले कनेक्शन सुनने के बजाए यह आपकी स्थानीय सेवा से संपर्क करता है और इस तरह सिंक करता है। यह अभी भी मेजबान पर स्थापित rsync पर निर्भर करता है जो कि दिया गया नहीं है, या आप एक कार्यशील प्रति अपलोड कर सकते हैं, लेकिन सार्वजनिक रूप से एड्रेसेबल फैशन में rsync डिमन चलाने और सुरक्षा को अनएन्क्रिप्टेड पर बात करने के सुरक्षा प्रभाव नहीं हैं चैनल।

जैसा ऊपर वर्णित है, चारों ओर मेसिंग मेजबान नीतियों के खिलाफ हो सकता है, भले ही यह बिल्कुल काम करता है, और आप को लात मार सकता है। आप यह पूछने से बेहतर हैं कि उस खाते के लिए एक पूर्ण खोल सक्षम किया जा सकता है और या तो उस होस्ट के लिए rsync छोड़ना या उस मेजबान को त्यागना और कहीं और आगे बढ़ना अगर वे ऐसा नहीं करेंगे।


38
2018-04-25 11:39



ध्यान दें कि इसे एक पूर्ण खोल नहीं होना चाहिए; इसे सिर्फ rsync कमांड को चलाने के लिए उचित तर्क के साथ अनुमति देना है। इसके लिए scponly उपयोगी है। - sciurus


सैद्धांतिक रूप से, हां। आप अपने स्थानीय मशीन पर रिमोट फाइल सिस्टम को माउंट कर सकते हैं FUSE का उपयोग कर। फिर आप घुड़सवार निर्देशिका और स्थानीय निर्देशिका के बीच rsync की एक स्थानीय प्रति चला सकते हैं। मैंने व्यक्तिगत रूप से यह कोशिश नहीं की है, लेकिन इसे सिद्धांत में काम करना चाहिए। यह संभवतः बहुत कम कुशल होगा जो एसएसएच पर rsync प्रदर्शन कर रहा है क्योंकि तुलना करने के लिए इसे प्रत्येक फ़ाइल के कम से कम हिस्से को स्थानांतरित करने की आवश्यकता होगी।


15
2018-04-25 15:59



यह काम करना चाहिए जब टाइमस्टैंप + आकार की तुलना तय करने के लिए पर्याप्त है कि क्या भेजने की आवश्यकता है। जैसे ही एए चेकसम की आवश्यकता होती है, पूरी रिमोट फाइल लाइन के साथ-साथ भेजे गए अपडेट पर भी पढ़ी जाएगी, इसलिए सुनिश्चित करें कि आपके पास rsync के विकल्प सेट हैं जैसे कि यह प्रत्येक फ़ाइल के लिए सब कुछ या कुछ भी नहीं करता है (--ignore- समय या - चेकसम और होने वाली - होहोल-फ़ाइल निर्दिष्ट हो सकती है)। कुछ विकल्प जैसे - लिंक्स-डेस्ट इस तरह से ठीक से (या बिल्कुल) काम करने की संभावना नहीं है। - David Spillett
कुछ विवरण डेविड जोड़ने के लिए धन्यवाद। दक्षता में ऐसी सीमाएं हैं जिनकी मैं सोच रहा था, बस उन्हें बिल्कुल स्पष्ट नहीं किया :) - Kamil Kisiel
यह सीमाओं के साथ एक कामकाज है, हां, लेकिन अगर यह "उचित" rsync का आह्वान करने का कोई तरीका नहीं है तो यह काफी अच्छा है - Valery Lourie


थोड़ा देर हो चुकी है, लेकिन यहां है कि मैं sshfs का उपयोग करके इसे कैसे करता हूं

  source /scratch/slimdata/password.sh
  mkdir tmp_mnt
  echo $PASSWORD | sshfs user@host:dir tmp_mnt -o password_stdin
  rsync -rutL --delete tmp_mnt/ to_sync/
  fusermount -u tmp_mnt
  rmdir tmp_mnt

5
2017-09-20 12:04



जैसा कि @ डेविड स्पिल्लेट ने पहले टिप्पणी पर अपनी टिप्पणी में कहा था (serverfault.com/questions/135618/...), यह काम करेगा लेकिन rsync प्रोटोकॉल का एक अक्षम उपयोग है। - Evan Anderson
जोनाथन, मुझे लगता है कि आपका समाधान गलत है। यदि आप रिमोट ड्राइव को माउंट करते हैं और rsync निष्पादित करते हैं जैसे कि आप दो स्थानीय फ़ोल्डरों को सिंक करेंगे, तो हमेशा स्थानीय मशीन पर rsync प्रक्रिया रिमोट फाइलों के हैश मानों की गणना के बाद से समन्वयन पर सबकुछ स्थानांतरित हो जाता है। इसका मतलब है कि पूरी फाइल स्थानांतरित की जाती है और rsync के लाभ खो जाते हैं। संपादित करें: आह यह उत्तर कई बार दिया गया है ... प्रतिकृति के लिए sry: डी - Thekwasti


नहीं। Rsync दूसरी तरफ rsync चलाकर और इसके साथ संचार करके काम करता है, जिसका अर्थ है कि खोल के कुछ रूपों की आवश्यकता है।


2
2018-04-25 11:23





एक विकल्प आरएसआईएनसी को डिमन के रूप में शुरू करना और एसएसएच सुरंग के माध्यम से उससे जुड़ना होगा।


2
2018-04-25 12:17



यह उत्तर पूरी तरह से सहायक होने के लिए बहुत छोटा है, लेकिन यदि सर्वर पक्ष शैल पहुंच की अनुमति नहीं दे सकता है लेकिन (1) एक rsync सर्वर स्थानीय रूप से सुन रहा है (बाहरी से, सुरक्षा के लिए उपलब्ध नहीं है), और (2) एसएस सुरंग, फिर में सिद्धांत एक नियम के माध्यम से सर्वर में लॉग इन कर सकता है authorized_keys जो एक विशिष्ट सुरंग और रन देता है उदा। sleep 86400। फिर ग्राहक पक्ष तब कर सकता था rsync सुरंग के माध्यम से। - Stéphane Gourichon


Rsync का उपयोग करने का एक विकल्प है इसके बजाय lftp (जो sftp से कनेक्ट हो सकता है) का उपयोग करें और दर्पण कमांड का उपयोग करें। उदाहरण के लिए कोई कर सकता है

lftp
~> open -u user,password sftp://host.com
~> mirror remotedir outdir
~> quit

2
2018-03-31 10:13





सभी का सबसे अच्छा संयोजन विकल्प

ऐसा लगता है कि यहां निम्नलिखित फायदे हैं जिनके पास अन्य उत्तरों नहीं हैं:

  • एसएसएच से सुरक्षित लाभ (सुरक्षित)
  • rsync से पूरी तरह से लाभ (बैंडविड्थ-कुशल प्रोटोकॉल, बैंडविड्थ सीमा जैसे सभी rsync विकल्प)
  • वास्तव में कुशल (एसएसएफएफ के विपरीत जो कभी-कभी दिनों को बचाता है लेकिन अभ्यास में अभी भी धीमा है)
  • मनमाने ढंग से खोल आदेश सर्वर-पक्ष की आवश्यकता नहीं है
  • एसएस सुरंगों की अनुमति देने के लिए सर्वर की आवश्यकता नहीं है
  • चलाने के लिए सर्वर की आवश्यकता नहीं है rsync डेमॉन

मैंने अभी तक इसका परीक्षण नहीं किया है, लेकिन मैंने उन सभी सुविधाओं को सफलतापूर्वक उपयोग किया है rrsync

यह कैसे करना है

  • स्थानीय रूप से एक कुंजी बनाएँ ssh-keygen (ओपनएसएसएच सुविधा)
  • सर्वर की प्रविष्टि के साथ केवल उस विशिष्ट कुंजी के साथ लॉगिन की अनुमति दें ~/.ssh/authorized_keys (ओपनएसएसएच सुविधा)
  • इस कुंजी को एक विशिष्ट कमांड से संबद्ध करें ~/.ssh/authorized_keys (openSSH सुविधा) स्क्रिप्ट कमांड के रूप में उपयोग कर रहा है rrsync rsync के साथ वितरित, कुछ की तरह command="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-

फिर आप सामान्य रूप से क्लाइंट से rsync कर सकते हैं।

अगर आपको अधिक जानकारी चाहिए

आरएसआईएनसी तक एसएसएच एक्सेस को प्रतिबंधित करना | गाय रूटेनबर्ग

ऊपर लिंक से परे एक कदम

उस पृष्ठ के अंत में कमांड कम किया जा सकता है। में ~/.ssh/config इस तरह एक stanza बनाएँ:

Host remote # can be host or ip or custom-label User user # login on remote host HostName optional-dns-resolvable-host-or-ip # if label used above IdentityFile ~/.ssh/id_remote_backup

तो ग्राहक से आपका rsync कमांड

rsync -e "ssh -i $HOME/.ssh/id_remote_backup" -av user@remote: etc2/

हो जाता है

rsync -av user@remote: etc2/

0
2018-01-08 10:04



दुर्भाग्यवश, एसएसटीपी सर्वर के साथ rsync का उपयोग करने के साथ इसका कोई संबंध नहीं है, हालांकि यह ओपनएसएसएच सर्वर को कॉन्फ़िगर करने के बारे में है rsync एसएफटीपी पहलू को दूर करने के लिए दौड़ने के लिए। अगर आपको किसी और के एसएफटीपी सर्वर के साथ प्रस्तुत किया गया है जिस पर आपका कोई नियंत्रण नहीं है तो यह उत्तर समस्या को हल नहीं कर सकता है। - Malvineous
आप सही हे। मैंने वास्तव में किसी अन्य प्रश्न का उत्तर देने के लिए इसे लिखा होगा और यहां गलती से पोस्ट किया होगा। मैं यहां अपना जवाब हटाने पर विचार कर रहा हूं। - Stéphane Gourichon