Lsyncd è uno strumento semplice e leggero che consente di eseguire il mirroring della directory locale in 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 directory locali e directory remote.
Prerequisiti
- Un server che esegue Ubuntu 20.04.
- Una password di root è impostata sul tuo server.
Per iniziare
Prima di iniziare, è una buona idea aggiornare il pacchetto del 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/ nella directory /mnt/ sul sistema locale.
Innanzitutto, crea una directory per Lsyncd con il seguente comando:
mkdir /etc/lsyncd
Quindi, 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 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 comando seguente 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 [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]-----+
Il comando precedente genererà una chiave privata e pubblica all'interno della directory ~/.ssh.
Successivamente, dovrai copiare la chiave pubblica sul server remoto. Puoi copiarlo con il seguente comando:
ssh-copy-id [email protected]
Ti verrà chiesto di fornire la password dell'utente root remoto come mostrato di seguito:
[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.
Una volta autenticato l'utente, la chiave pubblica verrà aggiunta al file autorizzato_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 prova ad accedere al tuo server remoto tramite SSH:
ssh [email protected]
Se tutto è andato bene, verrai registrato immediatamente.
Successivamente, dovrai modificare il file di configurazione Lsyncd e definire le variabili rsyncssh e host di destinazione:
nano /etc/lsyncd/lsyncd.conf.lua
Modifica 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 del server remoto:
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. Sentiti libero di chiedermi se hai domande.