2011-08-22 04:12:04 +0000 2011-08-22 04:12:04 +0000
81
81

Beste manier om bestanden over een LAN tussen twee Linux computers over te zetten

Ik wil bestanden (een muziekmap) overzetten tussen twee Linux computers. Na het zoeken naar de beste manier om dit te doen, heb ik gezien dat er veel manieren zijn om dit te doen. Ik weet dat dit al veel gevraagd is, overal en altijd. Het grootste probleem hiermee is dat er geen duidelijke, recente consensus is over één beste manier om deze taak in 2011 voor Linux beginners uit te voeren (zelfs afhankelijk van sommige parameters).

Dus in de geest van de Stack Exchange websites, wil ik dat dit niet gerelateerd is aan mijn specifieke situatie, maar meer een gids is voor anderen over hoe je bestanden kunt overzetten tussen twee Linux computers over een lokaal netwerk. Ik denk dat een wiki voor velen nuttig zou zijn.

Hier is wat ik tot nu toe gevonden heb:

  • ssh
  • sshfs
  • scp
  • sftp
  • nfs
  • samba
  • giver

Wat is het gemakkelijkst? Meest flexibel? Het eenvoudigst? Beste oplossing? Wat zijn de voor- en nadelen van elk? Zijn er andere (betere) opties? Wat zijn de parameters bij het kiezen van de beste methode (de oplossing kan afhangen van het aantal bestanden, de bestandsgrootte, de eenvoud versus de flexibiliteit, …)?

Antwoorden (6)

66
66
66
2011-08-22 04:35:30 +0000

In een Linux omgeving, voor zowel veiligheid als gebruiksgemak, is ssh de beste manier om te gaan. SSH, SSHFS, SCP, en SFTP zoals je opsomt zijn allemaal verschillende diensten die bovenop het SSH protocol gebouwd zijn. SCP is heel eenvoudig te gebruiken, het werkt net als CP maar je kunt gebruikers- en machinenamen opgeven in het pad. Dus, we zouden een CP kunnen doen als cp ~/music/ ~/newmusic/, maar we zouden net zo makkelijk scp ~/music/ user@host:~/newmusic kunnen doen om het naar de computer genaamd host te sturen. Dat is het - we hoeven niets in te stellen. U wordt gevraagd om het wachtwoord van de account op de andere machine als u geen certificaat of andere authenticatie heeft ingesteld (scp deelt deze instellingen met ssh, natuurlijk).

SFTP is een programma dat het gemakkelijk maakt om een heleboel bewerkingen op een bestandssysteem op afstand uit te voeren - het werkt net als FTP, maar het loopt via SSH, dus het is veilig en er is alleen een SSH server voor nodig. man sftp zal je alles vertellen over hoe het te gebruiken. Ik gebruik SFTP niet alleen om een map tussen twee machines te verplaatsen, het is nuttiger als je veel handelingen moet verrichten, zoals het herschikken van bestanden op een andere computer.

SSHFS breidt SFTP uit naar een bestandssysteem: het stelt je in staat om een virtuele host in je bestandssysteem te mounten, zodat het netwerkgedoe geheel transparant gebeurt. SSHFS is voor semi-permanente opstellingen, niet voor een eenmalige bestandsoverdracht. Het kost wat meer moeite om het op te zetten, waarover je kunt lezen op de project website .

Als je in een mixed-OS omgeving moet werken, wordt Samba je volgende beste gok. Windows en OS X ondersteunen Samba volledig automatisch, en Linux doet dat ook, hoewel het soms lastig te gebruiken is.

19
19
19
2011-08-22 06:49:45 +0000

Voor eenmalige verplaatsingen wordt scp aanbevolen.

Maar als je vindt dat dit dir kan werken en je moet het vele malen verplaatsen om de andere positie bijgewerkt te houden dan kun je rsync gebruiken (met ssh).

