Überblick

Überblick

Normalerweise verwende ich einen grafischen SSH-Client, um ein lokales und ein Remote-Verzeichnis zu synchronisieren. Und ich muss den Besitz aller Dateien von rootnach festlegen www-data.

Kann ich dasselbe mit Rsync machen, nur dass ich es als www-datastatt mache root, sodass ich den Besitz nicht nachträglich festlegen muss?

Antwort1

Es ist nicht klar, was Sie tun möchten. Lassen Sie mich daher davon ausgehen, dass die lokalen Dateien dem Benutzer A und die Remotedateien dem Benutzer B gehören sollen. Führen Sie dazu als Benutzer A den folgenden Befehl aus:

rsync [options] [email protected]:/path/to/remote/dir /path/to/local/dir

dies hätte den gewünschten Effekt. Aber es ist nicht wirklich ein rsync-Problem (also gehe ich nicht näher darauf ein, was der obige Befehl bewirkt, sondern konzentriere mich auf Ihre Frage); selbst mit Ihrem grafischen SSH-Client sollten Sie dasselbe tun können, wenn Sie ihn als Benutzer A ausführen und ihn so einstellen, dass er sich beim Remote-System als Benutzer B anmeldet.

Antwort2

Vorausgesetzt, Sie verwenden als Root die in rsync integrierte Option „chown“:

sudo rsync --chown=www-data:group user@remoteIP:/var/www/html/ /var/www/html

(ersetzen Sie „Gruppe“ durch die gewünschte Gruppe oder verwenden Sie einfach --chown=www-data, ersetzen Sie auch Benutzer, Remote-IP und ändern Sie die Ordner nach Wunsch)

Wenn du den Befehl nicht als root ausführst, wird der Dateieigentümer nicht geändert, da du dafür sudo benötigst. Du müsstest den Befehl also tatsächlich als www-data ausführen, was aber zu anderen Komplikationen führt.

Antwort3

Wenn Sie „sudo -u www-data“ verwenden können, können Sie rsync mit diesem Benutzer ausführen. Wenn sich Ihr Ziel auf einem anderen Server befindet, müssen Sie auch „--rsync-path“ auf denselben Server setzen (sudo -u www-data rsync). Außerdem müssen Sie das TTY-Problem umgehen (indem Sie „-t“ in Ihrem SSH verwenden), obwohl dies je nach Ihrer Distribution und den SSH-Servereinstellungen sehr schwierig sein könnte. Ich persönlich denke, dass es einfacher ist, nur „root“ zu verwenden und anschließend „chown“ auszuführen, es sei denn, der Server erlaubt keine Remote-Root-Anmeldung.

Antwort4

Überblick

(srcmachine)  (rsync)   (destmachine)
  srcuser    -- SSH -->   destuser
                             |
                             | sudo su jenkins
                             |
                             v
                          jenkins

Nehmen wir an, Sie möchten rsync verwenden:

  • Aus:
    • Maschine:srcmachine
    • Benutzer:srcuser
    • Verzeichnis:/var/lib/jenkins
  • Zu:
    • Maschine:destmachine
    • Benutzer: destuserandie SSH-Verbindung herstellen.
    • Verzeichnis:/tmp
    • Endgültiger Besitzer der Dateien: jenkins.

Lösung

rsync --rsync-path 'sudo -u jenkins rsync' -avP --delete /var/lib/jenkins destuser@destmachine:/tmp

Lesen Sie hier mehr:

https://unix.stackexchange.com/a/546296/116861

verwandte Informationen