GNU/Linux >> Linux Esercitazione >  >> Linux

Copia i file in modo sicuro con il comando SCP

Il comando SCP (Secure Copy) è un comando non interattivo per la copia sicura di file e directory tra due sistemi. SCP utilizza il protocollo SSH per la crittografia e l'autenticazione, rendendolo un modo sicuro per trasferire file tra server remoti.

Non sei un lettore? Guarda questo video tutorial correlato! Non vedi il video? Assicurati che il blocco degli annunci sia disattivato.

Se stai cercando una guida fantastica per usare il comando SCP, non cercare oltre. Questo tutorial ti mostrerà esempi di utilizzo dei comandi SCP, che potrebbero aiutarti a diventare un utente SCP sicuro.

Pronto? Continua a leggere per portare i tuoi trasferimenti di file al livello successivo!

Prerequisiti

Questo tutorial sarà una dimostrazione pratica. Se desideri continuare, assicurati di avere i seguenti requisiti.

  • Avrai bisogno di due computer Linux che fungano da origine della copia e destinazione della copia sulla stessa rete o su reti diverse. Questo tutorial utilizzerà computer Ubuntu 20.04, come elencato nella tabella seguente.
Nome computer Denominazione
ubuntu1 Ospite di origine
ubuntu2 Host di destinazione
  • Se è presente un firewall su ciascuno o tra i due computer, assicurati che la porta 22 sia aperta.
  • Questo tutorial presuppone che tu abbia già aperto una sessione SSH e connesso a entrambi i computer.

Copiare un file utilizzando il comando SCP

Ci possono essere molte ragioni per cui vorresti copiare file da un sistema all'altro. Forse a scopo di backup, replicare i file di configurazione o semplicemente desiderare una copia dei file. Qualunque sia la ragione, il comando SCP ti copre le spalle.

La sintassi di base per il comando SCP è la seguente.

scp [Option] [[email protected]]SRC_HOST:]your_file1 [[email protected]]DEST_HOST:]you_file2

Dove:

  • Option – specifica qualsiasi opzione da utilizzare, come cifra o limite. Utilizzerai alcune opzioni comuni in questo tutorial.
  • user1 – è il nome utente sull'host di origine.
  • SRC_HOST – è il nome host o l'indirizzo IP della copia origine .
  • your_file1 – è il percorso e il nome del file che vuoi copiare.
  • DEST_HOST – è il nome host o l'indirizzo IP della destinazione della copia .
  • user2 – è il nome utente con accesso all'host di destinazione.
  • your_file2 – è il percorso e il nome del file che vuoi copiare da your_file1

Nota:è possibile specificare i percorsi dei file utilizzando un percorso relativo o assoluto sul sistema locale. Ma i percorsi dei file sul sistema remoto devono utilizzare un nome utente con un percorso assoluto.

Ora che hai compreso la sintassi di base, puoi iniziare con l'esercizio di copia dei file usando il comando SCP.

1. Per iniziare, crea un nuovo file chiamato backup.txt nella home directory su ubuntu1 .

# Change into the home directory
cd ~
# Create a text file with content
echo "This is my backup file" > backup.txt
# Display the file content to confirm
cat backup.txt
# Show the SHA1 hash 

2. Quindi, crea una nuova directory denominata backup su Ubuntu2. Questa directory sarà il percorso di destinazione della copia del file.

# Creat the backup directory
mkdir ~/backup && cd ~/backup
# Display the full path
pwd

3. Ora esegui il comando scp di seguito su ubuntu1 per copiare backup.txt al backup directory su ubuntu2. Assicurati di sostituire il nome utente e il percorso con i tuoi.

scp backup.txt [email protected]:/home/ata/backup

Se vuoi copiare il file con un nome diverso, aggiungi il nuovo nome file al percorso di destinazione. Esempio:scp backup.txt [email protected]:/home/ata/backup/backup2.txt

