Lsyncd es una herramienta simple y liviana que le permite duplicar su directorio local en otro directorio en el servidor remoto. Funciona al monitorear continuamente el directorio especificado en busca de cambios cada pocos segundos y, si se realizan cambios, se sincronizan con el servidor remoto. Esta herramienta es muy útil para sincronizar los datos de un área segura a un área no segura.
En este tutorial, le mostraremos cómo instalar y usar Lsyncd para sincronizar directorios locales y directorios remotos.
Requisitos
- Un servidor con Ubuntu 20.04.
- Se ha configurado una contraseña de root en su servidor.
Cómo empezar
Antes de comenzar, es una buena idea actualizar el paquete de su sistema a la última versión. Puede actualizarlos usando el siguiente comando:
apt-get update -y
apt-get upgrade -y
Una vez que todos los paquetes estén actualizados, reinicie su sistema para aplicar los cambios.
Instalar Lsyncd
De forma predeterminada, el paquete Lsyncd está disponible en la mayoría de los sistemas operativos Linux. Puede instalarlo simplemente ejecutando el siguiente comando:
apt-get install lsyncd -y
Una vez que Lsyncd está instalado, puede verificar la versión instalada de Lsyncd con el siguiente comando:
lsyncd --version
Deberías obtener el siguiente resultado:
Version: 2.2.3
Configurar Lsyncd para sincronizar directorios locales
En esta sección, configuraremos Lsyncd para sincronizar el directorio /etc/ con el directorio /mnt/ en el sistema local.
Primero, cree un directorio para Lsyncd con el siguiente comando:
mkdir /etc/lsyncd
A continuación, cree un nuevo archivo de configuración Lsyncd y defina el directorio de origen y destino que desea sincronizar.
nano /etc/lsyncd/lsyncd.conf.lua
Agregue las siguientes líneas:
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status", statusInterval = 20, nodaemon = false } sync { default.rsync, source = "/etc/", target = "/mnt" }
Guarde y cierre el archivo cuando haya terminado.
systemctl start lsyncd
systemctl enable lsyncd
También puede verificar el estado del servicio Lsyncd con el siguiente comando:
systemctl status lsyncd
Debería ver el siguiente resultado:
? 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.
Puede consultar el archivo de registro de Lsyncd para obtener más detalles, como se muestra a continuación:
tail -f /var/log/lsyncd/lsyncd.log
Debería ver el siguiente resultado:
/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.
También puede verificar el estado de sincronización con el siguiente comando:
tail -f /var/log/lsyncd/lsyncd.status
Debería poder ver los cambios en el directorio /mnt con el siguiente comando:
ls /mnt/
Debería ver que todos los archivos y directorios del directorio /etc se agregan al directorio /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
Configure Lsyncd para sincronizar directorios remotos
En esta sección, configuraremos Lsyncd para sincronizar el directorio /etc/ del sistema local con el directorio /opt/ del sistema remoto.
Antes de comenzar, deberá configurar la autenticación basada en clave SSH entre el sistema local y el servidor remoto para que el sistema local pueda conectarse al servidor remoto sin contraseña.
En el sistema local, ejecute el siguiente comando para generar una clave pública y privada:
ssh-keygen -t rsa
Debería ver el siguiente resultado:
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]-----+
El comando anterior generará una clave privada y pública dentro del directorio ~/.ssh.
A continuación, deberá copiar la clave pública en el servidor remoto. Puedes copiarlo con el siguiente comando:
ssh-copy-id [email protected]
Se le pedirá que proporcione la contraseña del usuario raíz remoto como se muestra a continuación:
[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 vez que el usuario esté autenticado, la clave pública se agregará al archivo de claves_autorizadas del usuario remoto y se cerrará la conexión.
Ahora, debería poder iniciar sesión en el servidor remoto sin ingresar la contraseña.
Para probarlo, simplemente intente iniciar sesión en su servidor remoto a través de SSH:
ssh [email protected]
Si todo salió bien, iniciará sesión de inmediato.
A continuación, deberá editar el archivo de configuración de Lsyncd y definir las variables de host de destino y rsyncssh:
nano /etc/lsyncd/lsyncd.conf.lua
Cambie el archivo como se muestra a continuación:
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" }
Guarde y cierre el archivo cuando haya terminado. Luego, reinicie el servicio Lsyncd para iniciar la sincronización.
systemctl restart lsyncd
Puede verificar el estado de sincronización con el siguiente comando:
tail -f /var/log/lsyncd/lsyncd.log
Debería ver el siguiente resultado:
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
Debería poder ver los cambios en el directorio /opt en el servidor remoto con el siguiente comando:
ls /opt
Debería ver que todos los archivos y directorios del directorio /etc se agregan al directorio /opt del servidor 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
Conclusión
En la guía anterior, aprendimos cómo instalar y configurar Lsyncd para sincronización local y sincronización remota. Ahora puede utilizar Lsyncd en el entorno de producción con fines de copia de seguridad. Siéntase libre de preguntarme si tiene alguna pregunta.