GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment sauvegarder en utilisant Duplicity sur Ubuntu 16.04

Duplicity est une application logicielle qui fournit des volumes de sauvegarde au format tar chiffrés, signés numériquement et versionnés qui peuvent être téléchargés sur un serveur de fichiers distant ou local. Il est pris en charge dans toutes les principales distributions Linux comme Ubuntu, Linux Mint, Debian, Fedora et bien plus encore. Duplicity prend en charge la synchronisation des fichiers localement ou à distance entre le système de fichiers ou les serveurs à l'aide de SSH/SCP, Rsync, FTP, WebDAV, etc.

Dans ce tutoriel, j'expliquerai comment configurer la duplicité et l'utiliser pour automatiser en toute sécurité les sauvegardes sur votre serveur Ubuntu.

Pré-requis

Nous devons installer tous les packages par défaut pour Ubuntu à partir des référentiels.

$apt-get update
$apt-get install ncftp python-paramiko python-pycryptopp lftp python-boto python-dev librsync-dev

Installer la duplicité

Nous pouvons installer la duplicité à partir des packages du référentiel, en exécutant simplement cette commande.

$ apt install duplicity

Confirmons la version de duplicité après l'installation.

$ duplicity -V
duplicity 0.7.06

Créer des clés SSH et GPG

Ensuite, nous devrons utiliser des clés SSH pour nous authentifier en toute sécurité auprès du système distant sans avoir à fournir de mot de passe. Nous utilisons également des clés GPG pour chiffrer les données avant de les transférer vers l'emplacement de sauvegarde. Ces clés assurent une interaction sécurisée entre les serveurs.

Générons une clé SSH cryptée RSA 2048 bits à partir de notre utilisateur root pour autoriser les connexions sans mot de passe à la machine de sauvegarde.

$ ssh-keygen -t rsa
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:gxdDFAjm6AUSi7LzczlDE1orygCzplmjQCqBFkxJ8Dc root@duplicity-01
The key's randomart image is:
+---[RSA 2048]----+
|O=o o. o+. |
|o*.= .. |
|Ooo E o |
|** = + . o |
|O.* + . S |
|BB + o . . |
|=.o = |
| o o |
| |
+----[SHA256]-----+

Nous copions maintenant cette clé RSA dans notre emplacement de sauvegarde distant.

$ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '45.55.165.191 (45.55.165.191)' can't be established.
ECDSA key fingerprint is SHA256:XhFoQ3/mIsjGH7RfMwH6m0MHbj1B1kR4Sug5vfTQLdU.
Are you sure you want to continue connecting (yes/no)? yes
/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.

Par conséquent, nous pouvons accéder au serveur de sauvegarde distant sans fournir de mots de passe de l'hôte. Nous devons créer un emplacement de destination de sauvegarde pour enregistrer nos sauvegardes. J'ai créé un dossier Duplicity sur mon serveur de sauvegarde distant.

$mkdir -p remotebackup/Duplicity

Notre prochaine étape consiste à créer les clés GPG. Les clés GPG sont utilisées pour une sécurité et un cryptage supplémentaires des données transférées sur les serveurs. Créez-le en exécutant simplement cette commande ci-dessous :

$gpg --gen-key

Cette commande créera les clés GPG et les enregistrera dans le dossier /root/.gnupg/. Cette génération de clé est interactive et nous devons sélectionner et répondre à diverses questions au cours du processus.

$ gpg --gen-key
gpg (GnuPG) 1.4.20; Copyright (C) 2015 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.

Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection?
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <[email protected]>"

Real name: Saheetha
Email address: [email protected]
Comment:
You selected this USER-ID:
"Saheetha <[email protected]>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

gpg: gpg-agent is not available in this session
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.

Not enough random bytes available. Please do some other work to give
the OS a chance to collect more entropy! (Need 287 more bytes)

À ce stade, il vous est demandé de générer de l'entropie. L'entropie est essentiellement l'imprévisibilité de votre système. Votre VPS a besoin d'entropie pour créer une clé qui est en fait aléatoire. Si vous recevez ce message en tant que partie en surbrillance, vous devez installer haveged package pour créer une clé aléatoire et réessayer la commande.

$apt-get install haveged

Ce package peut être installé à partir de votre référentiel par défaut. Après l'installation, vous devez vous assurer que le paramètre suivant est mis à jour comme ci-dessous dans son fichier de configuration /etc/default/haveged.

DAEMON_ARGS="-w 1024"

Enfin, assurez-vous qu'il est configuré pour démarrer au démarrage :

$update-rc.d haveged defaults

