Se sei un amministratore di sistema e responsabile della gestione dei server, il backup dei dati è una delle tue attività più importanti. Quindi devi avere una conoscenza sufficiente degli strumenti di backup per semplificare il tuo compito.
Duplicity è un'utilità di backup da riga di comando gratuita, open source e avanzata basata su librsync e GnuPG. Produce volumi tar con firma digitale, versionati e crittografati per l'archiviazione su un computer locale o remoto. Duplicity supporta molti protocolli per la connessione a un file server, inclusi ssh/scp, rsync, ftp, DropBox, Amazon S3, Google Docs, Google Drive, filesystem locale, OneDrive, WebDAV e molti altri.
In questo tutorial, ti mostreremo come installare e configurare Duplicity per eseguire manualmente e automatizzare il backup sul server Ubuntu 20.04.
Prerequisiti
• Due server che eseguono Ubuntu 20.04.
• Un indirizzo IP statico 104.245.32.161 è configurato sul server Duplicity e 104.245.32.194 è configurato sul server di backup.
• Una password di root è configurata nel tuo server.
Per iniziare
Prima di iniziare, dovrai aggiornare il tuo pacchetto all'ultima versione. Puoi aggiornarli tutti con il seguente comando:
apt-get update -y
Dopo aver aggiornato tutti i pacchetti, dovrai anche installare alcune dipendenze richieste sul tuo server. Puoi installarli tutti eseguendo il seguente comando:
apt-get install ncftp python3-paramiko python-pycryptopp lftp python3-boto python3-dev librsync-dev -y
Una volta installati tutti i pacchetti, puoi procedere con l'installazione di Duplicity.
Installa Duplicity
Per impostazione predefinita, Duplicity è disponibile nel repository predefinito di Ubuntu 20.04. Puoi installarlo semplicemente eseguendo il seguente comando:
apt-get install duplicity -y
Una volta installato, verifica la versione installata di Duplicity con il seguente comando:
duplicity --version
Dovresti vedere il seguente output:
duplicity 0.8.12
Configura password SSH meno autenticazione
Successivamente, dovrai generare una chiave SSH crittografata RSA a 2048 bit e utilizzarla per autenticarti in modo sicuro con il sistema remoto senza fornire una password.
Innanzitutto, genera una chiave RSA con il seguente comando:
ssh-keygen -t rsa -m PEM
Ti verrà chiesto di specificare la posizione della chiave e della passphrase come mostrato di seguito:
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:BwKSLtXT+WHhPqhu3MIH07QEb0c5Zh/f0XolMRyQaQE root@ubuntu2004
The key's randomart image is:
+---[RSA 3072]----+
| .o.. ..oE.o*++ |
| o.+.o.O . + +.o|
| o +.*o+ + . +.|
|. . =+o.. . o .|
| . =.oS . . |
| o.o o |
| o.+ |
| .= o |
| ..o |
+----[SHA256]-----+
Quindi, copia la chiave RSA generata sul server di backup remoto con il seguente comando:
ssh-copy-id [email protected]
Ti verrà chiesto di fornire la password del server remoto come mostrato di seguito:
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
Genera chiavi GPG
Successivamente, dovrai anche generare chiavi GPG per crittografare i dati prima di trasferirli al server di backup remoto. Le chiavi GPG vengono utilizzate per fornire un ulteriore livello di sicurezza e crittografia dei dati trasferiti attraverso i server.
Puoi eseguire la chiave GPG con il seguente comando sul server Duplicity:
gpg --gen-key
Ti verrà chiesto di fornire la password della chiave GPG durante il processo di generazione della chiave come mostrato di seguito:
gpg (GnuPG) 2.2.19; Copyright (C) 2019 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
gpg: directory '/root/.gnupg' created
gpg: keybox '/root/.gnupg/pubring.kbx' created
Note: Use "gpg --full-generate-key" for a full featured key generation dialog.
GnuPG needs to construct a user ID to identify your key.
Real name: Hitesh Jethva
Email address: [email protected]
You selected this USER-ID:
"Hitesh Jethva <[email protected]>"
Change (N)ame, (E)mail, or (O)kay/(Q)uit? O
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key E8A334EB747BAD6A marked as ultimately trusted
gpg: directory '/root/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A.rev'
public and secret key created and signed.
pub rsa3072 2020-07-30 [SC] [expires: 2022-07-30]
6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A
uid Hitesh Jethva <[email protected]>
sub rsa3072 2020-07-30 [E] [expires: 2022-07-30]
Il comando precedente genererà le chiavi GPG e le salverà nella directory /root/.gnupg/.
Se dimentichi la tua chiave GPG, puoi trovarla con il seguente comando:
gpg --list-keys
Dovresti ottenere il seguente output:
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: next trustdb check due at 2022-07-30
/root/.gnupg/pubring.kbx
------------------------
pub rsa3072 2020-07-30 [SC] [expires: 2022-07-30]
6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A
uid [ultimate] Hitesh Jethva <[email protected]>
sub rsa3072 2020-07-30 [E] [expires: 2022-07-30]
Crea directory di backup
Successivamente, dovrai creare una directory sul server di backup in cui archiviare il backup.
Accedi al server di backup e crea una directory di backup con il seguente comando:
mkdir -p /remotebackup/Duplicity/
Una volta terminato, puoi procedere al passaggio successivo.
Esegui backup manuale
A questo punto, Duplicity è installato e configurato. Ora eseguiamo un backup manuale sul server Duplicity.
Eseguire il comando seguente per eseguire il backup di una directory denominata /etc sul server di backup remoto (104.245.32.194) all'interno della directory /remotebackup/Duplicity/:
duplicity /etc/ sftp://[email protected]//remotebackup/Duplicity/
Sarà necessario fornire la password della chiave GPG per eseguire l'operazione di backup come mostrato di seguito:
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
GnuPG passphrase for decryption:
Retype passphrase for decryption to confirm:
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1596110093.56 (Thu Jul 30 11:54:53 2020)
EndTime 1596110095.24 (Thu Jul 30 11:54:55 2020)
ElapsedTime 1.67 (1.67 seconds)
SourceFiles 1413
SourceFileSize 2698964 (2.57 MB)
NewFiles 1413
NewFileSize 2698964 (2.57 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 1413
RawDeltaSize 1857098 (1.77 MB)
TotalDestinationSizeChange 493579 (482 KB)
Errors 0
-------------------------------------------------
Ora, accedi al server di backup remoto e verifica il backup con il seguente comando:
ls /remotebackup/Duplicity/
Dovresti vedere il seguente output:
duplicity-full.20200730T115821Z.manifest.gpg duplicity-full-signatures.20200730T115821Z.sigtar.gpg
duplicity-full.20200730T115821Z.vol1.difftar.gpg
Automatizzare il backup con Cron
Puoi anche pianificare il backup giornalmente o settimanalmente impostando il processo Cron per eseguirlo automaticamente a un intervallo di tempo specificato.
Innanzitutto, dovrai creare un file passphrase nella directory /root per passare automaticamente la passphrase senza una richiesta interattiva per la parafrasi.
Puoi crearlo con il seguente comando:
nano /root/.passphrase
Aggiungi la password della tua chiave GPG come mostrato di seguito:
PASSPHRASE="admin"
Salva e chiudi il file, quindi proteggilo con il seguente comando:
chmod 600 /root/.passphrase
Ora, crea uno script di backup giornaliero all'interno della directory /etc/cron.daily/ che verrà eseguito quotidianamente:
nano /etc/cron.daily/duplicity.inc
Aggiungi le seguenti righe:
#!/bin/sh
test -x $(which duplicity) || exit 0
. /root/.passphrase
export PASSPHRASE
$(which duplicity) --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A --exclude /var --exclude /home --exclude /swapfile --exclude /proc --exclude /sys --exclude /tmp --exclude /usr / sftp://[email protected]//remotebackup/Duplicity/
Salva e chiudi il file quando hai finito. Quindi, dai il permesso eseguibile allo script con il seguente comando:
chmod +x /etc/cron.daily/duplicity.inc
Lo script precedente eseguirà il backup di un intero server radice escluse alcune cartelle.
Ora prova lo script per assicurarti che tutto funzioni correttamente.
/etc/cron.daily/duplicity.inc
Dovresti vedere il seguente output:
Local and Remote metadata are synchronized, no sync needed.
Last full backup left a partial set, restarting.
Last full backup date: Thu Jul 30 12:06:52 2020
RESTART: The first volume failed to upload before termination.
Restart is impossible...starting backup from beginning.
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1596110992.57 (Thu Jul 30 12:09:52 2020)
EndTime 1596111062.63 (Thu Jul 30 12:11:02 2020)
ElapsedTime 70.06 (1 minute 10.06 seconds)
SourceFiles 13313
SourceFileSize 777994890 (742 MB)
NewFiles 13313
NewFileSize 777994890 (742 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 13313
RawDeltaSize 772067520 (736 MB)
TotalDestinationSizeChange 318263295 (304 MB)
Errors 0
-------------------------------------------------
Ora puoi controllare lo stato del tuo backup con il seguente comando:
PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A collection-status sftp://[email protected]//remotebackup/Duplicity/
Dovresti ottenere il seguente output:
Last full backup date: Thu Jul 30 12:14:17 2020
Collection Status
-----------------
Connecting with backend: BackendWrapper
Archive dir: /root/.cache/duplicity/b2af509c9fab82d874aa492a933aaf70
Found 0 secondary backup chains.
Found primary backup chain with matching signature chain:
-------------------------
Chain start time: Thu Jul 30 12:14:17 2020
Chain end time: Thu Jul 30 12:14:17 2020
Number of contained backup sets: 1
Total number of contained volumes: 2
Type of backup set: Time: Num volumes:
Full Thu Jul 30 12:14:17 2020 2
-------------------------
No orphaned or incomplete backup sets found.
Se desideri eseguire un backup completo, esegui il comando seguente:
PASSPHRASE="admin" duplicity full --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A remove-all-but-n-full 3 --force sftp://[email protected]//remotebackup/Duplicity/
Puoi anche pulire i vecchi file di backup usando l'opzione remove-all-but-n-full. Ad esempio, se desideri rimuovere tutti i vecchi file di backup indesiderati e conservare solo 2 backup e i relativi backup incrementali, esegui il comando seguente:
PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A remove-all-but-n-full 2 --force sftp://[email protected]//remotebackup/Duplicity/
Ripristina backup
Puoi anche ripristinare facilmente file e directory dal server di backup remoto. Puoi utilizzare l'opzione --file-to-restore per ripristinare file e directory.
Prima di eseguire il processo di ripristino, puoi elencare tutti i file e le directory disponibili sul server di backup con il seguente comando:
duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A list-current-files sftp://[email protected]//remotebackup/Duplicity/ | less
Dovresti vedere il seguente output:
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Thu Jul 30 12:14:17 2020
Thu Jul 30 12:04:04 2020 .
Thu May 14 03:28:54 2020 bin
Thu May 14 03:35:45 2020 boot
Mon Apr 20 16:33:49 2020 boot/System.map-5.4.0-26-generic
Wed Apr 29 13:34:16 2020 boot/System.map-5.4.0-29-generic
Mon Apr 20 16:33:49 2020 boot/config-5.4.0-26-generic
Wed Apr 29 13:34:16 2020 boot/config-5.4.0-29-generic
Thu May 14 03:37:26 2020 boot/grub
Thu May 14 03:31:36 2020 boot/grub/fonts
Thu May 14 03:31:36 2020 boot/grub/fonts/unicode.pf2
Thu May 14 03:31:29 2020 boot/grub/gfxblacklist.txt
Thu May 14 03:37:26 2020 boot/grub/grub.cfg
Wed Jul 29 10:05:41 2020 boot/grub/grubenv
Thu May 14 03:31:37 2020 boot/grub/i386-pc
Thu May 14 03:31:36 2020 boot/grub/i386-pc/915resolution.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/acpi.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/adler32.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/affs.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/afs.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/ahci.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/all_video.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/aout.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/archelp.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/at_keyboard.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/ata.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/backtrace.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/bfs.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/biosdisk.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/bitmap.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/bitmap_scale.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/blocklist.mod
Thu May 14 03:31:37 2020 boot/grub/i386-pc/boot.img
Thu May 14 03:31:36 2020 boot/grub/i386-pc/boot.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/bsd.mod
Thu May 14 03:31:35 2020 boot/grub/i386-pc/bswap_test.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/btrfs.mod
Ora, ripristina la directory denominata "opt" dal server di backup nella directory /opt eseguendo il comando seguente:
PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A --file-to-restore opt sftp://[email protected]//remotebackup/Duplicity/ /opt
Se il processo di ripristino è stato completato correttamente, dovresti vedere il seguente output:
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Thu Jul 30 12:14:17 2020
Conclusione
Nel tutorial sopra, abbiamo imparato come eseguire il backup e il ripristino di file e directory con Duplicity sul server Ubuntu 20.04. Abbiamo anche imparato come eseguire automaticamente il processo di backup pianificando un processo di backup con Cron. Spero che questo articolo ti aiuti a risparmiare molto tempo.