GNU/Linux >> Tutoriels Linux >  >> Ubuntu

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

Lsyncd est un outil simple et léger qui vous permet de mettre en miroir votre répertoire local vers un autre répertoire sur le serveur distant. Il fonctionne en surveillant en permanence le répertoire spécifié pour les modifications toutes les quelques secondes et si des modifications sont apportées, elles sont synchronisées avec le serveur distant. Cet outil est très utile pour synchroniser les données d'une zone sécurisée vers une zone non sécurisée.

Dans ce tutoriel, nous allons vous montrer comment installer et utiliser Lsyncd pour synchroniser les répertoires locaux et les répertoires distants.

Prérequis

  • Un serveur exécutant Ubuntu 20.04.
  • Un mot de passe root est configuré sur votre serveur.

Mise en route

Avant de commencer, c'est une bonne idée de mettre à jour le package de votre système vers la dernière version. Vous pouvez les mettre à jour à l'aide de la commande suivante :

apt-get update -y
apt-get upgrade -y

Une fois tous les packages mis à jour, redémarrez votre système pour appliquer les modifications.

Installer Lsyncd

Par défaut, le package Lsyncd est disponible dans la plupart des systèmes d'exploitation Linux. Vous pouvez l'installer en exécutant simplement la commande suivante :

apt-get install lsyncd -y

Une fois Lsyncd installé, vous pouvez vérifier la version installée de Lsyncd avec la commande suivante :

lsyncd --version

Vous devriez obtenir le résultat suivant :

Version: 2.2.3

Configurer Lsyncd pour synchroniser les répertoires locaux

Dans cette section, nous allons configurer Lsyncd pour synchroniser le répertoire /etc/ avec le répertoire /mnt/ sur le système local.

Commencez par créer un répertoire pour Lsyncd avec la commande suivante :

mkdir /etc/lsyncd

Ensuite, créez un nouveau fichier de configuration Lsyncd et définissez les répertoires source et destination que vous souhaitez synchroniser.

nano /etc/lsyncd/lsyncd.conf.lua

Ajoutez les lignes suivantes :

settings {
        logfile = "/var/log/lsyncd/lsyncd.log",
        statusFile = "/var/log/lsyncd/lsyncd.status",
   statusInterval = 20,
   nodaemon   = false
}

sync {
        default.rsync,
        source = "/etc/",
        target = "/mnt"
}

Enregistrez et fermez le fichier lorsque vous avez terminé.

systemctl start lsyncd
systemctl enable lsyncd

Vous pouvez également vérifier l'état du service Lsyncd avec la commande suivante :

systemctl status lsyncd

Vous devriez voir le résultat suivant :

? lsyncd.service - LSB: lsyncd daemon init script
     Loaded: loaded (/etc/init.d/lsyncd; generated)
     Active: active (running) since Fri 2020-05-01 03:31:20 UTC; 9s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 36946 ExecStart=/etc/init.d/lsyncd start (code=exited, status=0/SUCCESS)
      Tasks: 2 (limit: 4620)
     Memory: 12.5M
     CGroup: /system.slice/lsyncd.service
             ??36921 /usr/bin/lsyncd -pidfile /var/run/lsyncd.pid /etc/lsyncd/lsyncd.conf.lua
             ??36952 /usr/bin/lsyncd -pidfile /var/run/lsyncd.pid /etc/lsyncd/lsyncd.conf.lua

May 01 03:31:20 ubuntu20 systemd[1]: lsyncd.service: Succeeded.
May 01 03:31:20 ubuntu20 systemd[1]: Stopped LSB: lsyncd daemon init script.
May 01 03:31:20 ubuntu20 systemd[1]: Starting LSB: lsyncd daemon init script...
May 01 03:31:20 ubuntu20 lsyncd[36946]:  * Starting synchronization daemon lsyncd
May 01 03:31:20 ubuntu20 lsyncd[36951]: 03:31:20 Normal: --- Startup, daemonizing ---
May 01 03:31:20 ubuntu20 lsyncd[36946]:    ...done.
May 01 03:31:20 ubuntu20 systemd[1]: Started LSB: lsyncd daemon init script.

Vous pouvez consulter le fichier journal Lsyncd pour plus de détails, comme indiqué ci-dessous :

tail -f /var/log/lsyncd/lsyncd.log

Vous devriez voir le résultat suivant :

/lsyncd/lsyncd.conf.lua
Fri May  1 03:30:57 2020 Normal: Finished a list after exitcode: 0
Fri May  1 03:31:20 2020 Normal: --- Startup, daemonizing ---
Fri May  1 03:31:20 2020 Normal: recursive startup rsync: /etc/ -> /mnt/
Fri May  1 03:31:20 2020 Normal: Startup of /etc/ -> /mnt/ finished.

Vous pouvez également vérifier l'état de la synchronisation avec la commande suivante :

tail -f /var/log/lsyncd/lsyncd.status

Vous devriez pouvoir voir les changements dans le répertoire /mnt avec la commande suivante :

