दो लिनक्स कंप्यूटरों के बीच एक लैन पर फ़ाइलों को स्थानांतरित करने का सबसे अच्छा तरीका


77

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

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

अब तक मुझे यही मिला:

  • ssh
  • sshfs
  • SCP
  • SFTP
  • एनएफएस
  • साम्बा
  • दाता

सबसे आसान क्या है? सबसे लचीला? सबसे सरल? सबसे अच्छा उपाय? प्रत्येक का भला - बुरा क्या है? क्या अन्य (बेहतर) विकल्प हैं? सबसे अच्छा तरीका चुनने में कौन से पैरामीटर हैं (समाधान फाइलों की संख्या पर निर्भर हो सकता है, फ़ाइलें, आसानी बनाम लचीलापन, ...)?


2
क्या कोई समझा सकता है कि rsync इस सब में खेलने के लिए कहाँ आता है?
कोनरक

jonallard, जोड़ने कृपया नहीं जवाब करने के लिए सवाल , अगर आपको लगता कुछ जवाब अतिरिक्त जानकारी की आवश्यकता है कि आप उन पर संपादन सुझाव देते हैं, या अपने खुद के जवाब बना सकते हैं - (वास्तव में कोई मतलब नहीं है ऐसा करने के लिए, यह करता है?) जो सब कुछ सारांशित करता है!
10

जवाबों:


65

लिनक्स वातावरण में, सुरक्षा और उपयोग में आसानी दोनों के लिए, ssh जाने का सबसे अच्छा तरीका है। SSH, SSHFS, SCP और SFTP जैसा कि आप सूचीबद्ध करते हैं, SSH प्रोटोकॉल के शीर्ष पर निर्मित सभी अलग-अलग सेवाएँ हैं। एससीपी का उपयोग करना बहुत आसान है, यह सीपी की तरह ही काम करता है लेकिन आप मार्ग में उपयोगकर्ता और मशीन के नाम प्रदान कर सकते हैं। तो, हम एक सीपी पसंद cp ~/music/ ~/newmusic/कर सकते हैं , लेकिन हम scp ~/music/ user@host:~/newmusicइसे आसानी से होस्ट नाम के कंप्यूटर पर भेजने के लिए कर सकते हैं। यही है - हमें कुछ भी स्थापित करने की आवश्यकता नहीं है। यदि आपके पास प्रमाणपत्र या कुछ अन्य प्रमाणीकरण सेट अप नहीं है, तो आपको दूसरी मशीन पर खाते के पासवर्ड के लिए कहा जाएगा।

एसएफटीपी एक ऐसा उपकरण है जो रिमोट फाइल सिस्टम पर बहुत सारे ऑपरेशन करना आसान बनाता है - यह एफ़टीपी की तरह ही काम करता है, लेकिन यह एसएसएच से चलता है इसलिए यह सुरक्षित है और इसके लिए केवल एसएसएच सर्वर की आवश्यकता होती है। man sftpआपको इसका उपयोग कैसे करना है, यह सब बताएगा। मैं केवल दो मशीनों के बीच एक फ़ोल्डर को स्थानांतरित करने के लिए एसएफटीपी का उपयोग नहीं करता हूं, यह तब अधिक उपयोगी होता है जब आपके पास बहुत सारे ऑपरेशन होते हैं, जैसे कि आप किसी अन्य कंप्यूटर पर फ़ाइलों को पुन: व्यवस्थित कर रहे हैं।

SSHFS सिर्फ SFTP को एक फाइल सिस्टम में बढ़ाता है: यह आपको एक वर्चुअल होस्ट को आपके फाइल सिस्टम में माउंट करने की अनुमति देता है, इसलिए नेटवर्क सामान पूरी तरह से पारदर्शी रूप से होता है। SSHFS अर्ध-स्थाई सेटअप के लिए है, न कि केवल एक बार की फ़ाइल स्थानांतरण के लिए। इसे स्थापित करने के लिए कुछ और प्रयास करने होंगे, जिन्हें आप प्रोजेक्ट वेबसाइट पर पढ़ सकते हैं ।

यदि आपको मिश्रित-ओएस वातावरण में काम करने की आवश्यकता है, तो सांबा आपका अगला सर्वश्रेष्ठ दांव बन जाएगा। विंडोज और ओएस एक्स, सांबा को पूरी तरह से स्वचालित रूप से समर्थन करते हैं, और लिनक्स भी करता है, हालांकि यह कभी-कभी उपयोग करने के लिए मोटा होता है।


3
वास्तव में जिस तरह का उत्तर मैं चाह रहा था: पूर्ण, संपूर्ण, विस्तृत, बिंदु तक।
jonallard

