Quando si devono trasferire file tra sistemi remoti si pensa spesso a soluzioni complicate, che prevedono l’installazione di software di terze parti. In realtà sia Linux che Windows integrano un’applicazione come SCP (Secure Copy) che permette di copiare file in sicurezza tra sistema locale e sistema remoto oppure tra due sistemi remoti.
SCP utilizza il protocollo SSH (Secure Shell Protocol) per stabilire una connessione crittografata e sicura tra il sistema sorgente e quello di destinazione. Gli elementi da copiare sono trasferiti attraverso un tunnel protetto, impedendo intercettazioni o alterazioni dei dati in transito.
Un programma come SCP è ideale in molteplici scenari: per eseguire trasferimenti sicuri di file tra computer, per il backup dei dati su server remoti senza configurazioni complesse, per automatizzare le operazioni ricorrendo a script e cron job od attività pianificate in Windows.
Cos’è SCP e come funziona
Il comando SCP può essere un po’ considerato come l’evoluzione di cp su Linux, facilitando il trasferimento di file tra sistemi remoti.
Per poter utilizzare SCP, il sistema remoto deve soddisfare alcuni requisiti specifici, sia in termini di configurazione della rete sia di servizi attivi. In particolare, è essenziale che sulla macchina verso la quale si intendono copiare i file sia correttamente installato un server SSH. Per verificarne lo stato su Linux, basta digitare quanto segue:
systemctl status ssh
In Windows 10 e 11, si può digitare Funzionalità facoltative nella casella di ricerca, cliccare il pulsante Visualizza le funzionalità quindi cercare Server OpenSSH e attivare la casella corrispondente.
Per impostazione predefinita, SCP tenta la connessione al server remoto sulla porta TCP 22, quella utilizzata di default dal server SSH. Il comando di base per avviare un trasferimento dal sistema locale verso un server SSH remoto è il seguente:
scp file.txt utente@192.168.1.100:/home/utente/
Nell’esempio il trasferimento avviene verso la porta 22 in ascolto sul server 192.168.1.100
. Si tratta di un indirizzo, in questo caso, appartenente alla rete locale: è ovviamente possibile specificare un indirizzo IP pubblico oppure l’indirizzo di un sistema remoto collegato, ad esempio, tramite VPN.
Se il server SSH fosse in ascolto su una porta diversa (ad esempio TCP 2222), basta aggiungere l’opzione -P 2222
nel comando.
Allo stesso modo, per copiare una risorsa remota nella cartella locale in cui ci si trova, basta usare la seguente sintassi:
scp utente@192.168.1.100:/home/utente/file.txt
Opzioni avanzate del comando SCP
Il comando SCP offre numerose opzioni per ottimizzare e personalizzarne il funzionamento. Di seguito riassumiamo quelle principali.
Opzione | Descrizione |
---|---|
-r |
Copia ricorsivamente cartelle e sottocartelle. |
-C |
Abilita la compressione per migliorare la velocità di trasferimento. |
-P <porta> |
Specifica una porta SSH diversa dalla predefinita (22). |
-i <chiave> |
Usa una chiave SSH specifica per l’autenticazione. |
-l <velocità> |
Limita la velocità di trasferimento in kbps. |
-q |
Disabilita l’output esplicito per un trasferimento silenzioso. |
-v |
Mostra dettagli sul processo di trasferimento (utile per il debugging). |
Il comando successivo, ad esempio, effettua una copia ricorsiva con compressione dei file:
scp -r -C /var/www/ utente@192.168.1.100:/backup/
Ovviamente, è possibile trasferire più file in un colpo solo utilizzando, ad esempio, le wildcard (in questo caso l’asterisco):
scp utente@192.168.1.100:/home/utente/*.log
Come trasferire file tra sistemi remoti
Già nell’introduzione abbiamo accennato che SCP può essere sfruttato anche per trasferire file tra due host remoti senza passare per la macchina locale. In questo modo il dialogo avviene direttamente tra le macchine remote, senza dover prima scaricare i file da trasferire per poi effettuare un nuovo upload. Il comando da utilizzare è il seguente:
scp utente1@host1:/percorso/file utente2@host2:/percorso/destinazione
Come utilizzare SCP su Windows
La maggior parte delle distribuzioni Linux ha OpenSSH preinstallato e, a sua volta, il pacchetto integra il comando SCP. Windows 10 e Windows 11 hanno un client OpenSSH già installato. In tanti non ne sospettano la presenza ma premendo Windows+X
quindi selezionando Terminale o Windows PowerShell, si ottiene subito risposta digitando il comando scp
.
Per verificare la presenza del client ed eventualmente anche del server OpenSSH in Windows, basta digitare quanto segue:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Qualora si volesse installare il client OpenSSH, è possibile farlo dalla finestra Funzionalità facoltative, già vista in precedenza, oppure impartendo il comando che segue:
Add-WindowsCapability -Online -Name OpenSSH.Client*
Il comando SCP può essere usato direttamente dal prompt dei comandi (cmd
), da una finestra PowerShell o avvalendosi della nuova finestra del terminale (installabile in Windows 10 e presente di default in Windows 11).
In cosa differisce la sintassi del comando SCP di OpenSSH Client per Windows?
L’implementazione di SCP in OpenSSH Client per Windows è quasi identica a quella su Linux, ma ci sono alcune differenze da considerare, principalmente dovute al modo in cui Windows gestisce i percorsi dei file e delle cartelle.
Su Linux e macOS, i percorsi utilizzano / (barra obliqua). In Windows, si usa la barra rovesciata ovvero \ (backslash). Nei comandi SCP, tuttavia, i percorsi delle cartelle vanno convertiti in formato Unix con / o messi tra virgolette. Ad esempio:
scp "C:/Users/NomeUtente/Desktop/file.txt" utente@server:/remoto/percorso/
Windows, inoltre, utilizza lettere identificative per le unità di memorizzazione, che devono essere specificate nel percorso. In generale, è sempre bene usare le virgolette per non avere problemi con i nomi dei percorsi contenenti degli spazi.
Quando e perché usare il comando SCP per trasferire file e cartelle
Il comando SCP è uno strumento potente e sicuro per il trasferimento di file tra computer: il fatto che sia ormai onnipresente su Linux così come su Windows ne fa un’utilità irrinunciabile per affrontare molteplici esigenze. Per gestire trasferimenti rapidi in sicurezza, SCP è una delle soluzioni più immediate e utilizzate dagli amministratori di sistema e dagli sviluppatori.
Pur essendo un metodo affidabile e semplice, SCP non è sempre l’opzione migliore per svolgere sincronizzazioni complesse: in questi casi tool come rsync
potrebbero risultare più efficienti.
Il comando rsync permette, tra le varie cose, non soltanto di sincronizzare i dati ma anche di riprendere operazioni di trasferimento dati interrotte prematuramente.
Per “navigare” il file system remoto si può ricorrere a sftp
, per servirsi di un’interfaccia grafica ci si può orientare su WinSCP o FileZilla, per un backup su cloud ci si può orientare sui tanti servizi disponibili. Anche se sarebbe ragionevole scegliere piattaforme compatibili con AWS S3, quindi utilizzabili anche tramite API (Application Programming Interface) e supportate da molti dispositivi per lo storage dei dati in locale (si pensi ai server NAS).