Après avoir défini ceci, vous pouvez réinitialiser le gpg --gen-key commande à nouveau et il terminera le processus avec ce qui suit.

$ gpg --gen-key
gpg (GnuPG) 1.4.20; Copyright (C) 2015 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.

Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection?
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N)
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <[email protected]>"

Real name: Saheetha
Email address: [email protected]
Comment:
You selected this USER-ID:
"Saheetha <[email protected]>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

gpg: gpg-agent is not available in this session
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 F03B3360 marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
pub 2048R/F03B3360 2016-11-25
Key fingerprint = F262 785A B5E6 25E9 56E7 4484 3354 43D9 F03B 3360
uid Saheetha <[email protected]>
sub 2048R/C4D85223 2016-11-25

Vous pouvez également obtenir les informations de votre clé gpg en exécutant cette commande.

$ gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 2048R/F03B3360 2016-11-25
uid Saheetha <[email protected]>
sub 2048R/C4D85223 2016-11-25

Comment utiliser la duplicité

Exécutons un premier test de notre système de duplicité en créant un dossier de fichiers factices à sauvegarder. Vous pouvez créer un dossier de test et créer des fichiers à sauvegarder.

$ mkdir Test-DoC
$ cd Test-DoC
$ touch file{1..100}

Maintenant, vous pouvez exécuter cette commande pour sauvegarder le serveur sur notre serveur de sauvegarde distant.

