Il protocollo FTP (File Transfer Protocol) è uno dei metodi più comuni per trasferire file tra computer attraverso una rete, in particolare tra client e server. Sebbene FTP sia un protocollo piuttosto datato e non sicuro (in quanto trasmette le informazioni in chiaro), rimane ancora ampiamente utilizzato in diversi contesti. In questo articolo, vedremo come trasferire una directory completa da un sistema locale a un server remoto utilizzando FTP in uno script Bash. Per raggiungere questo obiettivo, utilizzeremo sia comandi FTP nativi che alcune alternative più sicure e moderne come lftp.
FTP è un protocollo che permette di trasferire file da e verso un server remoto. Tuttavia, la sua interfaccia di base non supporta direttamente la copia ricorsiva di directory. Per trasferire un'intera directory, dobbiamo prima comprimerla in un archivio, trasferire l'archivio e successivamente decomprimerlo sul server remoto.
Per trasferire una directory completa, è meglio comprimerla in un file .tar.gz
o .zip
. Ecco un esempio che utilizza tar
:
#!/bin/bash
# Variabili
HOST="ftp.example.com"
USER="tuo_nome_utente"
PASSWORD="tua_password"
LOCAL_DIR="/percorso/della/directory/locale"
REMOTE_DIR="/percorso/della/directory/remota"
ARCHIVE_NAME="backup_directory.tar.gz"
# Comprimi la directory
tar -czf $ARCHIVE_NAME -C $LOCAL_DIR .
# Apri la connessione FTP e trasferisci il file
ftp -inv $HOST << EOF
user $USER $PASSWORD
cd $REMOTE_DIR
put $ARCHIVE_NAME
bye
EOF
# Rimuovi l'archivio locale se non più necessario
rm $ARCHIVE_NAME
Spiegazione del codice:
- Comprimi la directory: Il comando
tar -czvf
crea un archivio compresso della directory specificata. - Apertura della connessione FTP: Il comando
ftp -inv
apre una sessione FTP in modalità batch. Le opzioni utilizzate sono:-i
: Disabilita le richieste interattive durante i trasferimenti multipli di file.-n
: Non tenta di fare login automatico.-v
: Modalità verbosa, per vedere cosa accade durante il trasferimento.
- Autenticazione e trasferimento: I comandi all'interno del blocco
<< EOF
sono passati al client FTP. Il comandoput
carica l'archivio sul server remoto. - Rimozione dell'archivio locale: Dopo che il file è stato trasferito, l'archivio locale può essere eliminato.
Sebbene il metodo con FTP standard funzioni, è più efficiente utilizzare un client FTP avanzato come lftp
per trasferire intere directory senza doverle comprimere.
lftp
supporta il trasferimento ricorsivo delle directory, rendendo il processo più semplice. Ecco uno script di esempio:
#!/bin/bash
# Variabili
HOST="ftp.example.com"
USER="tuo_nome_utente"
PASSWORD="tua_password"
LOCAL_DIR="/percorso/della/directory/locale"
REMOTE_DIR="/percorso/della/directory/remota"
# Eseguire il trasferimento ricorsivo
lftp -u $USER,$PASSWORD $HOST << EOF
mirror -R $LOCAL_DIR $REMOTE_DIR
bye
EOF
Spiegazione del codice:
- Comando
mirror
: Questo comando inlftp
permette di trasferire intere directory.-R
: Indica che il trasferimento è dal sistema locale al server remoto (upload). Senza questa opzione, il trasferimento sarebbe dal server al locale (download).
- Autenticazione: Avviene tramite il comando
-u $USER,$PASSWORD
.
FTPS aggiunge uno strato di sicurezza tramite SSL/TLS. Ecco come eseguire un trasferimento sicuro con FTPS utilizzando lftp
:
#!/bin/bash
# Variabili
HOST="ftp.example.com"
USER="tuo_nome_utente"
PASSWORD="tua_password"
LOCAL_DIR="/percorso/della/directory/locale"
REMOTE_DIR="/percorso/della/directory/remota"
# Eseguire il trasferimento FTPS ricorsivo
lftp -e "set ftp:ssl-allow yes" -u $USER,$PASSWORD ftps://$HOST << EOF
mirror -R $LOCAL_DIR $REMOTE_DIR
bye
EOF
Se avete accesso SSH al server remoto, SFTP è un'opzione molto più sicura. Ecco uno script di esempio con sftp
:
#!/bin/bash
# Variabili
HOST="example.com"
USER="tuo_nome_utente"
LOCAL_DIR="/percorso/della/directory/locale"
REMOTE_DIR="/percorso/della/directory/remota"
# Eseguire il trasferimento SFTP ricorsivo
sftp -r $USER@$HOST << EOF
put -r $LOCAL_DIR $REMOTE_DIR
bye
EOF
Spiegazione del codice:
-r
: Opzione per il trasferimento ricorsivo delle directory.- Sicurezza: SFTP utilizza il protocollo SSH, quindi è crittografato.
Conclusione
In questo articolo abbiamo esplorato diversi metodi per trasferire una directory da un sistema locale a un server remoto tramite FTP utilizzando Bash. Abbiamo visto come comprimere una directory e trasferirla con FTP standard, come utilizzare il più efficiente lftp
per il trasferimento ricorsivo, e come migliorare la sicurezza utilizzando FTPS o SFTP. Anche se FTP è ancora ampiamente utilizzato, è sempre meglio optare per protocolli più sicuri, come FTPS o SFTP, per proteggere i dati trasferiti.