Ricerca nel sito web

Come sincronizzare le directory usando Lsyncd su Ubuntu 20.04


Su questa pagina

  1. Prerequisiti
  2. Per iniziare
  3. Installa Lsyncd
  4. Configura Lsyncd per sincronizzare le directory locali
  5. Configura Lsyncd per sincronizzare le directory remote
  6. Conclusione

Lsyncd è uno strumento semplice e leggero che ti consente di eseguire il mirroring della tua directory locale su un'altra directory sul server remoto. Funziona monitorando continuamente la directory specificata per le modifiche ogni pochi secondi e se vengono apportate modifiche, vengono sincronizzate con il server remoto. Questo strumento è molto utile per sincronizzare i dati da un'area protetta a un'area non protetta.

In questo tutorial, ti mostreremo come installare e utilizzare Lsyncd per sincronizzare le directory locali e le directory remote.

Prerequisiti

  • Un server che esegue Ubuntu 20.04.
  • Una password di root è impostata sul tuo server.

Iniziare

Prima di iniziare, è una buona idea aggiornare il pacchetto di sistema all'ultima versione. Puoi aggiornarli usando il seguente comando:

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

Una volta aggiornati tutti i pacchetti, riavvia il sistema per applicare le modifiche.

Installa Lsyncd

Per impostazione predefinita, il pacchetto Lsyncd è disponibile nella maggior parte dei sistemi operativi Linux. Puoi installarlo semplicemente eseguendo il seguente comando:

apt-get install lsyncd -y

Una volta installato Lsyncd, puoi verificare la versione installata di Lsyncd con il seguente comando:

lsyncd --version

Dovresti ottenere il seguente output:

Version: 2.2.3

Configura Lsyncd per sincronizzare le directory locali

In questa sezione, configureremo Lsyncd per sincronizzare la directory /etc/ con la directory /mnt/ sul sistema locale.

Innanzitutto, crea una directory per Lsyncd con il seguente comando:

mkdir /etc/lsyncd

Successivamente, crea un nuovo file di configurazione Lsyncd e definisci la directory di origine e di destinazione che desideri sincronizzare.

nano /etc/lsyncd/lsyncd.conf.lua

Aggiungi le seguenti righe:

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

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

Salva e chiudi il file quando hai finito.

systemctl start lsyncd
systemctl enable lsyncd

Puoi anche controllare lo stato del servizio Lsyncd con il seguente comando:

systemctl status lsyncd

Dovresti vedere il seguente output:

? 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.

Puoi controllare il file di registro di Lsyncd per maggiori dettagli come mostrato di seguito:

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

Dovresti vedere il seguente output:

/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.

Puoi anche controllare lo stato della sincronizzazione con il seguente comando:

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

Dovresti essere in grado di vedere le modifiche nella directory /mnt con il seguente comando:

ls /mnt/

Dovresti vedere che tutti i file e le directory dalla directory /etc vengono aggiunti alla directory /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

Configura Lsyncd per sincronizzare le directory remote

In questa sezione, configureremo Lsyncd per sincronizzare la directory /etc/ sul sistema locale con la directory /opt/ sul sistema remoto.

Prima di iniziare, dovrai configurare l'autenticazione basata su chiave SSH tra il sistema locale e il server remoto in modo che il sistema locale possa connettersi al server remoto senza password.

Sul sistema locale, eseguire il seguente comando per generare una chiave pubblica e privata:

ssh-keygen -t rsa

Dovresti vedere il seguente output:

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

Il comando precedente genererà una chiave privata e una pubblica all'interno della directory ~/.ssh.

Successivamente, dovrai copiare la chiave pubblica sul server remoto. Puoi copiarlo con il seguente comando:

ssh-copy-id 

Ti verrà chiesto di fornire la password dell'utente root remoto come mostrato di seguito:

's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh ''"
and check to make sure that only the key(s) you wanted were added.

Una volta che l'utente è stato autenticato, la chiave pubblica verrà aggiunta al file authorized_keys dell'utente remoto e la connessione verrà chiusa.

Ora dovresti essere in grado di accedere al server remoto senza inserire la password.

Per testarlo basta provare ad accedere al tuo server remoto tramite SSH:

ssh 

Se tutto è andato bene, verrai immediatamente loggato.

Successivamente, dovrai modificare il file di configurazione di Lsyncd e definire le variabili rsyncssh e host di destinazione:

nano /etc/lsyncd/lsyncd.conf.lua

Modificare il file come mostrato di seguito:

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"
}

Salva e chiudi il file quando hai finito. Quindi, riavvia il servizio Lsyncd per avviare la sincronizzazione.

systemctl restart lsyncd

Puoi controllare lo stato della sincronizzazione con il seguente comando:

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

Dovresti vedere il seguente output:

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

Dovresti essere in grado di vedere le modifiche nella directory /opt sul server remoto con il seguente comando:

ls /opt

Dovresti vedere che tutti i file e le directory dalla directory /etc vengono aggiunti alla directory /opt dei server remoti:

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

Conclusione

Nella guida sopra, abbiamo imparato come installare e configurare Lsyncd per la sincronizzazione locale e la sincronizzazione remota. È ora possibile utilizzare Lsyncd nell'ambiente di produzione per scopi di backup. Non esitate a chiedermi se avete domande.