Si vous êtes un administrateur système et responsable de la gestion des serveurs, la sauvegarde des données est l'une de vos tâches les plus importantes. Vous devez donc avoir une connaissance suffisante des outils de sauvegarde qui vous facilitent la tâche.
Duplicity est un utilitaire de sauvegarde en ligne de commande gratuit, open-source et avancé construit sur librsync et GnuPG. Il produit des volumes tar signés numériquement, versionnés et chiffrés pour le stockage sur un ordinateur local ou distant. Duplicity prend en charge de nombreux protocoles de connexion à un serveur de fichiers, notamment ssh/scp, rsync, ftp, DropBox, Amazon S3, Google Docs, Google Drive, système de fichiers local, OneDrive, WebDAV et bien d'autres.
Dans ce tutoriel, nous allons vous montrer comment installer et configurer Duplicity pour effectuer manuellement et automatiser la sauvegarde sur le serveur Ubuntu 20.04.
Prérequis
• Deux serveurs exécutant Ubuntu 20.04.
• Une adresse IP statique 104.245.32.161 est configurée sur le serveur Duplicity et 104.245.32.194 est configurée sur le serveur de secours.
• Un mot de passe root est configuré sur votre serveur.
Mise en route
Avant de commencer, vous devrez mettre à jour votre package vers la dernière version. Vous pouvez tous les mettre à jour avec la commande suivante :
apt-get update -y
Après avoir mis à jour tous les packages, vous devrez également installer certaines dépendances requises sur votre serveur. Vous pouvez tous les installer en exécutant la commande suivante :
apt-get install ncftp python3-paramiko python-pycryptopp lftp python3-boto python3-dev librsync-dev -y
Une fois tous les packages installés, vous pouvez procéder à l'installation de Duplicity.
Installer la duplicité
Par défaut, Duplicity est disponible dans le référentiel par défaut d'Ubuntu 20.04. Vous pouvez l'installer en exécutant simplement la commande suivante :
apt-get install duplicity -y
Une fois installé, vérifiez la version installée de Duplicity avec la commande suivante :
duplicity --version
Vous devriez voir le résultat suivant :
duplicity 0.8.12
Configurer l'authentification sans mot de passe SSH
Ensuite, vous devrez générer une clé SSH cryptée RSA 2048 bits et l'utiliser pour vous authentifier en toute sécurité auprès du système distant sans fournir de mot de passe.
Tout d'abord, générez une clé RSA avec la commande suivante :
ssh-keygen -t rsa -m PEM
Il vous sera demandé de spécifier l'emplacement de la clé et de la phrase de passe comme indiqué ci-dessous :
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]-----+
Ensuite, copiez la clé RSA générée sur le serveur de sauvegarde distant avec la commande suivante :
ssh-copy-id [email protected]
Il vous sera demandé de fournir le mot de passe du serveur distant comme indiqué ci-dessous :
/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.
Générer des clés GPG
Ensuite, vous devrez également générer des clés GPG pour chiffrer les données avant de les transférer sur le serveur de sauvegarde distant. Les clés GPG sont utilisées pour fournir une couche supplémentaire de sécurité et de cryptage des données transférées sur les serveurs.
Vous pouvez utiliser la clé GPG avec la commande suivante sur le serveur Duplicity :
gpg --gen-key
Il vous sera demandé de fournir le mot de passe de la clé GPG lors du processus de génération de clé comme indiqué ci-dessous :
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]
La commande ci-dessus générera les clés GPG et les enregistrera dans le répertoire /root/.gnupg/.
Si vous oubliez votre clé GPG, vous pouvez la retrouver avec la commande suivante :
gpg --list-keys
Vous devriez obtenir le résultat suivant :
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]
Créer un répertoire de sauvegarde
Ensuite, vous devrez créer un répertoire sur le serveur de sauvegarde pour stocker la sauvegarde.
Connectez-vous au serveur de sauvegarde et créez un répertoire de sauvegarde avec la commande suivante :
mkdir -p /remotebackup/Duplicity/
Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.
Effectuer une sauvegarde manuelle
À ce stade, Duplicity est installé et configuré. Effectuons maintenant une sauvegarde manuelle sur le serveur Duplicity.
Exécutez la commande suivante pour sauvegarder un répertoire nommé /etc sur le serveur de sauvegarde distant (104.245.32.194) dans le répertoire /remotebackup/Duplicity/ :
duplicity /etc/ sftp://[email protected]//remotebackup/Duplicity/
Vous devrez fournir votre mot de passe de clé GPG pour effectuer l'opération de sauvegarde comme indiqué ci-dessous :
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
-------------------------------------------------
Maintenant, connectez-vous au serveur de sauvegarde distant et vérifiez la sauvegarde avec la commande suivante :
ls /remotebackup/Duplicity/
Vous devriez voir le résultat suivant :
duplicity-full.20200730T115821Z.manifest.gpg duplicity-full-signatures.20200730T115821Z.sigtar.gpg
duplicity-full.20200730T115821Z.vol1.difftar.gpg
Automatiser la sauvegarde avec Cron
Vous pouvez également programmer votre sauvegarde quotidiennement ou hebdomadairement en configurant la tâche Cron pour qu'elle s'exécute automatiquement à un intervalle de temps spécifié.
Tout d'abord, vous devrez créer un fichier de phrase secrète sous le répertoire /root pour transmettre automatiquement la phrase secrète sans invite interactive de paraphrase.
Vous pouvez le créer avec la commande suivante :
nano /root/.passphrase
Ajoutez votre mot de passe de clé GPG comme indiqué ci-dessous :
PASSPHRASE="admin"
Enregistrez et fermez le fichier puis sécurisez le fichier avec la commande suivante :
chmod 600 /root/.passphrase
Maintenant, créez un script de sauvegarde quotidienne dans le répertoire /etc/cron.daily/ qui s'exécutera quotidiennement :
nano /etc/cron.daily/duplicity.inc
Ajoutez les lignes suivantes :
#!/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/
Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, donnez l'autorisation d'exécution au script avec la commande suivante :
chmod +x /etc/cron.daily/duplicity.inc
Le script ci-dessus sauvegardera un serveur racine entier à l'exception de certains dossiers.
Testez maintenant le script pour vous assurer que tout fonctionne correctement.
/etc/cron.daily/duplicity.inc
Vous devriez voir le résultat suivant :
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
-------------------------------------------------
Vous pouvez maintenant vérifier l'état de votre sauvegarde avec la commande suivante :
PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A collection-status sftp://[email protected]//remotebackup/Duplicity/
Vous devriez obtenir le résultat suivant :
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.
Si vous souhaitez effectuer une sauvegarde complète, exécutez la commande suivante :
PASSPHRASE="admin" duplicity full --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A remove-all-but-n-full 3 --force sftp://[email protected]//remotebackup/Duplicity/
Vous pouvez également nettoyer les anciens fichiers de sauvegarde en utilisant l'option remove-all-but-n-full. Par exemple, si vous souhaitez supprimer tous les anciens fichiers de sauvegarde indésirables et ne conserver que 2 sauvegardes et leurs sauvegardes incrémentielles correspondantes, exécutez la commande suivante :
PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A remove-all-but-n-full 2 --force sftp://[email protected]//remotebackup/Duplicity/
Restaurer la sauvegarde
Vous pouvez également restaurer facilement vos fichiers et répertoires à partir du serveur de sauvegarde distant. Vous pouvez utiliser l'option --file-to-restore pour restaurer des fichiers et des répertoires.
Avant d'effectuer le processus de restauration, vous pouvez répertorier tous les fichiers et répertoires disponibles sur le serveur de sauvegarde avec la commande suivante :
duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A list-current-files sftp://[email protected]//remotebackup/Duplicity/ | less
Vous devriez voir le résultat suivant :
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
Maintenant, restaurez le répertoire nommé "opt" du serveur de sauvegarde vers le répertoire /opt en exécutant la commande suivante :
PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A --file-to-restore opt sftp://[email protected]//remotebackup/Duplicity/ /opt
Si le processus de restauration s'est terminé avec succès, vous devriez voir la sortie suivante :
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Thu Jul 30 12:14:17 2020
Conclusion
Dans le didacticiel ci-dessus, nous avons appris à sauvegarder et à restaurer des fichiers et des répertoires avec Duplicity sur le serveur Ubuntu 20.04. Nous avons également appris à exécuter automatiquement le processus de sauvegarde en planifiant un processus de sauvegarde avec Cron. J'espère que cet article vous aidera à gagner beaucoup de temps.