Omdat rsync veel argumenten heeft zet ik het meestal in een kleine shell zodat ik het (iedere keer) goed krijg. Het idee is om alleen dingen te versturen die veranderd zijn sinds de laatste keer dat het liep.

#!/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/

Dit zal een dir genaamd “/home/media/music/” verplaatsen van de lokale computer naar de pc genaamd 192.168.0.33, met gebruiker “nisse”. En verwijder alles op het doel dat niet bestaat op de lokale pc.

10
10
10
2014-04-27 06:30:49 +0000

Ik zou je aanraden om alternatieven te proberen in plaats van rechtstreeks SSH te gebruiken voor het verplaatsen van bestanden binnen je eigen LAN, aangezien de overhead ONMENSE is. Ik zou voor Caspar’s oplossing gaan als deze om wat voor reden dan ook niet werkt voor jou:

Bij de bron:

$ python3 -m http.server {PICK_YOUR_PORT}

Op bestemming:

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

Dit is niet alleen lichter dan het gebruik van SSH, maar ook veel sneller met snelheden variërend van 45~65MiB op standaard CAT6 UTP.
Als je echt het maximale uit de verbinding wilt halen probeer dan wget te vervangen door lftp en gebruik de commando’s pget -n20 en mirror -r.

8
8
8
2011-08-22 08:57:03 +0000

Het snelste is waarschijnlijk netcat (zoals caspar beschreef).

Ik hou van de combinatie van tar & ssh, die veilig en toch snel is:

Op de bron

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

Als je dat als root doet, behoudt het de bestandspermissies. Of gebruik -p aan beide kanten. Ook -S kan overwogen worden als je sparse bestanden hebt.

Het is mogelijk om de encryptie overhead van ssh te verminderen als je arcfour gebruikt als cipher die werkt met openSSH:

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

Om het remote pad te updaten, is rsync perfect:

rsync -av --sparse --delete -e "ssh -c arcfour" . root@targethost:/target/path
5
5
5
2011-08-22 10:00:32 +0000

Als het absoluut over het LAN moet gebeuren, zou ik rsync gebruiken, omdat het verder gaat waar het gebleven was als het onderbroken wordt. Het heeft ook een paar andere trucs om de hoeveelheid data die wordt overgebracht te minimaliseren, hoewel ik betwijfel of veel of weinig daarvan relevant zouden zijn in het geval van het kopiëren van een muziekbibliotheek naar een maagdelijke locatie. Als veiligheid een zorg is, stel dan eerst RSYNC_RSH=ssh in en de gegevens worden getunneld over ssh.

Als ik het echt zou doen, zou ik waarschijnlijk het LAN helemaal niet gebruiken. Ik zou de bestanden kopiëren naar, en dan van, een USB harde schijf. Mijn ervaring is dat dit gemakkelijk meerdere orden van grootte sneller kan zijn dan via het LAN, ondanks dat de bestanden twee keer gekopieerd moeten worden - USB 2.0 is geschikt voor 480Mbps, wat sneller is dan alles behalve gigabit ethernet, plus het is minder gevoelig voor omstandigheden die de prestaties van een LAN zullen verminderen. Het is ook volledig OS-onafhankelijk, mits je een bestandssysteem gebruikt dat alle betrokken machines aankunnen - ik zou VFAT/FAT32 aanraden, aangezien dat vrijwel universeel is.

0
0
0
2016-04-14 20:18:21 +0000

Ik heb eerst het ssh proces gevolgd voor inloggen zonder wachtwoord http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/

Voor scripts en tekstbestanden werkt het volgende voor mij prima

Om gegevens van de lokale host naar de host op afstand over te brengen.cat localfile | ssh <user>@<ip> "cat > <path>/<remotefile>"

Om gegevens van de host op afstand naar de lokale host over te brengen.ssh <user>@<ip> "cat > <path>/<remotefile>" | cat > localfile

Dit werkt voor mij om bestanden over te brengen op embedded systemen die geen ssh client of scp ingebouwd hebben.

Geen scp - alleen ssh.