2
हालांकि एक बात, scpकाम करने के लिए, क्या हमें किसी प्रकार का ssh सर्वर, श्रोता या दूसरी तरफ कुछ अनब्लॉक करने की आवश्यकता है? मुझे "कनेक्शन अस्वीकृत" त्रुटियां मिल रही हैं।
जोंलार्ड

2
scp ssh का उपयोग करता है, इसलिए अगर SSH काम करेगा तो यह काम करेगा। इसका मतलब है, निश्चित रूप से, आपको एक एसएसएच सर्वर चलाने की आवश्यकता है (हर लाइनक्स डिस्ट्रो में डिफ़ॉल्ट मैं जानता हूं) और एक कनेक्शन संभव होना चाहिए (फायरवॉल, एनएटी, आदि के पास उपयुक्त अपवाद होना चाहिए)।
jcrawfordor

8
स्पष्ट openssh-serverरूप से उबंटू नेट्टी में स्थापित किया जाना है।
जोंलार्ड 5

3
नोट करें कि sshएन्क्रिप्शन का उपयोग करता है, जो कुछ अतिरिक्त ओवरहेड का कारण होगा। यदि शामिल कंप्यूटरों में CPU की गति काफी धीमी है, तो इससे अंतर हो सकता है। उस मामले में netcatया समान (कैस्पर का जवाब देखें) बेहतर हो सकता है। केवल तभी यदि आपको वास्तव में एन्क्रिप्शन (संरक्षित लैन में) की आवश्यकता नहीं है।
22'11

59

उन मामलों के लिए मेरा पसंदीदा जो सुरक्षा से कोई फर्क नहीं पड़ता netcat + tar :

निर्देशिका भेजने के लिए, निर्देशिका के अंदर cd जिसकी सामग्री आप भेजने और कर रहे कंप्यूटर पर भेजना चाहते हैं:

tar -cz . | nc -q 10 -l -p 45454

उस सामग्री को प्राप्त करने वाले कंप्यूटर पर, जहाँ आप चाहते हैं कि सामग्री दिखाई दे और वह करे:

nc -w 10 $REMOTE_HOST 45454 | tar -xz

बदलें $REMOTE_HOSTकंप्यूटर भेजने करने का आईपी / होस्टनाम के साथ। आप इसके बजाय एक अलग पोर्ट का उपयोग कर सकते हैं 45454

यहाँ वास्तव में क्या हो रहा है कि 'प्राप्त करने वाला' कंप्यूटर 45454 पोर्ट पर भेजने वाले कंप्यूटर से जुड़ रहा है और निर्देशिका के टैरिड और gzip'd सामग्री प्राप्त कर रहा है, और इसे निकालने के लिए सीधे टार (और gzip) में जा रहा है। वर्तमान निर्देशिका।

त्वरित उदाहरण (दूरस्थ होस्ट के रूप में लोकलहोस्ट का उपयोग करके)

कंप्यूटर 1

caspar@jumpy:~/nctest/a/mydir$ ls
file_a.txt  file_b.log
caspar@jumpy:~/nctest/a/mydir$ tar -cz . | nc -q 10 -l -p 45454

कंप्यूटर 2

caspar@jumpy:~/nctest/b$ ls
caspar@jumpy:~/nctest/b$ nc -w 10 localhost 45454 | tar -xz
caspar@jumpy:~/nctest/b$ ls
file_a.txt  file_b.log

थोड़े पुराने दिनों की नोवेल की आईपीएक्स सेवाओं से मुझे सेंडनेट और रीकनेट की याद दिलाता है ...
sum1stolemyname

4
## netcat + bzip2 धीमे कनेक्शन पर थोड़ा तेज हो सकता है ## सर्वर भेजना # बिल्ली file.txt | bzip2 -c | nc -l 1234 ## सर्वर प्राप्त करना # nc $ send_ip 1234 | bzip2 -cd> file.txt
shantanuo

@ कैस्पर: bzip2 या lzma संपीड़न का सुझाव देने के लिए इस उत्तर को संपादित करने के बारे में कैसे?
einpoklum

4
-qविकल्प इंगित करता है कि आप उपयोग कर रहे OpenBSD-netcat , जबकि gnu-netcat भी काफी आम (में डिफ़ॉल्ट है आर्क लिनक्स )। क्या आप अपने जवाब को ग्नू-नेटकैट के सिंटैक्स को शामिल करने के लिए बढ़ा सकते हैं ?
सेबस्टियन

1
-L विकल्प के बारे में वर्तमान nc आदमी कहता है: "-p, -s, या -z विकल्प के साथ संयोजन में इस विकल्प का उपयोग करने के लिए एक त्रुटि है", लेकिन अजीब तरह से इसका उपयोग करते समय कोई त्रुटि नहीं होती है। मुझे लगता है कि 'nc -l 45454' के प्रयोग से भी काम करना चाहिए।
क्लाउडीयू

