Padroneggiare SCP: Trasferire file in modo sicuro tra host locali e remoti

Impara la sintassi di scp per caricamenti sicuri, download, copie ricorsive, porte SSH personalizzate e conservazione degli attributi dei file.

Padroneggiare SCP: Trasferire File in Modo Sicuro tra Host Locali e Remoti

scp copia file tra macchine tramite SSH. È utile quando hai bisogno di un rapido caricamento o download sicuro e hai già accesso SSH al server.

Per lavori di sincronizzazione di grandi dimensioni, trasferimenti interrotti o distribuzioni ripetute, rsync è solitamente uno strumento migliore. Per copie una tantum semplici, scp è semplice e disponibile sulla maggior parte dei sistemi Unix-like.

Sintassi di Base

scp [OPZIONI] ORIGINE DESTINAZIONE

I percorsi locali appaiono come normali percorsi di file. I percorsi remoti usano questa forma:

[utente@]host:/percorso/al/file

Se ometti utente@, scp usa il tuo nome utente locale per il login SSH. Se il server SSH remoto usa una porta non predefinita, passa -P con una P maiuscola. La -p minuscola significa conserva gli attributi del file.

Caricare un File

Per copiare un file locale su un server remoto:

scp rapporto_locale.txt utente_remoto@esempio_remoto.com:/home/utente_remoto/documenti/

Questo invia rapporto_locale.txt dalla tua directory corrente alla directory documenti remota.

Per rinominare il file durante il caricamento, includi il nome del file di destinazione:

scp rapporto_locale.txt utente_remoto@esempio_remoto.com:/home/utente_remoto/documenti/rapporto-2026.txt

Scaricare un File

Per copiare un file remoto nella tua directory locale corrente:

scp utente_remoto@esempio_remoto.com:~/log_server.tar.gz .

Per salvarlo con un nome locale diverso:

scp utente_remoto@esempio_remoto.com:~/log_server.tar.gz ./log_server_produzione.tar.gz

Copiare una Directory Ricorsivamente

Usa -r per copiare un albero di directory:

scp -r cartella_progetto_locale utente_remoto@esempio_remoto.com:/var/www/

Questo copia la directory e il suo contenuto nella destinazione. Tieni presente che scp -r segue i collegamenti simbolici che incontra durante la traversata, il che può copiare più dati di quanto previsto.

Usare una Porta SSH Personalizzata

Se SSH ascolta sulla porta 2222, usa la -P maiuscola:

scp -P 2222 config_locale.ini utente@esempio_remoto.com:/tmp/

Puoi anche inserire la porta nella tua configurazione SSH e poi usare l'alias dell'host:

Host prod-web
  HostName esempio_remoto.com
  User utente
  Port 2222

Poi:

scp config_locale.ini prod-web:/tmp/

Conservare Orari e Modalità

Usa la -p minuscola per conservare gli orari di modifica, gli orari di accesso e i bit di modalità del file dall'origine:

scp -p script_importante.sh utente@server:/tmp/

La proprietà generalmente non viene conservata come con gli strumenti di archiviazione. Se la proprietà è importante, impostala dopo il trasferimento o usa un processo di distribuzione progettato per quel requisito.

Risolvere i Problemi con la Modalità Verbosa

Usa -v per vedere i dettagli della connessione SSH:

scp -v backup_grande.zip utente@server:/backup/

L'output verboso aiuta a diagnosticare errori di autenticazione, problemi di configurazione SSH, problemi con le chiavi host e porte impreviste.

Abilitare la Compressione Quando Aiuta

-C passa la compressione SSH alla connessione:

scp -C logs.txt utente@server:/tmp/

La compressione può aiutare su collegamenti più lenti con dati ricchi di testo. Potrebbe non aiutare molto per file già compressi come .zip, .gz, .jpg o .mp4.

Copiare tra Due Host Remoti

Puoi usare scp con due percorsi remoti:

scp utente_a@server_alpha:/data/db.sql utente_b@server_beta:/backup/

Nell'attuale scp di OpenSSH, le copie da remoto a remoto vengono trasferite attraverso la tua macchina locale per impostazione predefinita. Usa -R solo quando intendi intenzionalmente che l'host di origine si connetta direttamente all'host di destinazione:

scp -R utente_a@server_alpha:/data/db.sql utente_b@server_beta:/backup/

Con -R, l'host di origine deve essere in grado di autenticarsi alla destinazione senza richiedere una password.

Evitare Errori Comuni

Metti tra virgolette i percorsi remoti che contengono spazi:

scp "file locale.txt" 'utente@server:/tmp/file locale.txt'

Usa percorsi locali assoluti o chiaramente relativi quando un nome file locale contiene due punti, perché scp tratta host:percorso come un percorso remoto:

scp ./rapporto:finale.txt utente@server:/tmp/

Controlla due volte i percorsi di destinazione prima di copiare come root o in directory di sistema. scp sovrascriverà un file di destinazione esistente senza chiedere in uso normale.

SCP o Rsync?

Usa scp per copie sicure semplici:

  • Caricare un file.
  • Scaricare un archivio.
  • Copiare una piccola directory una volta.
  • Spostare dati in un ambiente solo SSH.

Usa rsync quando hai bisogno di trasferimenti riprendibili, sincronizzazioni ripetute efficienti, gestione delle eliminazioni, pattern di esclusione, checksum o migliori controlli di avanzamento.

Conclusione

Usa scp origine destinazione per trasferimenti rapidi di file basati su SSH. Aggiungi -r per le directory, -P per una porta SSH personalizzata, -p per conservare orari e modalità, e -v quando hai bisogno di risolvere problemi di connessione SSH.