`
Cosa fa#
Copia file e directory tra macchine usando SSH come trasporto. Funziona esattamente come cp ma attraverso la rete — stessa sintassi, stessa logica, con l'aggiunta delle credenziali remote. Supporta ~/.ssh/config, quindi funziona con gli alias SSH definiti li'.
Sintassi#
scp [opzioni] sorgente destinazione
La sorgente e la destinazione possono essere locali o remote. Il formato per un percorso remoto e' utente@host:/percorso.
Comandi essenziali#
| Comando | Flag | Significato flag | Cosa fa |
|---|---|---|---|
scp file.txt utente@host:/path/ | — | — | Copia file locale su server remoto |
scp utente@host:/path/file.txt . | — | — | Copia file remoto in locale (. = directory corrente) |
scp -r dir/ utente@host:/path/ | -r | recursive | Copia una directory intera ricorsivamente |
scp -P 2222 file.txt utente@host:/path/ | -P | Port | Specifica una porta SSH non standard (maiuscola) |
scp -i ~/.ssh/chiave file.txt utente@host:/path/ | -i | identity file | Specifica la chiave privata da usare |
scp -C file.txt utente@host:/path/ | -C | Compress | Comprime i dati durante il trasferimento |
scp -v file.txt utente@host:/path/ | -v | verbose | Output dettagliato — utile per debug |
Esempi pratici#
# 1. Copia file locale su server remoto
scp /path/locale/file.txt barno@192.168.64.3:/home/barno/
# 2. Copia file remoto in locale
scp barno@192.168.64.3:/var/log/auth.log ~/Downloads/
# 3. Copia directory intera su server remoto
scp -r /path/locale/cartella/ barno@192.168.64.3:/home/barno/
# 4. Copia directory da remoto in locale
scp -r barno@192.168.64.3:/home/barno/progetto/ ~/Desktop/
# 5. Copia tra due server remoti
scp barno@server1:/path/file.txt barno@server2:/path/destinazione/
# 6. Porta SSH non standard (come OverTheWire)
scp -P 2220 barno@ctf.labs.overthewire.org:/home/bandit0/file.txt .Con ~/.ssh/config — alias invece di IP#
Se hai configurato ~/.ssh/config sul Mac, puoi usare l'alias direttamente invece di scrivere utente@IP ogni volta.
# ~/.ssh/config sul Mac:
# Host ubuntu-lab
# HostName 192.168.64.3
# User barno
# Port 22
# Senza alias — verboso
scp barno@192.168.64.3:/var/log/auth.log ~/Downloads/
# Con alias — pulito
scp ubuntu-lab:/var/log/auth.log ~/Downloads/
# Directory con alias
scp -r ubuntu-lab:/home/barno/script/ ~/Desktop/Combinazioni utili#
# Scaricare un log di autenticazione dalla VM per analizzarlo in locale
scp ubuntu-lab:/var/log/auth.log ~/Desktop/auth-$(date +%Y%m%d).log
# Caricare uno script Python sulla VM per eseguirlo
scp failed_logins.py ubuntu-lab:/home/barno/
# Backup rapido di una directory di configurazione
scp -r ubuntu-lab:/etc/netplan/ ~/backups/netplan-backup/scp vs rsync#
scp e' semplice e immediato per trasferimenti singoli. rsync e' piu' efficiente per sincronizzazioni ripetute — trasferisce solo le differenze. Per il lab, scp e' sufficiente.
Sincronizza e cancella sul destinatario i file che non esistono più nella sorgente rsync -av --delete sorgente/ destinazione/
Scenario Reale#
Un analista ha generato eventi SSH falliti sulla VM Ubuntu e vuole analizzare auth.log con strumenti locali sul Mac. Invece di leggere il file direttamente sul server, usa scp ubuntu-lab:/var/log/auth.log ~/Desktop/ per scaricarlo in locale, dove puo' usare editor grafici, grep, o caricarlo in un tool di analisi log senza dipendere dalla connessione SSH.
Dove l'ho usato#
- Lab UTM — trasferimento file tra Mac e VM Ubuntu Server
Note personali#
-P maiuscola, mentre in ssh e' -p minuscola. E' una delle inconsistenze storiche piu' fastidiose di Unix — da ricordare.scp ubuntu-lab:/var/log/auth.log . — il punto finale e' la directory corrente. Molto piu' rapido che scrivere il path completo ogni volta.Collegato a#
- network — categoria
- system — categoria
- ssh — protocollo di trasporto sottostante
- ssh-config-file — gli alias definiti li' funzionano direttamente con scp
- netplan — la VM deve avere IP fisso per rendere scp affidabile


