Ich habe einen Backup-Server, der Backups über viele Server hinweg koordiniert. Ich möchte, dass mein Backup-Server Discourse-Backups vom Server meines Forums herunterlädt.
Ich habe darüber nachgedacht, wie ich dem Backup-Server den Zugriff auf die Backup-Dateien auf dem Forumsserver ermöglichen könnte. Der beste Weg, den ich finden konnte, bestand darin, den Remote-Zugriff als Benutzer www-data (der die Discourse-Backups besitzt) zu erlauben.
Ich wollte nicht zulassen, dass der Backup-Server als root auf den Forumsserver shellt (aus üblichen Systemadministrator-Gründen). Außerdem wollte ich nichts tun, was meiner Meinung nach dazu führen könnte, dass Discourse während der Backups oder Wiederherstellungen Probleme bekommt. Zudem wollte ich vermeiden, einen weiteren Dienst auf dem Forumsserver zu hosten.
Hier ist also, wie ich es umgesetzt habe.
Remote-Zugriff als Benutzer www-data erlauben
- Bearbeiten Sie
/etc/passwdund ersetzen Sie die Shell vonwww-datadurch/bin/bashanstelle von/usr/sbin/nologin. - Bearbeiten Sie
/etc/passwderneut und ersetzen Sie das Home-Verzeichnis vonwww-datadurch/home/www-dataanstelle von/var/www(optional, aber für mich ansprechend). - Fügen Sie den SSH-Schlüssel des Backup-Servers zu
/home/www-data/.ssh/authorized_keyshinzu.
rsync
Schließlich habe ich auf dem Backup-Server einen stündlichen Cron-Befehl hinzugefügt, der das folgende Skript ausführt:
#!/usr/bin/env bash
set -xe
HOST="$1"
DIR="$2"
if [ -z "$HOST" ] || [ ! -d "$DIR" ]; then
echo "$0 HOST DIR"
exit 1
fi
# --ignore-existing lässt rsync alle Backups ignorieren, die bereits
# kopiert wurden.
# --delay-updates stellt sicher, dass nur vollständige Backups in $DIR landen.
# Wenn dies nicht angegeben wird, könnten unvollständige Backups in $DIR landen,
# und da --ignore-existing keine Art von Gleichheitsprüfung durchführt,
# wird das Problem nicht behoben oder erkannt.
rsync --ignore-existing --delay-updates "$HOST:/var/discourse/shared/standalone/backups/default/*" "$DIR"
Hoffentlich ist das für jemanden nützlich.