Saya perlu rsync direktori ke server jauh sehingga semua file milik pengguna X dan grup Y pada mesin sumber (lokal) dipetakan ke pengguna W dan grup Z pada mesin tujuan (jarak jauh). Jika memungkinkan dengan menggunakan ssh sebagai transport, tetapi jika saya perlu menggunakan daemon rsync tidak masalah juga.
Apakah ada cara untuk melakukan itu? Saya mencari cara untuk membuat peta pengguna / grup yang sewenang-wenang, seperti
local user X => remote user W
local group Y => remote group Z
... and as many of these as needed.
Ini seharusnya kasus penggunaan yang cukup umum, bukan? Misalnya saya memiliki file di komputer lokal saya di mana nama pengguna saya adalah X, dan saya perlu mengunggahnya ke server web di mana mereka harus milik pengguna yang diberikan yang tidak memiliki nama yang sama atau UID yang sama dengan pengguna saya di komputer pribadi saya.
Saya tidak dapat menemukan itu di halaman manual rsync ...
LINUX pada mesin lokal dan jarak jauh (Ubuntu local, centOS remote)
Perintah yang saya coba: rsync -avz / path / ke / local [email protected]: / path / ke / remote
sumber
Jawaban:
Rsync versi 3.1.0 memperkenalkan
--usermap
dan--groupmap
opsi tepat untuk tujuan itu. Lihat halaman manual .sumber
Versi terakhir (setidaknya 3.1.1) dari rsync memungkinkan Anda menentukan "kepemilikan jarak jauh":
Mengubah kepemilikan tom ke data-www (alias PHP / Nginx). Jika Anda menggunakan Mac sebagai klien, gunakan minuman untuk meningkatkan ke versi terakhir. Dan di server Anda, unduh sumber arsip, lalu "buat" itu!
sumber
Jika Anda ingin mengubah kepemilikan file menjadi pengguna yang sewenang-wenang, Anda harus terlebih dahulu melakukan root pada kotak tujuan.
Saya tidak berpikir ada fitur seperti itu yang diintegrasikan oleh rsync, tetapi Anda dapat mencapainya dengan menjalankan
find
setelah melakukan rsync Anda.Mungkin, perintah seperti ini akan melakukan trik: Misalnya, terjemahkan dari UID 1000 => 505 dan UID 1001 => 700:
Jika Anda memiliki banyak pengguna, Anda dapat mempertimbangkan menggunakan loop dengan pemetaan, dalam bahasa predileksi Anda.
Selamat bersenang-senang.
sumber
id
di mesin Anda untuk melihatnya. Oleh karena itu, jika Anda menggunakan ID seperti ini, Anda mengasumsikan bahwa tidak ada pengguna dengan ID yang sama pada mesin jarak jauh dan itu kemungkinan tidak benar.Saya tidak yakin saya mengerti, untuk terhubung
ssh
Anda perlu memberikan nama pengguna. Nama pengguna itu akan menjadi pengguna W pada mesin jarak jauh yang milik grup Z. Oleh karena itu, semuanya akan ditransfer persis seperti yang Anda inginkan:EDIT sebagai jawaban atas komentar OP.
Jika Anda ingin melakukan pemetaan pengguna ini dan tidak kehilangan pengaturan izin, jangan gunakan
-a
. Pertama, jalankan rsync dengan[email protected]
untuk mendapatkan nama pengguna yang tepat. Kemudian, alih-alih-a
yang akan menyebabkan Anda mempertahankan kepemilikan, tentukan opsi secara manual. Dariman rsync
:Jadi,
-a
aktifkan semua opsi di atas tetapi Anda tidak ingin mempertahankan grup atau pemiliknya. Perintah ini harus melakukan apa yang Anda inginkan:Karena Anda sekarang masuk sebagai
mywww
dan tidak lagi menyimpan informasi pemilik / grup, salinan yang dibuat olehrsync
akan menjadi milikmywww
pengguna.sumber
-a
memungkinkan untuk mempertahankan opsi pemilik dan grup. Lihat jawaban saya yang diperbarui.-a
melakukan itu) ii) jelas menjelaskan semua kendala yang Anda miliki, Anda hanya menyebutkan satu pengguna sampai komentar terakhir Anda dan iii ) sebutkan OS Anda. Bagaimanapun, cara untuk melakukan ini adalah denganrsync
menyalin satu set file sebagaimywww@remote
dan set berikutnya sebagairoot@remote
.-a
yang mempertahankan kepemilikan. Contoh yang Anda berikan menyarankan Anda hanya perlu melakukan ini untuk satu pengguna. Bagaimanapun, saya akan merekomendasikan Anda gunakanrsync
, cukup buat daftar file berbeda yang ingin Anda salin untuk setiap pengguna dan jalankan beberapa rsyncs yang terhubung ke mesin jarak jauh dengan nama pengguna yang relevan. Itu akan lebih sederhana dan lebih aman.