Muszę zsynchronizować katalog ze zdalnym serwerem, aby wszystkie pliki należące do użytkownika X i grupy Y na maszynie źródłowej (lokalnej) były mapowane na użytkownika W i grupę Z na maszynie docelowej (zdalnej). Jeśli to możliwe, używając ssh jako transportu, ale jeśli muszę użyć demona rsync, to również jest w porządku.
Czy jest na to sposób? Szukam sposobu na ustanowienie dowolnej mapy użytkowników / grup, takiej jak
local user X => remote user W
local group Y => remote group Z
... and as many of these as needed.
To powinien być dość powszechny przypadek użycia, prawda? Np. Mam pliki na moim komputerze lokalnym, gdzie moja nazwa użytkownika to X, i muszę przesłać je na serwer sieciowy, gdzie muszą należeć do danego użytkownika, który nie ma tej samej nazwy ani tego samego identyfikatora UID, co mój użytkownik na mój komputer osobisty.
Nie mogę tego znaleźć na stronie manuala rsync ...
LINUX na komputerze lokalnym i zdalnym (Ubuntu local, centOS remote)
Polecenie, które próbowałem: rsync -avz / path / to / local [email protected]: / path / to / remote
źródło
Odpowiedzi:
Rsync wersja 3.1.0 wprowadziła właśnie w tym celu opcje
--usermap
i--groupmap
. Zobacz stronę manuala .źródło
Ostatnia wersja (co najmniej 3.1.1) rsync pozwala określić „zdalną własność”:
Zmienia właściciela tomu na www-data (inaczej PHP / Nginx). Jeśli używasz Maca jako klienta, użyj brew, aby uaktualnić do ostatniej wersji. A na serwerze pobierz źródła archiwów, a następnie „zrób to”!
źródło
Jeśli chcesz zmienić własność plików na dowolnych użytkowników, musisz najpierw zostać rootem w polu docelowym.
Nie wydaje mi się, aby taka funkcja była zintegrowana z rsync, ale można ją osiągnąć, uruchamiając a
find
po wykonaniu rsync.Być może takie polecenie załatwi sprawę: Na przykład przetłumacz z UID 1000 => 505 i UID 1001 => 700:
Jeśli masz wielu użytkowników, możesz rozważyć użycie pętli z mapowaniem w swoim języku preferencji.
Baw się dobrze.
źródło
id
na swoim komputerze, aby zobaczyć. Dlatego jeśli użyjesz takich identyfikatorów, zakładasz, że na komputerze zdalnym nie ma użytkownika o tym samym identyfikatorze i prawdopodobnie nie jest to prawda.Nie jestem pewien, czy rozumiem, aby połączyć się
ssh
, musisz podać nazwę użytkownika. Nazwą użytkownika będzie użytkownik W na zdalnym komputerze należący do grupy Z. Dlatego wszystko zostanie przesłane dokładnie tak, jak chcesz:EDYCJA w odpowiedzi na komentarz PO.
Jeśli chcesz wykonać to mapowanie użytkowników i nie utracić ustawień uprawnień, nie używaj
-a
. Najpierw uruchom rsync,[email protected]
aby uzyskać prawidłową nazwę użytkownika. Następnie zamiast tego-a
spowoduje to zachowanie własności, określ opcje ręcznie. Odman rsync
:-a
Aktywuje więc wszystkie powyższe opcje, ale nie chcesz zachować grupy ani właściciela. To polecenie powinno robić, co chcesz:Ponieważ logujesz się teraz jako użytkownik
mywww
i nie zapisujesz już informacji o właścicielu / grupie, kopie wykonane przez użytkownikarsync
będą należeć domywww
użytkownika.źródło
-a
umożliwia zachowanie opcji właściciela i grupy. Zobacz moją zaktualizowaną odpowiedź.-a
dokonało) ii) jasno wyjaśnij wszystkie ograniczenia, które posiadasz, wspomniałeś tylko o jednym użytkowniku do ostatniego komentarza i iii ) wspomnij o swoim systemie operacyjnym. W każdym razie sposobem na torsync
byłoby skopiowanie jednego zestawu plików jako,mywww@remote
a następnego zestawu jakoroot@remote
.-a
co zachowuje własność. Podane przykłady sugerowały, że musisz to zrobić tylko dla jednego użytkownika. W każdym razie, polecam użyćrsync
, po prostu sporządzić listę różnych plików, które chcesz skopiować dla każdego użytkownika i uruchomić wiele rsyncs łączących się ze zdalnym komputerem z odpowiednią nazwą użytkownika. To będzie prostsze i bezpieczniejsze.