$root@duplicity-01:~# duplicity /root/Test-DoC/ sftp://[email protected]//remotebackup/Duplicity
The authenticity of host '45.55.165.191' can't be established.
SSH-RSA key fingerprint is 20:9d:3b:fe:af:df:d1:40:5d:bc:f4:2c:6e:30:54:e0.
Are you sure you want to continue connecting (yes/no)? yes
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 1480059313.48 (Fri Nov 25 07:35:13 2016)
EndTime 1480059313.53 (Fri Nov 25 07:35:13 2016)
ElapsedTime 0.05 (0.05 seconds)
SourceFiles 101
SourceFileSize 4096 (4.00 KB)
NewFiles 101
NewFileSize 4096 (4.00 KB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 101
RawDeltaSize 0 (0 bytes)
TotalDestinationSizeChange 1029 (1.00 KB)
Errors 0
-------------------------------------------------

Vous pouvez confirmer la sauvegarde en vous connectant à notre serveur distant.

root@duplicity-02:/remotebackup/Duplicity# ll
total 20
drwxr-xr-x 2 root root 4096 Nov 25 07:35 ./
drwxr-xr-x 3 root root 4096 Nov 25 07:11 ../
-rw-r--r-- 1 root root 438 Nov 25 07:35 duplicity-full.20161125T073505Z.manifest.gpg
-rw-r--r-- 1 root root 1029 Nov 25 07:35 duplicity-full.20161125T073505Z.vol1.difftar.gpg
-rw-r--r-- 1 root root 1596 Nov 25 07:35 duplicity-full-signatures.20161125T073505Z.sigtar.gpg

Ces fichiers sont censés contenir les informations de sauvegarde. Comme il ne s'agit que de tester des fichiers, nous pouvons supprimer l'intégralité des fichiers.

Création d'une sauvegarde complète du serveur

Créons notre première sauvegarde de serveur. Nous créons une sauvegarde complète du serveur racine à l'exclusion de certains dossiers tels que /proc, /sys et /tmp. Ici, nous devons utiliser la clé de publication GPG et Paraphrase précédemment générées pour sécuriser et chiffrer nos données. Il s'agit de la syntaxe générale pour la création de sauvegarde.

duplicity --encrypt-key Pub-key_from_GPG --exclude files_to_exclude --include files_to_include path_to_back_up sftp://root@remotebackupHostname//remotebackup/duplicity

J'ai exécuté cette commande pour sauvegarder mon serveur.

root@duplicity-01:~# PASSPHRASE="docker" duplicity --encrypt-key F03B3360 --exclude /proc --exclude /sys --exclude /tmp  / sftp://[email protected]//remotebackup/Duplicity/
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1480143194.50 (Sat Nov 26 06:53:14 2016)
EndTime 1480143304.84 (Sat Nov 26 06:55:04 2016)
ElapsedTime 110.34 (1 minute 50.34 seconds)
SourceFiles 69101
SourceFileSize 885736795 (845 MB)
NewFiles 69101
NewFileSize 885736795 (845 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 69101
RawDeltaSize 847552198 (808 MB)
TotalDestinationSizeChange 345904578 (330 MB)
Errors 0
-------------------------------------------------

Il faudra un certain temps pour terminer ce processus de sauvegarde. Parce que c'est la première fois que nous exécutons la sauvegarde, la duplicité créera une sauvegarde complète. La duplicité divise les blocs de données en volumes pour simplifier les transferts de fichiers.

root@duplicity-02:/remotebackup/Duplicity# ll
total 354864
drwxr-xr-x 2 root root 4096 Nov 26 06:55 ./
drwxr-xr-x 3 root root 4096 Nov 25 07:11 ../
-rw-r--r-- 1 root root 303666 Nov 26 06:55 duplicity-full.20161126T065314Z.manifest.gpg
-rw-r--r-- 1 root root 26241374 Nov 26 06:54 duplicity-full.20161126T065314Z.vol10.difftar.gpg
-rw-r--r-- 1 root root 26192752 Nov 26 06:54 duplicity-full.20161126T065314Z.vol11.difftar.gpg
-rw-r--r-- 1 root root 26206134 Nov 26 06:54 duplicity-full.20161126T065314Z.vol12.difftar.gpg
-rw-r--r-- 1 root root 26196266 Nov 26 06:54 duplicity-full.20161126T065314Z.vol13.difftar.gpg
-rw-r--r-- 1 root root 4999361 Nov 26 06:55 duplicity-full.20161126T065314Z.vol14.difftar.gpg
-rw-r--r-- 1 root root 26256306 Nov 26 06:53 duplicity-full.20161126T065314Z.vol1.difftar.gpg
-rw-r--r-- 1 root root 26216804 Nov 26 06:53 duplicity-full.20161126T065314Z.vol2.difftar.gpg
-rw-r--r-- 1 root root 26198345 Nov 26 06:53 duplicity-full.20161126T065314Z.vol3.difftar.gpg
-rw-r--r-- 1 root root 26197666 Nov 26 06:53 duplicity-full.20161126T065314Z.vol4.difftar.gpg
-rw-r--r-- 1 root root 26237799 Nov 26 06:53 duplicity-full.20161126T065314Z.vol5.difftar.gpg
-rw-r--r-- 1 root root 26218126 Nov 26 06:53 duplicity-full.20161126T065314Z.vol6.difftar.gpg
-rw-r--r-- 1 root root 26252966 Nov 26 06:53 duplicity-full.20161126T065314Z.vol7.difftar.gpg
-rw-r--r-- 1 root root 26234136 Nov 26 06:54 duplicity-full.20161126T065314Z.vol8.difftar.gpg
-rw-r--r-- 1 root root 26256543 Nov 26 06:54 duplicity-full.20161126T065314Z.vol9.difftar.gpg
-rw-r--r-- 1 root root 17136137 Nov 26 06:55 duplicity-full-signatures.20161126T065314Z.sigtar.gpg

Sur une nouvelle goutte, ma configuration a créé 15 volumes qui ont été transférés vers le système distant. Puisque nous avons une sauvegarde complète de mon serveur sur notre serveur de sauvegarde, la prochaine sauvegarde sera une sauvegarde incrémentielle. Celles-ci sont plus rapides et nécessitent moins de temps de transfert de données. Vous pouvez même forcer une autre sauvegarde complète en exécutant simplement cette commande.

$PASSPHRASE="docker" duplicity full --encrypt-key F03B3360 --exclude /proc --exclude /sys --exclude /tmp  / sftp://[email protected]//remotebackup/Duplicity/

Planifier nos sauvegardes

Nous pouvons maintenant apprendre à planifier nos sauvegardes quotidiennes ou hebdomadaires en configurant le script de sauvegarde pour qu'il s'exécute automatiquement. Tout d'abord, créons un fichier de phrase secrète sous notre dossier /root pour transmettre automatiquement la phrase secrète sans invite interactive de paraphrase.

$cat /root/.passphrase
PASSPHRASE="docker"

Sécurisez les autorisations de fichiers et limitez-les à 600.

Voyons comment créer la sauvegarde quotidiennement. Nous devons créer notre script de sauvegarde dans le dossier /etc/cron.daily. Toutes les tâches cron définies dans ce dossier seront exécutées quotidiennement.

$:/etc/cron.daily# cat duplicity.inc
#!/bin/sh

test -x $(which duplicity) || exit 0
. /root/.passphrase

export PASSPHRASE
$(which duplicity) --encrypt-key F03B3360 --exclude /proc --exclude /sys --exclude /tmp --exclude /var / sftp://[email protected]//remotebackup/Duplicity/

Assurez-vous de donner l'autorisation exécutable pour le script.

$:/etc/cron.daily# chmod +x duplicity.inc

Nous pouvons exécuter ce script pour nous assurer que tout fonctionne correctement.

root@duplicity-01:/etc/cron.daily# ./duplicity.inc
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Sat Nov 26 06:53:14 2016
--------------[ Backup Statistics ]--------------
StartTime 1480564726.91 (Thu Dec 1 03:58:46 2016)
EndTime 1480564748.83 (Thu Dec 1 03:59:08 2016)
ElapsedTime 21.91 (21.91 seconds)
SourceFiles 69108
SourceFileSize 899520535 (858 MB)
NewFiles 32
NewFileSize 20761841 (19.8 MB)
DeletedFiles 13
ChangedFiles 9
ChangedFileSize 2779 (2.71 KB)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 54
RawDeltaSize 20737072 (19.8 MB)
TotalDestinationSizeChange 17502790 (16.7 MB)
Errors 0
-------------------------------------------------

De même, nous pouvons planifier une sauvegarde pour forcer une sauvegarde complète hebdomadaire et maintenir. Étant donné que les sauvegardes incrémentielles deviendront de plus en plus lourdes à mesure que les modifications s'accumulent. Nous configurerons des sauvegardes complètes hebdomadaires pour actualiser la base.

Faisons cela en créant un script de sauvegarde complète de duplicité sous le dossier /etc/cron.weekly. Vous pouvez créer un script duplicity.full dans ce répertoire.

$:/etc/cron.weekly# chmod +x duplicity.full
$:/etc/cron.weekly# cat duplicity.full
#!/bin/sh

test -x $(which duplicity) || exit 0
. /root/.passphrase

export PASSPHRASE
$(which duplicity) full --encrypt-key F03B3360 --exclude /proc --exclude /sys --exclude /tmp --exclude /var / sftp://[email protected]//remotebackup/Duplicity/

Nous pouvons également ajouter cette commande à notre script duplicity.full pour nettoyer les anciens fichiers de sauvegarde. Ajoutez cette commande pour ne conserver que trois sauvegardes et leurs sauvegardes incrémentielles correspondantes.

$(which duplicity) remove-all-but-n-full 3 --force sftp://[email protected]//remotebackup/Duplicity/

Par conséquent, notre script hebdomadaire créera une sauvegarde complète de notre serveur et supprimera tous les anciens fichiers de sauvegarde indésirables du serveur. Nous pouvons exécuter notre script manuellement pour tester son fonctionnement.

$:/etc/cron.weekly# ./duplicity.full
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Sat Nov 26 06:53:14 2016
--------------[ Backup Statistics ]--------------
StartTime 1480570674.29 (Thu Dec 1 05:37:54 2016)
EndTime 1480570791.54 (Thu Dec 1 05:39:51 2016)
ElapsedTime 117.26 (1 minute 57.26 seconds)
SourceFiles 69109
SourceFileSize 906577560 (865 MB)
NewFiles 69109
NewFileSize 906577560 (865 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 69109
RawDeltaSize 868388867 (828 MB)
TotalDestinationSizeChange 363488138 (347 MB)
Errors 0
-------------------------------------------------

Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Thu Dec 1 05:37:53 2016
No old backup sets found, nothing deleted.

Conclusion

Toutes nos félicitations! Nous avons notre solution de sauvegarde automatisée entièrement opérationnelle prête à l'emploi. L'un des principaux avantages de Duplicity par rapport aux autres solutions de sauvegarde est qu'il crypte les données à l'aide de la clé GnuPG. Il fournit également une solution de sauvegarde automatisée qui est excellente et peut être effectuée à l'aide de simples tâches Cron. J'espère que cet article vous sera utile ! Veuillez publier vos précieux commentaires et suggestions à ce sujet.


Ubuntu
  1. Comment créer un VPN sur Ubuntu 20.04 en utilisant Wireguard

  2. Comment configurer des clés SSH sur Ubuntu 18.04

  3. Comment installer WordPress avec Nginx sur Ubuntu 18.04

  4. Comment synchroniser des répertoires à l'aide de Lsyncd sur Ubuntu 20.04

  5. Comment installer Duplicity sur Ubuntu ?

Comment installer Grafana sur Ubuntu 20.04

Comment installer Browsh sur Ubuntu 20.04

Comment configurer un VPN sur Ubuntu

Comment installer Ansible sur Ubuntu 20.04

Comment mettre à niveau de 12.04 à 12.10 à l'aide d'un CD ?

Comment installer Ansible sur Ubuntu 18.04