Como sincronizar diretórios usando Lsyncd no Ubuntu 20.04
Nesta página
- Pré-requisitos
- Primeiros passos
- Instalar Lsyncd
- Configurar Lsyncd para sincronizar diretórios locais
- Configurar o Lsyncd para sincronizar diretórios remotos
- Conclusão
Lsyncd é uma ferramenta simples e leve que permite espelhar seu diretório local em outro diretório no servidor remoto. Ele funciona monitorando continuamente o diretório especificado em busca de alterações a cada poucos segundos e, se forem feitas alterações, elas serão sincronizadas com o servidor remoto. Esta ferramenta é muito útil para sincronizar os dados de uma área segura para uma área não segura.
Neste tutorial, mostraremos como instalar e usar o Lsyncd para sincronizar diretórios locais e remotos.
Pré-requisitos
- Um servidor rodando Ubuntu 20.04.
- Uma senha root é configurada em seu servidor.
Começando
Antes de começar, é uma boa ideia atualizar seu pacote de sistemas para a versão mais recente. Você pode atualizá-los usando o seguinte comando:
apt-get update -y
apt-get upgrade -y
Depois que todos os pacotes forem atualizados, reinicie o sistema para aplicar as alterações.
Instalar o Lsyncd
Por padrão, o pacote Lsyncd está disponível na maioria dos sistemas operacionais Linux. Você pode instalá-lo apenas executando o seguinte comando:
apt-get install lsyncd -y
Depois que o Lsyncd estiver instalado, você pode verificar a versão instalada do Lsyncd com o seguinte comando:
lsyncd --version
Você deve obter a seguinte saída:
Version: 2.2.3
Configurar Lsyncd para sincronizar diretórios locais
Nesta seção, configuraremos o Lsyncd para sincronizar o diretório /etc/ com o diretório /mnt/ no sistema local.
Primeiro, crie um diretório para Lsyncd com o seguinte comando:
mkdir /etc/lsyncd
Em seguida, crie um novo arquivo de configuração Lsyncd e defina o diretório de origem e destino que deseja sincronizar.
nano /etc/lsyncd/lsyncd.conf.lua
Adicione as seguintes linhas:
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
statusInterval = 20,
nodaemon = false
}
sync {
default.rsync,
source = "/etc/",
target = "/mnt"
}
Salve e feche o arquivo quando terminar.
systemctl start lsyncd
systemctl enable lsyncd
Você também pode verificar o status do serviço Lsyncd com o seguinte comando:
systemctl status lsyncd
Você deve ver a seguinte saída:
? 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.
Você pode verificar o arquivo de log Lsyncd para obter mais detalhes, conforme mostrado abaixo:
tail -f /var/log/lsyncd/lsyncd.log
Você deve ver a seguinte saída:
/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.
Você também pode verificar o status de sincronização com o seguinte comando:
tail -f /var/log/lsyncd/lsyncd.status
Você deve conseguir ver as alterações no diretório /mnt com o seguinte comando:
ls /mnt/
Você deve ver que todos os arquivos e diretórios do diretório /etc foram adicionados ao diretório /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
Configurar o Lsyncd para sincronizar diretórios remotos
Nesta seção, configuraremos o Lsyncd para sincronizar o diretório /etc/ no sistema local com o diretório /opt/ no sistema remoto.
Antes de começar, você precisará configurar a autenticação baseada em chave SSH entre o sistema local e o servidor remoto para que o sistema local possa se conectar ao servidor remoto sem senha.
No sistema local, execute o seguinte comando para gerar uma chave pública e privada:
ssh-keygen -t rsa
Você deve ver a seguinte saída:
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]-----+
O comando acima irá gerar uma chave pública e privada dentro do diretório ~/.ssh.
Em seguida, você precisará copiar a chave pública para o servidor remoto. Você pode copiá-lo com o seguinte comando:
ssh-copy-id
Você será solicitado a fornecer a senha do usuário root remoto, conforme mostrado abaixo:
'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.
Assim que o usuário for autenticado, a chave pública será anexada ao arquivo autorizado_chaves do usuário remoto e a conexão será encerrada.
Agora, você deve conseguir fazer login no servidor remoto sem digitar a senha.
Para testá-lo, tente acessar seu servidor remoto via SSH:
ssh
Se tudo correu bem, você será logado imediatamente.
Em seguida, você precisará editar o arquivo de configuração Lsyncd e definir o rsyncssh e as variáveis do host de destino:
nano /etc/lsyncd/lsyncd.conf.lua
Altere o arquivo como mostrado abaixo:
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"
}
Salve e feche o arquivo quando terminar. Em seguida, reinicie o serviço Lsyncd para iniciar a sincronização.
systemctl restart lsyncd
Você pode verificar o status da sincronização com o seguinte comando:
tail -f /var/log/lsyncd/lsyncd.log
Você deve ver a seguinte saída:
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
Você deve conseguir ver as alterações no diretório /opt no servidor remoto com o seguinte comando:
ls /opt
Você deve ver que todos os arquivos e diretórios do diretório /etc são adicionados ao diretório /opt dos servidores remotos:
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
Conclusão
No guia acima, aprendemos como instalar e configurar o Lsyncd para sincronização local e sincronização remota. Agora você pode usar o Lsyncd no ambiente de produção para fins de backup. Sinta-se à vontade para me perguntar se tiver alguma dúvida.