Normalerweise verwende ich einen grafischen SSH-Client, um ein lokales und ein Remote-Verzeichnis zu synchronisieren. Und ich muss den Besitz aller Dateien von root
nach festlegen www-data
.
Kann ich dasselbe mit Rsync machen, nur dass ich es als www-data
statt 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
- Maschine:
- Zu:
- Maschine:
destmachine
- Benutzer:
destuser
andie SSH-Verbindung herstellen. - Verzeichnis:
/tmp
- Endgültiger Besitzer der Dateien:
jenkins
.
- Maschine:
Lösung
rsync --rsync-path 'sudo -u jenkins rsync' -avP --delete /var/lib/jenkins destuser@destmachine:/tmp
Lesen Sie hier mehr: