In un ambiente Linux, sia per la sicurezza che per la facilità d'uso, ssh è la soluzione migliore. SSH, SSHFS, SCP e SFTP come elenchi sono solo servizi diversi basati sul protocollo SSH. SCP è molto facile da usare, funziona proprio come CP ma puoi fornire nomi di utenti e macchine nel percorso. Quindi, potremmo fare un CP come cp ~/music/ ~/newmusic/
, ma potremmo fare altrettanto facilmente scp ~/music/ [email protected]:~/newmusic
per inviarlo al computer denominato host. Ecco fatto:non abbiamo bisogno di impostare nulla. Ti verrà richiesta la password dell'account sull'altra macchina se non hai impostato un certificato o qualche altra autenticazione (scp condivide queste impostazioni con ssh, ovviamente).
SFTP è uno strumento che semplifica l'esecuzione di molte operazioni su un file system remoto:funziona proprio come FTP, ma funziona tramite SSH, quindi è sicuro e richiede solo un server SSH. man sftp
ti 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 riordinando i file su un altro computer.
SSHFS estende semplicemente SFTP a un file system:ti consente di montare un host virtuale nel tuo file system, quindi le cose di rete avvengono in modo totalmente trasparente. SSHFS è per configurazioni semi-permanenti, non solo per un trasferimento di file una tantum. Ci vuole qualche sforzo in più per essere configurato, di cui puoi leggere sul sito web del progetto.
Se hai bisogno di lavorare in un ambiente con sistema operativo misto, Samba diventa la tua prossima migliore scommessa. Windows e OS X supportano Samba in modo completamente automatico, e anche Linux lo fa, anche se a volte è difficile da usare.
Il mio preferito per i casi in cui la sicurezza non ha importanza è netcat + tar:
Per inviare una directory, cd all'interno della directory di cui si desidera inviare il contenuto sul computer che esegue l'invio e fare:
tar -cz . | nc -q 10 -l -p 45454
Sul computer che riceve i contenuti, cd nel punto in cui vuoi che appaiano i contenuti e fai:
nc -w 10 $REMOTE_HOST 45454 | tar -xz
Sostituisci $REMOTE_HOST
con ip / nome host del computer che esegue l'invio. Puoi anche usare una porta diversa invece di 45454
.
Quello che sta realmente accadendo qui è che il computer "ricevente" si connette al computer mittente sulla porta 45454 e riceve i contenuti tar'd e gzip'd della directory, e li passa direttamente a tar (e gzip) per estrarli in la directory corrente.
Esempio rapido (utilizzando localhost come host remoto)
Computer 1
[email protected]:~/nctest/a/mydir$ ls
file_a.txt file_b.log
[email protected]:~/nctest/a/mydir$ tar -cz . | nc -q 10 -l -p 45454
Computer 2
[email protected]:~/nctest/b$ ls
[email protected]:~/nctest/b$ nc -w 10 localhost 45454 | tar -xz
[email protected]:~/nctest/b$ ls
file_a.txt file_b.log
Per le mosse singole, si consiglia scp.
Ma se scopri che questa directory potrebbe funzionare e devi spostarla molte volte per mantenere aggiornata l'altra posizione, puoi usare rsync (con ssh).
Dato che rsync ha molti argomenti, di solito lo inserisco in una piccola shell, quindi lo capisco 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 directory chiamata "/home/media/music/" dal computer locale al pc chiamato 192.168.0.33, usando l'utente "nisse". Ed elimina qualsiasi cosa sulla destinazione che non esiste sul pc locale.