Comando scp in Linux: copiare file via SSH e scegliere la porta

scp copia file tra il computer locale e un sistema remoto tramite SSH. Scrivi prima l'origine e poi la destinazione; una posizione remota si indica normalmente con utente@host:percorso. Controlla la destinazione prima di avviare il trasferimento, perché un file esistente può essere sovrascritto.

Da OpenSSH 9.0, scp usa per impostazione predefinita SFTP (SSH File Transfer Protocol) sopra una connessione SSH cifrata. Il nome del comando non implica quindi l'uso del vecchio protocollo SCP. Quest'ultimo si seleziona esplicitamente con -O quando serve per compatibilità.

Sintassi e preparazione

scp [options] source target

source è l'origine, target la destinazione e [options] indica opzioni facoltative. Sostituisci account, host e percorsi degli esempi con quelli reali: server.example.com e server.example.test sono nomi illustrativi, non server disponibili per una prova.

Servono il client OpenSSH locale, un account autorizzato sul server, la raggiungibilità del servizio SSH e, con il protocollo predefinito attuale, il supporto SFTP lato server. Verifica l'identità del server e il metodo di autenticazione come nella guida al comando ssh. Il client può chiedere la password dell'account o la passphrase della chiave privata.

Consulta man scp per la versione installata; ssh -V aiuta a identificare la versione del client OpenSSH della stessa installazione. Prima della copia controlla che il file sorgente esista, che la directory di destinazione sia corretta e che spazio disponibile e permessi siano sufficienti.

Esempi: invio, ricezione e directory

Inviare un file locale. In questo esempio report.txt si trova nella directory corrente e la directory remota /home/alice/ esiste già:

scp report.txt alice@server.example.com:/home/alice/

La copia attesa è /home/alice/report.txt sul server. Se quel file è già presente può essere sostituito; non presumere una richiesta interattiva di conferma. Conserva prima una copia dei dati importanti oppure scegli un nuovo nome di destinazione.

Ricevere un file remoto. Invertendo l'ordine delle due posizioni, il file arriva sul computer locale:

scp alice@server.example.com:/home/alice/report.txt .

Il punto finale indica la directory corrente locale. Controllala prima del comando: anche il file locale report.txt può essere sovrascritto. Un percorso remoto che inizia con / è assoluto; un percorso relativo viene normalmente interpretato rispetto alla directory iniziale dell'account remoto.

Copiare una directory. L'opzione -r include ricorsivamente il contenuto della directory:

scp -r project/ alice@server.example.com:/home/alice/

Con /home/alice/ già esistente, la directory copiata si trova sotto /home/alice/project. Valuta prima dimensioni e contenuto: scp segue i collegamenti simbolici incontrati nella visita ricorsiva, quindi può includere dati raggiunti attraverso quei collegamenti. Non trattare questa operazione come un backup completo di tutti i metadati o come una sincronizzazione.

Controllare direzione e risultato

La forma scp file_locale utente@host:percorso invia il file; la forma con l'origine remota lo riceve. È l'ordine origine-destinazione a determinare la direzione, mentre i due punti identificano la componente remota.

scp report.txt user@server.example.test:/tmp/report.txt

Il percorso /tmp/report.txt è solo illustrativo: scegli una posizione appropriata sul server, evita conflitti con altri utenti e controlla eventuali politiche di pulizia di /tmp. Può apparire una barra di avanzamento, ma con alcune impostazioni il comando termina senza messaggi.

Controlla subito lo stato di uscita: 0 significa successo, un valore maggiore di 0 segnala un errore. In Bash puoi leggere $? immediatamente dopo scp, prima di eseguire altri comandi. In caso di interruzione, non considerare completa un'eventuale copia parziale rimasta a destinazione.

Per leggere nome e dimensione sul server, usa ssh user@server.example.test 'ls -lh /tmp/report.txt'. Se scp richiede una porta particolare con -P, usa la corrispondente -p nel comando ssh di verifica. Nome e dimensione sono controlli utili ma non provano da soli l'identità del contenuto; per file importanti confronta un hash crittografico, per esempio SHA-256, calcolato sui due file.

Opzioni principali

Opzione Funzione
-r Copia ricorsivamente le directory e segue i collegamenti simbolici incontrati.
-P porta Seleziona la porta SSH del server. La P è maiuscola, diversamente da ssh -p.
-i file_chiave Indica il file della chiave privata da usare per l'autenticazione.
-p Richiede la conservazione di orari di modifica e accesso e dei bit di modalità del file sorgente.
-O Seleziona il protocollo SCP legacy al posto di SFTP per esigenze di compatibilità.

Per un server sulla porta 2222, ad esempio, la forma è scp -P 2222 report.txt alice@server.example.com:/home/alice/. -p minuscola non sceglie la porta e non equivale a conservare proprietario, ACL o ogni attributo del filesystem. Verifica quali metadati sono supportati e consentiti dalla destinazione.

Percorsi, compatibilità e copie ripetute

Metti tra virgolette gli argomenti che contengono spazi, in modo che la shell locale li passi come un unico percorso. Per un nome locale contenente :, rendi esplicito il percorso, per esempio con il prefisso ./, per evitare che venga scambiato per una destinazione remota. Non applicare automaticamente a SFTP le regole di doppia interpretazione e quoting del vecchio SCP.

Con -O, il protocollo legacy usa la shell remota per l'espansione dei nomi e richiede particolare attenzione ai caratteri speciali. Non abilitarlo come primo rimedio a un errore generico: prima identifica se manca il supporto SFTP o se il problema riguarda account, permessi, spazio o percorso. La compatibilità dei percorsi con ~utente può dipendere anche dalle funzionalità del server.

scp non confronta soltanto i file cambiati, non allinea automaticamente le cancellazioni e non offre una ripresa generale del trasferimento interrotto. Per copie ripetute, aggiornamenti incrementali o gestione di file parziali può essere più adatto rsync, scegliendo le opzioni necessarie e verificando che sia disponibile su entrambi i sistemi.

In una prova locale del 3 novembre 2026 con OpenSSH 10.3p1 di Git per Windows sono state verificate copie tra directory locali: file singolo, sovrascrittura di un file di prova, directory annidata, nome con spazi e conservazione dell'orario di modifica con -p. I contenuti copiati sono stati confrontati con SHA-256. Questa prova non verifica trasferimenti SSH/SFTP, autenticazione remota, collegamenti simbolici o conservazione dei permessi Linux.

Domande frequenti

L'opzione della porta in scp è -p?

No: usa -P maiuscola per la porta del server, per esempio -P 2222. L'opzione -p minuscola riguarda orari e bit di modalità. In ssh la porta si specifica invece con -p minuscola.

Documentazione ufficiale

Consulta il manuale ufficiale di scp e le note di OpenSSH 9.0 sul passaggio a SFTP. Il manuale ufficiale di rsync descrive le alternative per aggiornamenti e sincronizzazione.