Wie synchronisiert man Verzeichnisse mit Lsyncd unter Ubuntu 20.04
Lsyncd ist ein einfaches und leichtgewichtiges Tool, mit dem Sie Ihr lokales Verzeichnis in ein anderes Verzeichnis auf dem Remote-Server spiegeln können. Es funktioniert durch kontinuierliche Überwachung des angegebenen Verzeichnisses auf Änderungen alle paar Sekunden, und wenn Änderungen vorgenommen werden, werden diese mit dem entfernten Server synchronisiert. Dieses Tool ist sehr nützlich, um die Daten aus einem sicheren Bereich in einen nicht sicheren Bereich zu synchronisieren.
In diesem Tutorial zeigen wir Ihnen, wie Sie Lsyncd installieren und verwenden, um lokale Verzeichnisse und Remote-Verzeichnisse zu synchronisieren.
Voraussetzungen
- Ein Server, auf dem Ubuntu 20.04 läuft.
- Ein Root-Passwort wird auf Ihrem Server eingerichtet.
Erste Schritte
Bevor Sie beginnen, ist es eine gute Idee, das Paket Ihres Systems auf die neueste Version zu aktualisieren. Sie können sie mit dem folgenden Befehl aktualisieren:
apt-get update -y apt-get upgrade -y
Sobald alle Pakete aktualisiert sind, starten Sie Ihr System neu, um die Änderungen zu übernehmen.
Lsyncd installieren
Das Lsyncd-Paket ist standardmäßig in den meisten Linux-Betriebssystemen verfügbar. Sie können es installieren, indem Sie einfach den folgenden Befehl ausführen:
apt-get install lsyncd -y
Sobald Lsyncd installiert ist, können Sie die installierte Version von Lsyncd mit dem folgenden Befehl überprüfen:
lsyncd --version
Sie sollten die folgende Ausgabe erhalten:
Version: 2.2.3
Lsyncd für die Synchronisierung lokaler Verzeichnisse konfigurieren
In diesem Abschnitt werden wir Lsyncd so konfigurieren, dass das Verzeichnis /etc/ mit dem Verzeichnis /mnt/ auf dem lokalen System synchronisiert wird.
Legen Sie zunächst mit folgendem Befehl ein Verzeichnis für Lsyncd an:
mkdir /etc/lsyncd
Legen Sie dann eine neue Lsyncd-Konfigurationsdatei an und definieren Sie das Quell- und Zielverzeichnis, das Sie synchronisieren möchten.
nano /etc/lsyncd/lsyncd.conf.lua
Fügen Sie die folgenden Zeilen hinzu:
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status", statusInterval = 20, nodaemon = false } sync { default.rsync, source = "/etc/", target = "/mnt" }
Speichern und schließen Sie die Datei, wenn Sie fertig sind.
systemctl start lsyncd systemctl enable lsyncd
Sie können den Status des Lsyncd-Dienstes auch mit dem folgenden Befehl überprüfen:
systemctl status lsyncd
Sie sollten die folgende Ausgabe sehen:
? 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.
Sie können die Lsyncd-Protokolldatei für weitere Details wie unten dargestellt überprüfen:
tail -f /var/log/lsyncd/lsyncd.log
Sie sollten die folgende Ausgabe sehen:
/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.
Sie können den Synchronisationsstatus auch mit dem folgenden Kommando überprüfen:
tail -f /var/log/lsyncd/lsyncd.status
Sie sollten in der Lage sein, die Änderungen im Verzeichnis /mnt mit dem folgenden Befehl zu sehen:
ls /mnt/
Sie sollten sehen, dass alle Dateien und Verzeichnisse aus dem Verzeichnis /etc zum Verzeichnis /mnt hinzugefügt werden:
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
Konfigurieren Sie Lsyncd zur Synchronisierung von Remote-Verzeichnissen
In diesem Abschnitt werden wir Lsyncd so konfigurieren, dass das Verzeichnis /etc/ auf dem lokalen System mit dem Verzeichnis /opt/ auf dem entfernten System synchronisiert wird.
Bevor Sie beginnen, müssen Sie eine auf SSH-Schlüsseln basierende Authentifizierung zwischen dem lokalen System und dem Remote-Server einrichten, so dass das lokale System sich ohne Passwort mit dem Remote-Server verbinden kann.
Führen Sie auf dem lokalen System den folgenden Befehl aus, um einen öffentlichen und einen privaten Schlüssel zu erzeugen:
ssh-keygen -t rsa
Sie sollten die folgende Ausgabe sehen:
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 root@ubuntu20 The key's randomart image is: +---[RSA 3072]----+ | E .. | | ooo | | oo= + | |=.+ % o . . | |o+o@.B oSo. o | |ooo=B o .o o o | |=o.... o o | |+. o .. o | | . ... . | +----[SHA256]-----+
Der obige Befehl erzeugt einen privaten und einen öffentlichen Schlüssel im Verzeichnis ~/.ssh.
Als nächstes müssen Sie den öffentlichen Schlüssel auf den Remote-Server kopieren. Sie können ihn mit dem folgenden Befehl kopieren:
ssh-copy-id root@remote-server-ip
Sie werden aufgefordert, das Passwort des entfernten Root-Benutzers wie unten gezeigt einzugeben:
root@45.58.38.21's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@45.58.38.21'" and check to make sure that only the key(s) you wanted were added.
Sobald der Benutzer authentifiziert ist, wird der öffentliche Schlüssel an die remote user authorized_keys-Datei angehängt und die Verbindung wird geschlossen.
Jetzt sollten Sie in der Lage sein, sich ohne Eingabe des Kennworts am Remote-Server anzumelden.
Um es zu testen, versuchen Sie einfach, sich über SSH auf Ihrem entfernten Server anzumelden:
ssh root@remote-server-ip
Wenn alles gut gegangen ist, werden Sie sofort eingeloggt.
Als nächstes müssen Sie die Lsyncd-Konfigurationsdatei bearbeiten und die rsyncssh- und Ziel-Host-Variablen definieren:
nano /etc/lsyncd/lsyncd.conf.lua
Ändern Sie die Datei wie unten gezeigt:
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" }
Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie dann den Lsyncd-Dienst neu, um die Synchronisierung zu starten.
systemctl restart lsyncd
Sie können den Status der Synchronisation mit dem folgenden Befehl überprüfen:
tail -f /var/log/lsyncd/lsyncd.log
Sie sollten die folgende Ausgabe sehen können:
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
Sie sollten in der Lage sein, die Änderungen im Verzeichnis /opt auf dem entfernten Server mit dem folgenden Befehl zu sehen:
ls /opt
Sie sollten sehen, dass alle Dateien und Verzeichnisse aus dem Verzeichnis /etc zum Verzeichnis /opt des Remote-Servers hinzugefügt werden:
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
Schlussfolgerung
In der obigen Anleitung haben wir gelernt, wie man Lsyncd für die lokale Synchronisation und die Fernsynchronisation installiert und konfiguriert. Sie können Lsyncd jetzt in der Produktionsumgebung für Sicherungszwecke verwenden. Zögern Sie nicht, mich zu fragen, wenn Sie Fragen haben.