4. Se è la prima volta che ti connetti a ubuntu2 host, digita yes alla richiesta di conferma e premere Invio.

5. Quindi, digita la password dell'account utente su ubuntu2 e premere Invio. Una volta inserita la password corretta, la copia del file procederà.

6. Dopo aver copiato il file, passa a ubuntu2 terminale ed eseguire il comando seguente per elencare il contenuto della directory.

ls

Conferma che il file backup.txt esiste e hai copiato correttamente il file.

7. Quindi, mostra il contenuto del file copiato per confermare che il file è intatto su ubuntu2 .

cat backup.txt

8. Infine, per confermare che i file siano identici, ottenere il checksum SHA1 di ciascun file su entrambe le macchine e confrontare i valori. Questo passaggio è una misura aggiuntiva per verificare che l'integrità del file non sia cambiata durante il trasferimento.

# on ubuntu1 and ubuntu2
sha1sum backup.txt

Esecuzione di copia ricorsiva con il comando SCP

Nella sezione precedente, hai imparato a copiare singoli file da un sistema locale a un sistema remoto usando il comando SCP. Spesso è necessario copiare un'intera directory con le sue sottodirectory e file in scenari di vita reale.

La copia di intere directory in genere si applica agli scenari di backup. Supponiamo che il tuo server (ubuntu1) esegua un server web i cui file sono in /var/www/ directory. Di seguito è riportata la struttura ad albero delle cartelle di esempio.

/var/www
├── html
│   └── index.html
└── your_domain
    └── index.html

Puoi facilmente eseguire il backup dell'intera cartella su una destinazione remota con il comando SCP.

Nella maggior parte dei casi, le operazioni di backup vengono eseguite tramite script di automazione e attività pianificate o processi cron. Questo esempio mostra come eseguire manualmente il backup di un'intera directory.

1. Innanzitutto, crea un backup del server web directory su ubuntu2 .

# Create the backup directory on ubuntu2
mkdir ~/web-server-backup
# Display the full backup directory path
realpath ~/web-server-backup

2. Quindi, torna a ubuntu1 terminale ed eseguire il comando SCP di seguito. L'opzione -r abilita la modalità di copia ricorsiva, il che significa che SCP copierà l'intero /var/www/ dalla cartella in alto fino all'ultimo file.

scp -r /var/www/ [email protected]:/home/ata/web-server-backup

3. Ora, esegui il comando tree su entrambi i sistemi per confrontare la struttura della directory. Su ubuntu1 , visualizzerai l'albero delle directory per /var/www . Su ubuntu2, visualizzerai l'albero delle directory per la directory di backup, che è /home/ata/web-server-backup in questo esempio.

# on ubuntu1
tree /var/www/

# on ubuntu2
tree /home/ata/web-server-backup

Filtraggio delle estensioni dei file da copiare

Supponiamo di avere una directory sul sistema locale contenente tipi di file misti con estensioni diverse. Dovresti copiare tutti i file da quella cartella su un computer remoto usando il comando SCP come parte del tuo lavoro. Sai già come copiare intere directory.

Ma la condizione è che devi solo copiare tutti i file con *.txt estensione. Niente panico; sei ancora sulla buona strada e la soluzione non è lontana da quella che hai già fatto nelle sezioni precedenti. Per filtrare i file da copiare, utilizzerai i caratteri jolly.

I caratteri jolly comuni sono l'asterisco (*), che rappresenta zero, uno o più caratteri, e il punto interrogativo (?), che indica un singolo carattere.

1. Innanzitutto, crea la cartella e i file di esempio su Ubuntu1 che copierai in seguito. Esegui il comando seguente per creare la cartella foo e file con estensione *.txt, *.doc e *.ppt.

# Create a directory named foo
mkdir foo && cd foo
# Create five *.txt files
touch {1..5}.txt
# Create five *.doc files
touch {1..5}.doc
# Create five *.ppt files
touch {1..5}.ppt
# List all the files in the directory