ls /mnt/

Vous devriez voir que tous les fichiers et répertoires du répertoire /etc sont ajoutés au répertoire /mnt :

acpi                    dconf           hosts            logrotate.conf       newt                     rc2.d          subuid-
adduser.conf            debconf.conf    hosts.allow      logrotate.d          nginx                    rc3.d          sudoers
alternatives            debian_version  hosts.deny       lsb-release          nsswitch.conf            rc4.d          sudoers.d
apache2                 default         init             lsyncd               ntp.conf                 rc5.d          sysctl.conf
apparmor                deluser.conf    init.d           ltrace.conf          openal                   rc6.d          sysctl.d
apparmor.d              depmod.d        initramfs-tools  lvm                  opt                      rcS.d          systemd
apport                  dhcp            inputrc          machine-id           os-release               resolv.conf    terminfo
apt                     dnsmasq.d       insserv.conf.d   magic                overlayroot.conf         rmt            timezone
at.deny                 docker          iproute2         magic.mime           PackageKit               rpc            tmpfiles.d
bash.bashrc             dpkg            iscsi            mailcap              pam.conf                 rsyslog.conf   ubuntu-advantage
bash_completion         e2scrub.conf    issue            mailcap.order        pam.d                    rsyslog.d      ucf.conf
bash_completion.d       environment     issue.net        manpath.config       passwd                   screenrc       udev
bindresvport.blacklist  ethertypes      kernel           mdadm                passwd-                  securetty      ufw
binfmt.d                fonts           kernel-img.conf  mime.types           perl                     security       update-manager
byobu                   fstab           landscape        mke2fs.conf          php                      selinux        update-motd.d
ca-certificates         fuse.conf       ldap             modprobe.d           pki                      sensors3.conf  update-notifier
ca-certificates.conf    fwupd           ld.so.cache      modules              pm                       sensors.d      vdpau_wrapper.cfg
calendar                gai.conf        ld.so.conf       modules-load.d       polkit-1                 services       vim
console-setup           groff           ld.so.conf.d     mtab                 pollinate                shadow         vmware-tools
cron.d                  group           legal            multipath            popularity-contest.conf  shadow-        vtrgb
cron.daily              group-          letsencrypt      multipath.conf       profile                  shells         vulkan
cron.hourly             grub.d          libaudit.conf    mysql                profile.d                skel           wgetrc
cron.monthly            gshadow         libnl-3          nanorc               protocols                sos.conf       X11
crontab                 gshadow-        locale.alias     netplan              pulse                    ssh            xattr.conf
cron.weekly             gss             locale.gen       network              python3                  ssl            xdg
cryptsetup-initramfs    hdparm.conf     localtime        networkd-dispatcher  python3.8                subgid         zsh_command_not_found
crypttab                host.conf       logcheck         NetworkManager       rc0.d                    subgid-
dbus-1                  hostname        login.defs       networks             rc1.d                    subuid

Configurer Lsyncd pour synchroniser les répertoires distants

Dans cette section, nous allons configurer Lsyncd pour synchroniser le répertoire /etc/ sur le système local avec le répertoire /opt/ sur le système distant.

Avant de commencer, vous devrez configurer l'authentification basée sur une clé SSH entre le système local et le serveur distant afin que le système local puisse se connecter au serveur distant sans mot de passe.

Sur le système local, exécutez la commande suivante pour générer une clé publique et privée :

ssh-keygen -t rsa

Vous devriez voir le résultat suivant :

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:c7fhjjhAamFjlk6OkKPhsphMnTZQFutWbr5FnQKSJjE [email protected]
The key's randomart image is:
+---[RSA 3072]----+
| E ..            |
|  ooo            |
| oo= +           |
|=.+ % o . .      |
|[email protected] oSo. o    |
|ooo=B o .o o o   |
|=o.... o    o    |
|+.    o .. o     |
|     .  ... .    |
+----[SHA256]-----+

La commande ci-dessus générera une clé privée et publique dans le répertoire ~/.ssh.

Ensuite, vous devrez copier la clé publique sur le serveur distant. Vous pouvez le copier avec la commande suivante :

ssh-copy-id [email protected]

Il vous sera demandé de fournir le mot de passe de l'utilisateur root distant comme indiqué ci-dessous :

