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

Il modo migliore per trasferire file su una LAN tra due computer Linux

Voglio trasferire file (una cartella di musica) tra due computer Linux. Dopo aver cercato il modo migliore per farlo, ho visto che ci sono molti modi per farlo. So che questo è stato chiesto molto, ovunque e tutto il tempo. Il problema principale è che non c'è un chiaro e recente consenso su un modo migliore per fare questo compito nel 2011 per i principianti di Linux (anche a seconda di alcuni parametri).

Quindi, nello spirito dei siti Stack Exchange, voglio che questo non sia legato alla mia particolare situazione, ma più una guida anche per gli altri su come trasferire file tra due computer Linux su una rete locale. Penso che un wiki sarebbe utile per molti.

Ecco cosa ho trovato finora:

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

Qual è il più facile? Più flessibile? Il più semplice? La soluzione migliore? Quali sono i pro e i contro di ciascuna? Ci sono altre opzioni (migliori)? Quali sono i parametri per scegliere il metodo migliore (la soluzione potrebbe dipendere dal numero di file, dalla dimensione dei file, dalla facilità rispetto alla flessibilità, …)?

Risposte (7)

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

In un ambiente Linux, sia per la sicurezza che per la facilità d'uso, ssh è il modo migliore per andare. SSH, SSHFS, SCP e SFTP, come elencate, sono tutti servizi diversi costruiti sopra il protocollo SSH. SCP è molto facile da usare, funziona proprio come CP ma si possono fornire nomi di utenti e macchine nel percorso. Così, potremmo fare un CP come cp ~/music/ ~/newmusic/, ma potremmo altrettanto facilmente fare scp ~/music/ user@host:~/newmusic per inviarlo al computer chiamato host. Questo è tutto - non abbiamo bisogno di impostare nulla. Vi verrà richiesta la password dell'account sull'altra macchina se non avete un certificato o qualche altra autenticazione impostata (scp condivide queste impostazioni con ssh, ovviamente).

SFTP è uno strumento che rende facile fare molte operazioni su un file system remoto - funziona proprio come FTP, ma funziona attraverso SSH quindi è sicuro e richiede solo un server SSH. man sftp vi dirà tutto su come usarlo. Non uso SFTP solo per spostare una cartella tra due macchine, è più utile quando hai molte operazioni da fare, come se stai riorganizzando dei file su un altro computer.

SSHFS estende SFTP a un file system: ti permette di montare un host virtuale nel tuo file system, così le operazioni di rete avvengono in modo totalmente trasparente. SSHFS è per configurazioni semi-permanenti, non solo per un trasferimento di file una tantum. Richiede un po’ più di sforzo per essere impostato, cosa che si può leggere su il sito web del progetto .

Se hai bisogno di lavorare in un ambiente misto-OS, Samba diventa la tua prossima migliore scelta. Windows e OS X supportano Samba in modo completamente automatico, e anche Linux lo fa, anche se a volte è difficile da usare.

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

Per spostamenti una tantum, si raccomanda scp.

Ma se trovate che questa dir può funzionare e avete bisogno di spostarla molte volte per mantenere aggiornata l'altra posizione allora potete usare rsync (con ssh).

Dato che rsync ha un sacco di argomenti di solito lo metto in una piccola shell in modo da farlo bene (ogni volta). L'idea è di inviare solo le cose che sono cambiate dall'ultima volta che è stato eseguito.

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

Questo sposterà una cartella chiamata “/home/media/music/” dal computer locale al pc chiamato 192.168.0.33, usando l'utente “nisse”. E cancellerà qualsiasi cosa sulla destinazione che non esiste sul pc locale.

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

Vi raccomanderei di provare delle alternative invece di andare direttamente con SSH per spostare i file all'interno della vostra LAN, poiché l'overhead è IMMENSO. Andrei con la soluzione di Caspar se questa, per qualsiasi motivo, non funziona per voi:

Alla fonte:

$ python3 -m http.server {PICK_YOUR_PORT}

Sulla destinazione:

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

Questo non solo sarà più leggero che usare SSH ma molto più veloce con velocità che vanno da 45~65MiB su CAT6 UTP standard.
Se volete davvero spremere il massimo dalla connessione provate a sostituire wget con lftp e ad usare i comandi pget -n20 e mirror -r.

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

Il più veloce è probabilmente netcat (come descritto da caspar).

Mi piace la combinazione di tar & ssh, che è sicura e ancora veloce:

Sul sorgente

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

Facendolo come root, conserva i permessi dei file. Oppure usate -p su entrambi i lati. Anche -S potrebbe essere considerato se avete file sparsi.

È possibile ridurre l'overhead di cifratura di ssh se si usa arcfour come cifratore che funziona con openSSH:

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

Per aggiornare il percorso remoto, rsync è perfetto:

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

Se deve assolutamente essere fatto sulla LAN, userei rsync, dato che riprenderà da dove si è interrotto se viene interrotto. Ha anche alcuni altri trucchi per minimizzare la quantità di dati che vengono trasferiti, anche se dubito che molti/qualsiasi di essi sarebbero rilevanti nel caso della copia di una libreria musicale in una posizione vergine. Se la sicurezza è una preoccupazione, basta impostare prima RSYNC_RSH=ssh e i dati saranno trasmessi via ssh.

Se lo facessi davvero, però, probabilmente non userei affatto la LAN. Copierei i file su, e poi fuori da, un disco rigido USB. Nella mia esperienza, questo può facilmente essere più ordini di grandezza più veloce che andare sulla LAN, nonostante si debbano copiare i file due volte - l'USB 2.0 è valutato per 480Mbps, che è più veloce di qualsiasi cosa a corto di gigabit ethernet, inoltre è meno sensibile alle condizioni che degradano le prestazioni di una LAN. È anche completamente indipendente dal sistema operativo, a condizione che si usi un file system che tutte le macchine coinvolte possano gestire - io raccomanderei VFAT/FAT32, dato che è praticamente universale.

2
2
2
2011-08-22 09:03:18 +0000
0
0
0
2016-04-14 20:18:21 +0000

Ho seguito il processo ssh per il login senza password prima http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/

Per gli script e i file di testo il seguente funziona bene per me

Per trasferire dati dall'host locale all'host remoto.cat localfile | ssh <user>@<ip> "cat > <path>/<remotefile>"

Per trasferire dati dall'host remoto all'host locale.ssh <user>@<ip> "cat > <path>/<remotefile>" | cat > localfile

Questo funziona per me per trasferire file su sistemi embedded che non hanno client ssh o scp integrati.

Niente scp - solo ssh.