Skip to main content
  1. Comandi/

scp - secure copy

·3 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

`

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
#

ComandoFlagSignificato flagCosa 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/-rrecursiveCopia una directory intera ricorsivamente
scp -P 2222 file.txt utente@host:/path/-PPortSpecifica una porta SSH non standard (maiuscola)
scp -i ~/.ssh/chiave file.txt utente@host:/path/-iidentity fileSpecifica la chiave privata da usare
scp -C file.txt utente@host:/path/-CCompressComprime i dati durante il trasferimento
scp -v file.txt utente@host:/path/-vverboseOutput 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.

rsync

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
#

Il flag porta di scp e' -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

Related