Hallo zusammen,
Von einer vertrauensunwürdigen Maschine sollen Dateien älter als x Minuten abgeholt werden.
Wenn man der Maschine vertraut geht es ja von dort aus z.B. mit:
find /var/xyz/blubb/*.txt -type f -mmin +5 -exec rsync -avtr --remove-source-files --progress --partial --remove-source-files {} back@172.19.123.1:/home/back/transfer/ \;
Nun wird der Maschine nicht mehr vertraut, deshalb sollen die Dateien von aussen abgeholt werden, ohne dass dort weiter Scripte laufen.
Leider werden die Dateien einige Zeit lang beschrieben, so dass ein einfaches rsync nicht ausreicht, darum der Parameter -mmin +5.
Hat jemand eine (einfache) Idee?
Dateien mit rsync mit "älter als" abholen
- heisenberg
- Beiträge: 4123
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Re: Dateien mit rsync mit "älter als" abholen
Ungefähr so?
Geht auch mit tar. Aber ich mag cpio lieber, weil das CRC-Format die Datenintegrität prüfen lässt.
Ansonsten kannst Du es auch einfach mal lokal spiegeln und dann von lokal sichern. Z. B. so:
Die Zeilen sind ungetestet. Bitte vorher selbst die Bedeutung nochmal nachlesen und mit Vorsicht testen.
Wichtig: Das ist ein wichtiger Unterschied ob da eine Pipe | oder eine geschützte Pipe \| steht.
Code: Alles auswählen
ssh remote_system find -print0 ... -mmin +5 \| cpio -Hcrc --null -o \| gzip >local-archive.cpio-crc.gz
Ansonsten kannst Du es auch einfach mal lokal spiegeln und dann von lokal sichern. Z. B. so:
Code: Alles auswählen
ssh remote_system find ... -print0 ... -mmin +5 \| cpio -o --null --numeric-uid-gid \| gzip | gunzip | cpio -i --make-directories -D /lokaler/pfad --numeric-uid-gid
Wichtig: Das ist ein wichtiger Unterschied ob da eine Pipe | oder eine geschützte Pipe \| steht.
Re: Dateien mit rsync mit "älter als" abholen
Inwiefern wird denn der Maschine nicht vertraut? Jede Lösung mit rsync, die man dir vorschlagen kann, egal ob mit Vorauswahl der Dateien oder nicht, setzt voraus, dass du zumindest dem rsync-Binary und SSH-Daemon auf der entfernten, vertrauensunwürdigen Maschine „traust“.
Man könnte deine Dummy-Zeile als Dateiauswahl in rsync pipen, mit Hilfe von --files-from:
Code: Alles auswählen
ssh EVIL_HOST find '/var/xyz/blubb/*.txt' -type f -mmin +5 | rsync -avP --files-from=- --remove-source-files EVIL_HOST:/var/xyz/blubb/ /home/back/transfer/
Manchmal bekannt als Just (another) Terminal Hacker.
Re: Dateien mit rsync mit "älter als" abholen
Ich habe das nun mal ausprobiert.
EVIL_HOST:/var/xyz/blubb/ klappt nur mit EVIL_HOST:/ und dann wird der komplette Pfad im Zielverzeichnis erstellt also z.B. /home/back/transfer/var/xyz/blubb/123.txt
Was ist noch flasch?
Code: Alles auswählen
ssh EVIL_HOST find '/var/xyz/blubb/*.txt' -type f -mmin +5 | rsync -avP --files-from=- --remove-source-files EVIL_HOST:/var/xyz/blubb/ /home/back/transfer/
Was ist noch flasch?
Re: Dateien mit rsync mit "älter als" abholen
find gibt hier, so wie es aufgerufen wird, die Dateien mit absolutem Pfad aus. Den durchsuchten Ordner muss man noch, für diese Anwendung, weglassen. Dafür könntest du dem find-Aufruf ein mitgeben, damit nur der Basename ausgegeben wird. Das reicht hier, weil du keine weiteren Ordner rekursiv durchgehen und synchronisieren willst.
Dafür musst du rsync wieder das übergeben, damit es die Quelldateien anhand deren Basenames in dem Ordner sucht.
Code: Alles auswählen
-printf '%f\n'
Dafür musst du rsync wieder das
Code: Alles auswählen
EVIL_HOST:/var/xyz/blubb/
Manchmal bekannt als Just (another) Terminal Hacker.