Rsync kann im Daemon-over-SSH-Modus nicht zum Laufen gebracht werden

11

Ich versuche, rsync so einzurichten, dass die Daten jeden Tag von einem Server kopiert werden. Um das System so eingeschränkt wie möglich zu gestalten, versuche ich, den in der Manpage beschriebenen Modus wie folgt zu verwenden: "VERWENDEN VON RSYNC-DAEMON-FUNKTIONEN ÜBER EINE FERNBEDIENUNGSANSCHLUSS"

Also habe ich eine Datei namens rsyncd.conf in den Roots-Home-Ordner gelegt:

[root]
path = /
read only = true

und versuchte, / etc / passwd als Test zu kopieren:

rsync -vv -e ssh myserver::root/etc/passwd .

Aber ich bekomme folgendes:

opening connection using: ssh myserver rsync --server --daemon . 
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(635) [receiver=3.0.3]

Der Grund, warum ich das alles mache, ist, dass ich den Zugriff durch Angabe des Befehls einschränken möchte, sobald ich ihn zum Laufen gebracht habe

rsync --server --daemon .

in ~ / .ssh / autorisierte_Tasten

rjmunro
quelle
Was ist auf dem empfangenden Server in / var / log / secure oder / var / log / messages angemeldet?
Dave Cheney
Es war: rsync: Konfigurationsdatei "/etc/rsyncd.conf" konnte nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis (2) Danke, das führte zu einer Lösung, die ich als Antwort veröffentlichen werde.
rjmunro

Antworten:

11

Es scheint einen Fehler in der Dokumentation oder der Implementierung von rsync zu geben. Mann rsync sagt:

Rsync Träger an einem Host - Anschluss eines Remote - Shell verwenden und dann Laichen eine Einweg- „Daemon“ -Server , dass erwartet , dass seine Konfigurationsdatei im lesen Hause dir des entfernten Benutzers.

Beim Herstellen einer Verbindung zu root wurde gemäß / var / log / messages in /etc/rsyncd.conf nach der Konfigurationsdatei gesucht (dem Standardspeicherort für eine rsyncd.conf-Datei, wenn diese nicht über SSH verwendet wird.

Ich musste den SSH-Server zwingen, die richtige Konfigurationsdatei durch Hinzufügen zu verwenden

command="rsync --config=/root/rsyncd.conf --server --daemon ."

zu /root/.ssh/authorized_keys.

Der Grund, warum ich die Konfiguration nicht einfach an den Standardspeicherort gestellt habe, ist, dass ich nicht wollte, dass jemand versehentlich einen normalen rsync-Dämon startet. Ich möchte nur, dass ein Dämon so viel Zugriff hat, wenn er den richtigen SSH-Schlüssel hat.

rjmunro
quelle
5

rsync im Daemon-Modus ist nicht das, was ich vorschlagen würde, wenn Sie es so fest wie möglich sperren möchten. Sie möchten den Befehl einschränken, dass ein SSH-Schlüssel ausgeführt werden darf, und den Kopierbefehl mit diesem Schlüssel aufrufen.

Um herauszufinden, auf welchen Befehl der Schlüssel beschränkt werden soll, führen Sie die entsprechende rsync-Befehlszeile mit einer geringfügigen Änderung im Befehl ssh aus:

rsync -avz -e 'ssh -v' stuff somewhere:/place

In der Debug-Ausgabe wird eine Zeile angezeigt, z. B.:

debug1: Sending command: rsync --server -vlogDtprze.iLs . /place

Mit diesem genauen Befehl möchten Sie den Schlüssel einschränken, damit er in .ssh / authorized_keys ausgeführt werden kann:

command="rsync --server -vlogDtprze.iLs . /place" ssh-dss AAAASSHKEY=
MikeyB
quelle
3
Ich möchte in der Lage sein, verschiedene schreibgeschützte Sicherungen von Teilen des Systems durchzuführen - z. B. jeden Tag E-Mail- und SQL-Datenbanken sichern, aber andere Dinge einmal pro Woche. Ich würde für jede mögliche Sicherung einen bestimmten Befehl und einen bestimmten Schlüssel benötigen und keine zusätzlichen Ad-hoc-Sicherungen mit derselben Infrastruktur durchführen können.
rjmunro
2
Fair genug - ich nehme "Um das System so eingeschränkt wie möglich zu machen" ganz wörtlich :)
MikeyB
1
Sie können mehrere Befehle in ein Skript einfügen und dem Skript die Parameter als Eingabe in der ersten Zeile übergeben.
Alecco
1
Gibt es eine Möglichkeit, die Befehlsserie zu generieren, ohne die Debug-Informationen durchgehen zu müssen? '-vlogDtprze.iLs'
qodeninja