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.