19

एक समय की चाल के लिए, scp की सिफारिश की जाती है।

लेकिन अगर आप पाते हैं कि यह डायर काम कर सकता है और आपको दूसरी स्थिति को अपडेट रखने के लिए इसे कई बार स्थानांतरित करने की आवश्यकता है तो आप rsync (ssh के साथ) का उपयोग कर सकते हैं।

चूंकि rsync के पास बहुत सारे तर्क हैं इसलिए मैं इसे आमतौर पर एक छोटे से खोल में रखता हूं इसलिए मुझे यह सही (हर बार) मिलता है। विचार केवल उन चीजों को भेजने का है जो पिछली बार के बाद से बदल गए हैं।

#!/bin/bash

user="nisse"
host="192.168.0.33"

echo "Sync: /home/media/music/"
rsync --archive --delete -v --progress -e "ssh -l $user " /home/media/music/ $host:/home/media/music/

यह स्थानीय कंप्यूटर से पीसी पर 192.168.0.33 नामक उपयोगकर्ता के "nisse" का उपयोग करके "/ होम / मीडिया / संगीत /" नामक एक डीआईआर को स्थानांतरित करेगा। और स्थानीय पीसी पर मौजूद टारगेट पर कुछ भी डिलीट न करें।


1
+ के लिए rsync, जो तेजी से एक बालक लगता है और अगर आपको निर्देशिका को बाद में सिंक करना है तो बहुत अच्छा है
Wiesław Herr

यह बहुत ही आशाजनक (और आसानी से पुन: प्रयोज्य) लगता है, लेकिन मुझे रिक्त स्थान और फाइलें मिल गई हैं और मैं rsync त्रुटि प्राप्त कर रहा हूं : वाक्यविन्यास या उपयोग की त्रुटि (कोड 1) main.c (1348) [प्रेषक = 3.1.1] - - कोई सुझाव?
तोरबेन गुंडोफ़्टे-ब्रून

8

मैं आपको अपने स्वयं के LAN के अंदर फ़ाइलों को स्थानांतरित करने के लिए SSH के साथ सीधे जाने के बजाय विकल्प चुनने की सलाह दूंगा क्योंकि ओवरहेड IMMENSE है। अगर यह आपके लिए काम नहीं करेगा तो मैं कैस्पर के समाधान के साथ जाऊंगा:

स्रोत पर:

$ python3 -m http.server {PICK_YOUR_PORT}

गंतव्य पर:

$ wget -r {ip / hostname}:{port}/{File / Directory}

यह केवल SSH का उपयोग करने की तुलना में हल्का नहीं होगा, लेकिन मानक CAT6 UTP पर 45 ~ 65MiB की गति के साथ बहुत तेज होगा।
यदि आप वास्तव में कनेक्शन का सबसे अधिक निचोड़ना चाहते हैं, तो इसके wgetसाथ lftpऔर प्रयोग करके pget -n20और mirror -rआदेशों को बदलने का प्रयास करें ।


7

सबसे तेज़ शायद netcat(जैसा कि केसपर वर्णित है)।

मुझे tar& का संयोजन पसंद है ssh, जो सुरक्षित है और अभी भी तेज है:

स्रोत पर

tar -cf - . | ( ssh user@target && cd /target/path && tar -xf - )

इसे रूट के रूप में करते हुए, यह फ़ाइल अनुमतियों को संरक्षित करता है। या -pदोनों तरफ से इस्तेमाल करें । इसके अलावा -Sआप स्पार्स फ़ाइलों अगर माना जा सकता है।

sshयदि आप arcfourसाइपर के रूप में उपयोग करते हैं, जो ओपनएसएसएच के साथ काम करता है , तो एन्क्रिप्शन ओवरहेड को कम करना संभव है :

tar -cpSf - . | ( ssh -c arcfour user@targethost && cd /target/path && tar -xpSf - )

दूरस्थ पथ को अद्यतन करने के लिए, rsyncएकदम सही है:

rsync -av --sparse --delete -e "ssh -c arcfour" . root@targethost:/target/path

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

4

अगर यह पूरी तरह से लैन पर किया जाना है, तो मैं इसका उपयोग rsyncकरूंगा, क्योंकि अगर यह बाधित हो जाता है तो इसे छोड़ दिया जाएगा। इसमें डेटा की मात्रा को कम करने के लिए कुछ अन्य तरकीबें भी हैं, जो स्थानांतरित हो जाती हैं, हालांकि मुझे संदेह है कि उनमें से कई / किसी भी संगीत लाइब्रेरी को एक कुंवारी स्थान पर कॉपी करने के मामले के लिए प्रासंगिक होगा। यदि सुरक्षा एक चिंता है, तो बस RSYNC_RSH=sshपहले सेट करें और डेटा को ssh पर टनल किया जाएगा।