Mot de passe de
[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.

Une fois l'utilisateur authentifié, la clé publique sera ajoutée au fichier de clés autorisées de l'utilisateur distant et la connexion sera fermée.

Maintenant, vous devriez pouvoir vous connecter au serveur distant sans entrer de mot de passe.

Pour le tester, essayez simplement de vous connecter à votre serveur distant via SSH :

ssh [email protected]

Si tout s'est bien passé, vous serez immédiatement connecté.

Ensuite, vous devrez éditer le fichier de configuration Lsyncd et définir les variables d'hôte rsyncssh et cible :

nano /etc/lsyncd/lsyncd.conf.lua

Modifiez le fichier comme indiqué ci-dessous :

settings {
        logfile = "/var/log/lsyncd/lsyncd.log",
        statusFile = "/var/log/lsyncd/lsyncd.status",
   statusInterval = 20,
   nodaemon   = false
}

sync {
        default.rsyncssh,
        source = "/etc/",
	host = "remote-server-ip",
        targetdir = "/opt"
}

Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, redémarrez le service Lsyncd pour lancer la synchronisation.

systemctl restart lsyncd

Vous pouvez vérifier l'état de la synchronisation avec la commande suivante :

tail -f /var/log/lsyncd/lsyncd.log

Vous devriez voir le résultat suivant :

Fri May  1 04:32:05 2020 Normal: --- Startup, daemonizing ---
Fri May  1 04:32:05 2020 Normal: recursive startup rsync: /etc/ -> 45.58.38.21:/opt/
Fri May  1 04:32:06 2020 Normal: Startup of "/etc/" finished: 0

Vous devriez pouvoir voir les changements dans le répertoire /opt sur le serveur distant avec la commande suivante :

ls /opt

Vous devriez voir que tous les fichiers et répertoires du répertoire /etc sont ajoutés au répertoire /opt du serveur distant :

acpi                    dconf           hosts            logrotate.conf       newt                     rc2.d          subuid-
adduser.conf            debconf.conf    hosts.allow      logrotate.d          nginx                    rc3.d          sudoers
alternatives            debian_version  hosts.deny       lsb-release          nsswitch.conf            rc4.d          sudoers.d
apache2                 default         init             lsyncd               ntp.conf                 rc5.d          sysctl.conf
apparmor                deluser.conf    init.d           ltrace.conf          openal                   rc6.d          sysctl.d
apparmor.d              depmod.d        initramfs-tools  lvm                  opt                      rcS.d          systemd
apport                  dhcp            inputrc          machine-id           os-release               resolv.conf    terminfo
apt                     dnsmasq.d       insserv.conf.d   magic                overlayroot.conf         rmt            timezone
at.deny                 docker          iproute2         magic.mime           PackageKit               rpc            tmpfiles.d
bash.bashrc             dpkg            iscsi            mailcap              pam.conf                 rsyslog.conf   ubuntu-advantage
bash_completion         e2scrub.conf    issue            mailcap.order        pam.d                    rsyslog.d      ucf.conf
bash_completion.d       environment     issue.net        manpath.config       passwd                   screenrc       udev
bindresvport.blacklist  ethertypes      kernel           mdadm                passwd-                  securetty      ufw
binfmt.d                fonts           kernel-img.conf  mime.types           perl                     security       update-manager
byobu                   fstab           landscape        mke2fs.conf          php                      selinux        update-motd.d
ca-certificates         fuse.conf       ldap             modprobe.d           pki                      sensors3.conf  update-notifier
ca-certificates.conf    fwupd           ld.so.cache      modules              pm                       sensors.d      vdpau_wrapper.cfg
calendar                gai.conf        ld.so.conf       modules-load.d       polkit-1                 services       vim
console-setup           groff           ld.so.conf.d     mtab                 pollinate                shadow         vmware-tools
cron.d                  group           legal            multipath            popularity-contest.conf  shadow-        vtrgb
cron.daily              group-          letsencrypt      multipath.conf       profile                  shells         vulkan
cron.hourly             grub.d          libaudit.conf    mysql                profile.d                skel           wgetrc
cron.monthly            gshadow         libnl-3          nanorc               protocols                sos.conf       X11
crontab                 gshadow-        locale.alias     netplan              pulse                    ssh            xattr.conf
cron.weekly             gss             locale.gen       network              python3                  ssl            xdg
cryptsetup-initramfs    hdparm.conf     localtime        networkd-dispatcher  python3.8                subgid         zsh_command_not_found
crypttab                host.conf       logcheck         NetworkManager       rc0.d                    subgid-
dbus-1                  hostname        login.defs       networks             rc1.d                    subuid

Conclusion

Dans le guide ci-dessus, nous avons appris comment installer et configurer Lsyncd pour la synchronisation locale et la synchronisation à distance. Vous pouvez désormais utiliser Lsyncd dans l'environnement de production à des fins de sauvegarde. N'hésitez pas à me demander si vous avez des questions.


Ubuntu
  1. Comment installer Maven sur Ubuntu 18.04

  2. Comment installer WordPress avec Nginx sur Ubuntu 18.04

  3. Comment surveiller Nginx à l'aide de Netdata sur Ubuntu 16.04

  4. Comment synchroniser les répertoires locaux et distants sous Linux

  5. Comment installer qBitTorrent 4.0 dans Ubuntu en utilisant PPA

Comment installer Grafana sur Ubuntu 20.04

Comment installer Browsh sur Ubuntu 20.04

Comment configurer un VPN sur Ubuntu

Comment installer Winamp sur Ubuntu en utilisant PlayOnLinux

Comment installer Ansible sur Ubuntu 20.04

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