Come Trasferire File in Sicurezza su Linux Usando SCP

Scp Transfer Linux 00 Featured Image

Quando trasferisci file a un server Linux remoto, hai alcune opzioni. Uno dei modi migliori è usare un programma chiamato Secure Copy, o SCP, che funziona sul protocollo SSH per trasferire rapidamente file sulla tua rete a un sistema remoto. Questo tutorial ti mostra come trasferire file in sicurezza usando SCP su Linux.

Indice

  • Configurare SSH
  • Connettersi al Sistema tramite SSH
  • Usare SCP per Trasferire File
  • Comprimere il Trasferimento di File in SCP
  • Ottimizzare un Trasferimento Dati con SCP
  • Limitare l’Uso della Banda in SCP
  • Trasferimento da Remoto a Remoto con SCP
  • Usare un Proxy con SCP
  • Cambiare la Porta Predefinita in SCP
  • Usare la Modalità Silenziosa di SCP
  • Domande Frequenti

Configurare SSH

Sul tuo server remoto, dovrai installare un server SSH. Il più comune su Linux è il server OpenSSH. Per installarlo, esegui uno dei seguenti comandi:

# Server basato su Debian/Ubuntu  
sudo apt install ssh  
  
# Fedora  
sudo dnf install openssh

Scp Transfer Linux 01 Installing Ssh

A seconda della tua distribuzione, potrebbe essere necessario consentire SSH attraverso alcuni firewall software. Su Ubuntu, questo problema non esiste, ma su Fedora, dovrai anche eseguire i seguenti comandi:

sudo firewall-cmd --add-service=ssh --permanent  
sudo firewall-cmd --reload

Scp Transfer Linux 02 Fedora Enable Firewall

Connettersi al Sistema tramite SSH

Prima di poter connetterti tramite SSH, devi scoprire l’indirizzo IP del server remoto. Sui server grafici, l’indirizzo IP è mostrato nell’applet di rete nelle Impostazioni di sistema. Su la maggior parte dei server, dovresti usare il comando ip nel terminale.

ip addr

Scp Transfer Linux 04 Check Ip Address

Nell’output, cerca la riga che inizia con inet sotto ethX o enpXsy, a seconda di come la tua interfaccia di rete è collegata al sistema. Nel mio caso, è 192.168.68.108.

Per testare la connessione SSH, spostati su un’altra macchina Linux e digita:

Cambia “user” con il reale nome utente nel server.

Scp Transfer Linux 05 Connecting To Remote Server

Inserisci la password di quell’account e sei a posto. Se ricevi una domanda sulla “autenticità dell’host non può essere stabilita”, rispondi semplicemente “sì”. Si tratta di un controllo di sicurezza progettato per assicurarti che ti stai connettendo al tuo server reale e non a un impostore. Dovresti vedere lo stesso prompt apparire sul tuo sistema client che vedi quando accedi direttamente al server, il che significa che la tua connessione è riuscita. Dovresti anche configurare le tue connessioni SSH per la massima sicurezza, o addirittura impostare l’autenticazione a due fattori, prima di procedere al passo successivo.

Usare SCP per Trasferire File

Ora che hai testato la connessione SSH, inizia a copiare file tra le due macchine. La copia sicura viene eseguita usando il comando scp. Il formato base del comando scp è:

scp /PATH/TO/FILE USER@IP-ADDRESS:PATH/TO/DESIRED/DESTINATION

Ad esempio, per copiare il file “backup.tar.gz” dalla macchina locale alla cartella “backups” nella home directory dell’utente “ramces” sul server remoto con l’indirizzo IP di 192.168.68.165, usa:

scp backup.tar.gz [email protected]:~/backups/

Scp Transfer Linux 06 Basic Copying

Simile a quando ti connetti usando ssh, ti verrà richiesto di inserire la password. Non ti verrà richiesto il nome utente, poiché è stato specificato nel comando.

Puoi anche usare caratteri jolly come il seguente:

scp *.tar.gz [email protected]:~/backups/

Scp Transfer Linux 07 Glob Matching Copy