अगर मैं वास्तव में यह कर रहा था, हालांकि, मैं शायद लैन का उपयोग बिल्कुल नहीं करूंगा। मैं फ़ाइलों की प्रतिलिपि बनाऊंगा, फिर ऑफ, एक यूएसबी हार्ड ड्राइव। मेरे अनुभव में, यह आसानी से लैन पर जाने से अधिक परिमाण के कई ऑर्डर हो सकते हैं, दो बार फाइलों को कॉपी करने के बावजूद - USB 2.0 को 480Mbps के लिए रेट किया गया है, जो कि गीगाबिट ईथरनेट की तुलना में कुछ कम तेज है, साथ ही यह परिस्थितियों के प्रति कम संवेदनशील है जो एक लैन के प्रदर्शन को नीचा दिखाएगा। यह पूरी तरह से ओएस-इंडिपेंडेंट है, बशर्ते आप एक फाइल सिस्टम का उपयोग करें, जिसमें सभी शामिल मशीनें संभाल सकती हैं - मैं VFAT / FAT32 की सिफारिश करूंगा, क्योंकि यह बहुत सार्वभौमिक है।


1
मैं भी (तथाकथित) स्नीकरनेट का प्रशंसक हूं, लेकिन यह इंगित करने योग्य है कि USB 2 को 480Mbps प्राप्त करने में सक्षम माना जाता है, मैंने केवल इसे 30MB / s (लगभग 240Mbps) प्राप्त किया है। , शायद मेरे पास सस्ते USB <-> SATA हार्डवेयर;) भी है, FAT32 बहुत अधिक सार्वभौमिक है, लेकिन 4gb फ़ाइलों की कमी के कारण डीवीडी छवियों जैसी चीजों को कॉपी करने के लिए एक नो-गो है; यह इंगित करने के लायक है ताकि लोग "आउट ऑफ स्पेस" त्रुटि संदेश से बहुत निराश न हों जो विंडोज (कम से कम) देता है।
कैस्पर

@ कैस्पर: गुड कैविट्स! उनका उल्लेख करने के लिए धन्यवाद; मैं हमेशा FAT32 फ़ाइल आकार सीमा के बारे में भूल जाता हूं ...
डेव शेरोहमान

2

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


1

मैं यूनिसन का उपयोग करता हूं , जो कई अलग-अलग प्रोटोकॉल पर एक भयानक फ़ाइल सिंक्रोनाइज़र है। आप इसे उपयोग करने के लिए कॉन्फ़िगर कर सकते हैं scp, rcp, ftpदो फ़ोल्डर्स के बीच फाइल सिस्टम पर या यहाँ तक कि स्थानीय स्तर पर। मैं इसका उपयोग अपने संगीत पुस्तकालय को सिंक्रनाइज़ करने के लिए करता हूं, क्योंकि यह नेटवर्क पर एक साथ कई फ़ाइलों को स्थानांतरित कर सकता है और वास्तव में इसके कॉन्फ़िगरेशन में ट्यून करने योग्य है। मैं अपने संगीत संग्रह को बैकअप रखता हूं और 2-3 कंप्यूटरों पर सिंक करता हूं। यह केवल परिवर्तित फ़ाइलों की प्रतिलिपि करेगा, और ऐसा स्थानांतरण के दोनों सिरों पर एक सूचकांक रखकर करता है ताकि यह बता सके कि क्लाइंट ने फ़ाइल को कब बदला है या सर्वर फ़ाइल को कब बदला है।

आपका माइलेज अलग-अलग हो सकता है, लेकिन scpजब भी आप एक नया गीत जोड़ते हैं, तो यह निश्चित रूप से आपके संपूर्ण संगीत संग्रह से बहुत बेहतर होता है :)


0

मैंने पहले पासवर्ड रहित लॉगिन के लिए ssh प्रक्रिया का पालन किया

स्क्रिप्ट और टेक्स्ट फाइल के लिए मेरे लिए निम्न कार्य ठीक हैं

स्थानीय होस्ट से दूरस्थ होस्ट तक डेटा स्थानांतरित करने के लिए। cat localfile | ssh <user>@<ip> "cat > <path>/<remotefile>"

दूरस्थ होस्ट से स्थानीय होस्ट तक डेटा स्थानांतरित करने के लिए। ssh <user>@<ip> "cat > <path>/<remotefile>" | cat > localfile

यह मेरे लिए एम्बेडेड सिस्टम पर फाइल ट्रांसफर करने के लिए काम करता है जिसमें ssh क्लाइंट या scp बिल्ट नहीं है।

कोई scp - केवल ssh

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