Come Trasferire File in Sicurezza Usando SCP e SFTP con SSH

Trasferisci file in modo sicuro con SCP e SFTP su SSH, inclusi comandi pratici, autenticazione tramite chiave e controlli di accesso lato server più sicuri.

Come Trasferire File in Modo Sicuro Usando SCP e SFTP con SSH

Trasferire file tra sistemi locali e remoti è un requisito fondamentale dell'amministrazione di sistema e dello sviluppo. Tuttavia, l'uso di protocolli non crittografati come FTP standard o comandi R espone i dati sensibili a intercettazioni e attacchi. Il protocollo Secure Shell (SSH) fornisce due metodi robusti e crittografati per il trasferimento di file: il Secure Copy Protocol (SCP) e l'SSH File Transfer Protocol (SFTP).

Questa guida spiega quando usare SCP, quando usare SFTP e come evitare gli errori comuni che rendono il trasferimento sicuro dei file meno sicuro nella pratica.

Comprendere le Basi: SSH

Sia SCP che SFTP utilizzano SSH (tipicamente in esecuzione sulla porta 22) come livello di trasporto sottostante. Quando si avvia un trasferimento utilizzando uno dei due protocolli, SSH stabilisce prima un tunnel sicuro e crittografato tra il client e il server. Tutti i dati, inclusi i credential di autenticazione e il contenuto dei file, vengono trasmessi attraverso questo tunnel, rendendo entrambi i metodi alternative altamente sicure ai protocolli di trasferimento file legacy.

Caratteristiche chiave fornite dalla base SSH:

  • Crittografia: Tutti i dati sono crittografati end-to-end.
  • Autenticazione: Supporta sia l'autenticazione tramite password che quella molto più sicura tramite coppia di chiavi pubblica/privata.
  • Integrità: Utilizza hashing crittografico per garantire che i file non vengano alterati durante il trasferimento.

Secure Copy Protocol (SCP)

SCP è un protocollo di rete basato sul protocollo di copia remota (rcp) ma avvolto con la sicurezza di SSH. È progettato per semplicità e velocità, rendendolo ideale per trasferimenti rapidi e non interattivi, specialmente in scripting o automazione.

Caratteristiche e Proprietà di SCP

  1. Semplicità: Utilizza una sintassi molto simile al comando Unix standard cp.
  2. Velocità: Spesso veloce per copie singole semplici, anche se le prestazioni dipendono dall'implementazione SSH, dal cifrario, dalla rete e dal set di file.
  3. Non Interattivo: Una volta avviato, il trasferimento viene eseguito fino al completamento senza la possibilità di gestire la sessione o interrompere lo stato del trasferimento.

Comandi Pratici di SCP

La sintassi generale per SCP è scp [opzioni] [sorgente] [destinazione].

1. Copiare un File dal Sistema Locale al Server Remoto

Per inviare un file locale nella home directory di un utente remoto:

scp /path/to/local/file.txt user@remote_host:/home/user/destination/

2. Copiare un File dal Sistema Remoto a Quello Locale

Per prelevare un file dal server nella directory corrente:

scp user@remote_host:/var/log/system.log . 
# Nota: Il '.' indica la directory locale corrente

3. Copiare un'Intera Directory (Ricorsiva)

Usa il flag -r (ricorsivo) per copiare directory e tutto il loro contenuto:

scp -r /path/to/local/folder/ user@remote_host:/data/backups/

4. Specificare una Porta Non Standard

Se il demone SSH è in esecuzione su una porta diversa dalla 22, usa il flag -P (nota la P maiuscola):

scp -P 2222 local_file.zip user@remote_host:/tmp/

Nota su SCP: Il comportamento tradizionale del protocollo SCP ha una storia di rischi nella gestione di nomi di file e percorsi. Alcuni client OpenSSH moderni usano SFTP internamente per scp per impostazione predefinita, ma non tutti i client o server si comportano allo stesso modo. Per nuovi flussi di lavoro, preferisci SFTP o rsync su SSH a meno che non sia specificamente necessaria la compatibilità con SCP.

SSH File Transfer Protocol (SFTP)

SFTP è un sottosistema di SSH che fornisce un ambiente interattivo più ricco per la gestione dei file. A differenza di SCP, che è puramente uno strumento di copia, SFTP è un protocollo con stato che consente l'elenco, l'eliminazione, la ridenominazione e la creazione di directory attraverso la stessa connessione protetta da SSH.

Caratteristiche e Proprietà di SFTP

  1. Sessione Interattiva: I trasferimenti avvengono all'interno di una sessione shell interattiva dedicata.
  2. Robustezza: Supporta la ricerca, la ripresa e la gestione di singoli trasferimenti all'interno della sessione.
  3. Gestione Completa: Consente di elencare (ls), cambiare directory (cd) e manipolare file remoti e locali utilizzando comandi di sessione (put, get, lcd, lmkdir).
  4. Sicurezza: Utilizza SSH per il trasporto ed è la scelta predefinita migliore per i trasferimenti interattivi moderni.

Comandi Pratici di SFTP

1. Avviare una Connessione SFTP

Avvia una sessione interattiva verso il server remoto:

sftp user@remote_host

Se si utilizza una porta specifica:

sftp -P 2222 user@remote_host

2. Comandi Interattivi di SFTP

Una volta connessi, si opera nell'ambiente remoto per impostazione predefinita. Usa i comandi per gestire trasferimenti e directory:

Comando Descrizione Esempio
ls Elenca file remoti ls -l
cd Cambia directory remota cd /var/www/html
put Carica file (Locale a Remoto) put local_data.zip
get Scarica file (Remoto a Locale) get server_backup.tar.gz
lcd Cambia directory locale lcd /Users/me/downloads
lpwd Stampa la directory di lavoro locale lpwd
mkdir Crea directory remota mkdir new_project
quit Esci dalla sessione SFTP quit

Esempio: Caricamento e Download all'interno di una Sessione SFTP

$ sftp [email protected]
sftp> cd /data/backups
sftp> lcd /home/local/reports
sftp> put daily_report.csv  # Carica il file
Uploading daily_report.csv to /data/backups/daily_report.csv
daily_report.csv                                      100% 512KB   4.3MB/s   00:00    
sftp> get configuration.yaml  # Scarica un file
Fetching /data/backups/configuration.yaml to configuration.yaml
configuration.yaml                                    100% 20KB    1.1MB/s   00:00    
sftp> quit

SCP vs. SFTP: Scegliere lo Strumento Giusto

Sebbene entrambi i protocolli siano sicuri, servono a diverse esigenze operative:

Caratteristica Secure Copy Protocol (SCP) SSH File Transfer Protocol (SFTP)
Meccanismo Protocollo di copia semplice (Non Interattivo) Protocollo di gestione file interattivo (Con stato)
Caso d'Uso Trasferimenti rapidi di singoli file; scripting/automazione. Trasferimenti complessi; gestione directory; sessioni interattive.
Velocità Spesso buona per copie semplici. Di solito abbastanza veloce, con più funzionalità di gestione file.
Ripresa Limitata; usa un altro strumento per un comportamento robusto di ripresa. Supporta operazioni di trasferimento più controllate, ma il comportamento di ripresa del client varia.
Stato di Sicurezza Strumento di compatibilità; il protocollo tradizionale ha problemi di progettazione. Scelta predefinita migliore per il trasferimento gestito di file su SSH.

Quando usare SCP: Usa SCP quando hai bisogno della massima velocità per un semplice trasferimento di file e stai eseguendo il comando all'interno di uno script dove è preferita la non interattività.

Quando usare SFTP: Usa SFTP per praticamente tutti i trasferimenti manuali di file, quando hai bisogno di gestire più file, cambiare directory o richiedere robustezza della sessione e funzionalità di sicurezza moderne.

Best Practice per Trasferimenti Sicuri di File

Usare SCP o SFTP è solo il primo passo. Una corretta configurazione di sicurezza sul server SSH è essenziale per proteggere l'ambiente remoto.

1. Dare Priorità all'Autenticazione tramite Chiave SSH

L'autenticazione basata su password è vulnerabile agli attacchi di forza bruta. Usa sempre coppie di chiavi SSH pubblica/privata per autenticare i trasferimenti di file. L'uso delle chiavi elimina il rischio di compromissione della password durante trasferimenti automatici o manuali.

Generare Chiavi (se necessario):

ssh-keygen -t ed25519 -C "file-transfer"

Usare una chiave specifica per il trasferimento:

scp -i ~/.ssh/my_transfer_key file.txt user@remote_host:/tmp/
# oppure
sftp -i ~/.ssh/my_transfer_key user@remote_host

2. Disabilitare l'Accesso Root

Non consentire mai trasferimenti diretti di file utilizzando l'utente root. I trasferimenti dovrebbero sempre essere eseguiti da un account utente dedicato con privilegi ridotti. Se è necessario l'accesso amministrativo, i file possono essere spostati nella posizione appropriata dopo il trasferimento usando sudo localmente sulla macchina remota.

3. Limitare l'Accesso usando ChrootDirectory (SFTP)

Per i sistemi che forniscono accesso SFTP a utenti esterni o non fidati, implementa le restrizioni ChrootDirectory all'interno del file sshd_config. Questo blocca l'utente SFTP in una directory specifica, impedendogli di navigare nel resto del filesystem.

Esempio di configurazione in /etc/ssh/sshd_config:

Match User sftp_external_user
  ForceCommand internal-sftp
  ChrootDirectory /var/sftp/%u
  AllowTcpForwarding no
  X11Forwarding no

4. Limitare i Permessi

Assicurati che l'account utente utilizzato per i trasferimenti abbia solo i permessi minimi necessari per il suo compito (Principio del Minimo Privilegio). Se un utente deve solo caricare file in /data/uploads, assicurati che non possa eliminare file in /etc/config.

Conclusione

Usa SFTP come impostazione predefinita quando hai bisogno di navigare, caricare, scaricare o gestire file in modo interattivo. Usa SCP per casi di compatibilità semplici in cui ti fidi del server e comprendi il comportamento del client. In entrambi i casi, abbina il comando a chiavi SSH, account con privilegi minimi e permessi di directory restrittivi.