Per copiare un file dal server remoto alla macchina locale, basta invertire i parametri:

scp [email protected]:~/backups/backup.tar.gz ./

Scp Transfer Linux 08 Inverse Copying

Noti il punto alla fine del comando? Significa “la directory attuale”, come fa con i comandi standard cp o mv. Potresti specificare tranquillamente un’altra directory se lo desideri.

scp -r [email protected]:~/backups/ backups-from-server/

E lo stesso con i caratteri jolly:

scp [email protected]:~/backups/*.txz ./

Per copiare ricorsivamente una directory su un server remoto, usa l’opzione -r:

scp -r backups/ [email protected]:~/backups/

Scp Transfer Linux 09 Recursive Copying

Per copiare una directory ricorsivamente dal server remoto alla macchina locale, usa:

scp -r [email protected]:~/backups/ ./

Scp Transfer Linux 10 Reverse Recursive Copying

Comprimere il Trasferimento di File in SCP

Oltre alla copia di base, è anche possibile modificare come SCP si comporta durante questi trasferimenti di file. Ad esempio, puoi utilizzare il flag -C per comprimere i dati che SCP invia ai client remoti:

scp -C backup.tar.gz [email protected]:/home/ramces/

Questa opzione funziona comprimendo ogni pacchetto di dati mentre viene inviato tramite il programma SCP. Pertanto, questo può essere incredibilmente utile se ti trovi in una connessione limitata in banda e desideri inviare un file a un server remoto in modo affidabile.

Scp Transfer Linux 11 Data Compression Copy

Simile alle opzioni sopra, puoi anche usare -C insieme al flag -r per comprimere ricorsivamente e trasferire file su una macchina remota. Ad esempio, il seguente comando comprime e recupera il file “backup.tar.gz” dal mio server remoto:

scp -Cr [email protected]:/home/ramces/backups /home/ramces/

Scp Transfer Linux 12 Reverse Data Compression Copy

Ottimizzare un Trasferimento Dati con SCP

Per la maggior parte, SCP cerca di utilizzare l’algoritmo di crittografia AES-128 per tutti i suoi trasferimenti di file. Tuttavia, ci sono casi in cui questo particolare algoritmo non sarà adatto ai file che desideri trasferire.

Sapendo questo, è possibile ottimizzare ulteriormente e rendere più sicuro SCP cambiando direttamente l’algoritmo di cifratura per un trasferimento specifico. Per farlo, devi usare il flag -c seguito dall’algoritmo di cifratura che desideri utilizzare.

Ad esempio, il seguente comando trasferisce il file “backup.tar.gz” al mio server remoto utilizzando AES-256:

scp -c aes256-ctr ./backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 13 Change Default Cipher

Inoltre, l’opzione -c ti consente anche di fornire un elenco di cifre che desideri utilizzare per un particolare trasferimento di file. Ad esempio, il seguente comando utilizza sia AES-192 che AES-256 durante il trasferimento del file “backup.tar.gz” al mio server remoto:

scp -c aes192-ctr,aes256-ctr ./backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 14 Create Cipher Preference List

Limitare l’Uso della Banda in SCP

Sebbene comprimere i pacchetti di file possa aiutarti a usare SCP in condizioni di rete povere, è anche possibile limitare la larghezza di banda che il programma utilizza durante un trasferimento. Questo è utile in casi in cui stai usando una connessione misurata e non vuoi che SCP domini la tua larghezza di banda di rete.

Per limitare la larghezza di banda effettiva del programma, devi usare il flag -l seguito dal limite massimo che desideri in kilobit al secondo (Kb/s). Ad esempio, eseguendo il seguente comando trasferirà il file “backup.tar.gz” al mio server remoto a una larghezza di banda effettiva di 1.600 Kb/s:

scp -l 1600 ./backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 15 Limit Bandwidth During Copy

Trasferimento da Remoto a Remoto con SCP

Oltre a copiare file locali sul tuo server remoto e viceversa, puoi anche usare SCP per gestire più server remoti dalla tua macchina locale, poiché SCP si occupa solo dei trasferimenti di file e non fa distinzioni tra una macchina locale e una remota.

Per trasferire tra due server remoti, devi dichiarare esplicitamente il nome utente e l’indirizzo di ciascuna di quelle macchine. Ad esempio, eseguire il seguente comando trasferirà il mio file “remote-backup.tar.gz” tra i miei due server remoti:

scp [email protected]:/home/ramces/remote-backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 16 Remote To Remote Copy

Usare un Proxy con SCP

Per impostazione predefinita, SCP utilizza l’indirizzo IP della tua macchina locale ogni volta che trasferisce file tra host diversi. Sebbene questo vada bene in situazioni normali, può essere un problema se la tua rete locale limita qualsiasi attività SCP. Un modo rapido per affrontare questo problema è far passare la tua connessione locale attraverso un proxy SSH.

Per fare ciò, devi usare il flag -o seguito dall’opzione ProxyCommand. Questo ti consente di creare una connessione SSH di base a una nuova macchina che eseguirà, a sua volta, il tuo comando SCP. Ad esempio, eseguire quanto segue creerà un nuovo proxy SSH con una macchina remota e trasferirà il file “backup.tar.gz” utilizzandolo:

scp -o "ProxyCommand ssh [email protected] nc %h %p" ./backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 17 Ssh Proxy Bypass

Cambiare la Porta Predefinita in SCP

Oltre a creare un proxy SSH di base, puoi anche cambiare la porta predefinita per SCP. Questo è particolarmente utile se stai mettendo in sicurezza il tuo server Linux e non vuoi esporre porte predefinite.

Per utilizzare SCP con una porta diversa, devi usare il flag -P seguito dal numero di porta che desideri utilizzare. Ad esempio, il seguente comando copierà ricorsivamente la mia directory “backup” e si connetterà al mio server remoto usando la porta 2222:

scp -r -P 2222 ./backup [email protected]:/home/ramces/

Scp Transfer Linux 18 Using Custom Port

Usare la Modalità Silenziosa di SCP

Infine, è anche possibile rimuovere completamente qualsiasi output del terminale da un comando SCP. Questo è particolarmente utile se desideri creare uno script non interattivo che verrà eseguito sulla tua macchina. Non solo, ma puoi anche automatizzare completamente questo processo creando un cronjob e trasferendo una chiave SSH privata al tuo server.

Per creare un trasferimento SCP silenzioso, devi usare il flag -q. Ad esempio, il seguente comando trasferirà silenziosamente il mio file “backup.tar.gz” al mio server remoto:

scp -q ./backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 19 Quiet Mode

Domande Frequenti

Il mio trasferimento da remoto a remoto in SCP non funziona. Come posso risolverlo?

Questo problema è molto probabilmente dovuto a una porta bloccata nei file di configurazione di una delle tue macchine remote. Per risolvere questo problema, assicurati che la porta predefinita per SSH sia aperta in entrambe le macchine.

Questo problema potrebbe anche essere causato da una delle tue macchine remote che si trova dietro una connessione CG-NAT, quindi qualsiasi connessione esterna alla tua macchina remota non verrà risolta correttamente. Per risolvere questo, devi usare un programma di Virtual LAN, come Yggdrasil, che ti consentirà di passare attraverso CG-NAT.

Ho eseguito un proxy SCP e l’host remoto ha chiuso la connessione. Cosa posso fare?

Questo problema è molto probabilmente causato da un problema con la tua macchina proxy. Per avviare correttamente un proxy SSH, assicurati che la macchina che vuoi usare abbia il server OpenSSH e netcat. Per installare questi programmi su Ubuntu, esegui il seguente comando: sudo apt install ssh netcat.

È possibile conoscere tutte le cifre disponibili per SCP?

Per impostazione predefinita, il programma SCP si basa fortemente sul protocollo SSH per le sue funzioni crittografiche. Per questo motivo, puoi usare il programma SSH per stampare un elenco delle cifre che puoi utilizzare insieme a SCP. Ad esempio, puoi eseguire ssh -Q ciphers per stampare un breve elenco di tutte le cifre disponibili nella tua macchina.