2. Quindi, passa al tuo terminale ubuntu2 e crea una directory chiamata bar . Questa directory sarà il tuo percorso di destinazione della copia.

# Create the folder
mkdir bar
# Display the new folder's full path
realpath bar

3. Torna al tuo ubuntu1 terminale ed eseguire il comando SCP sottostante. Nota che questa volta, invece di specificare una cartella specifica come origine, la tua fonte contiene un carattere jolly che corrisponde a qualsiasi file con un txt estensione all'interno di foo cartella.

scp *.txt [email protected]:/home/ata/bar/

Digita la password dell'account e la copia dovrebbe continuare. Come puoi vedere di seguito, il comando SCP ha copiato solo il txt file nonostante la cartella di origine abbia altri tipi di file.

4. Infine, passa al terminale ubuntu2 ed elenca i file all'interno della bar directory.

ls -l bar/

Il risultato dovrebbe confermare che nella directory esistono solo file *.txt.

Abilitazione dell'autenticazione basata su chiave

Digitare la password dell'account di destinazione può essere noioso e ingombrante. Inoltre, l'autenticazione basata su password è meno sicura e non appropriata per l'automazione. Qual è l'alternativa? Abilita l'autenticazione basata su chiave.

Come sai, il comando SCP usa SSH sotto il cofano. E SSH ti dà la possibilità di autenticarti usando le chiavi SSH invece delle password. I passaggi per configurare SCP con l'autenticazione con chiave SSH sono i seguenti.

1. Su ubuntu1 , genera una coppia di chiavi SSH eseguendo il comando ssh-keygen.

ssh-keygen -t rsa

2. Premere Invio per accettare il percorso predefinito in cui salvare la chiave. Infine, premi Invio due volte per non aggiungere una passphrase alla chiave.

Come puoi vedere di seguito, il comando ha creato due file. Il file id_rsa è la tua chiave privata, che rimarrà sul computer di origine. Al contrario, dovresti copiare id_rsa.pub nell'host di destinazione.

3. Esegui il comando seguente per copiare la tua chiave pubblica sull'host remoto ubuntu2 .

ssh-copy-id [email protected]

Inserisci la password dell'account di destinazione quando richiesto per continuare a copiare la chiave pubblica.

4. Ora che hai generato la coppia di chiavi SSH, esegui il comando seguente per copiare in modo sicuro backup.txt file da ubuntu1 su ubuntu2 . L'argomento -i ~/.ssh/id_rsa dice al comando SCP di autenticarsi con il file della chiave SSH.

scp -i ~/.ssh/id_rsa backup.txt [email protected]:backup3.txt

Il comando SCP non richiede più la password, come puoi vedere di seguito.

Questo è tutto! Ti sei sbarazzato di quella fastidiosa richiesta di password e hai reso la tua sessione SSH ancora più sicura.

Conclusione

Questo articolo ti ha insegnato come usare il comando SCP per copiare file tra due sistemi Linux in modo sicuro. Hai anche imparato a usare SCP con le chiavi SSH per l'autenticazione. Ora che hai appreso del comando SCP, provalo la prossima volta che devi copiarne uno su file di massa tra computer.


Linux
  1. Trova file e directory su Linux con il comando find

  2. 14 Esempi di comandi SCP per trasferire file in modo sicuro in Linux

  3. Dividi i file in blocchi con il comando split integrato

  4. Copia i file con SCP e Rsync

  5. Come trasferire file in modo sicuro utilizzando il comando SCP in Linux

Comando Cp in Linux (copia file)

Copia file e crea directory di destinazione allo stesso tempo

Come trovare file con il comando fd in Linux

Un modo semplice per unire i file con il comando Cat

Comando SCP Linux per trasferire file in modo sicuro

Come trovare file con dozzine di criteri con il comando Trova Bash