Rsync lewat ssh dengan akses root di kedua sisi

14

Saya memiliki satu server ubuntu yang lebih lama, dan satu server debian yang lebih baru dan saya memigrasikan data dari yang lama ke yang baru. Saya ingin menggunakan rsync untuk mentransfer data agar migrasi akhir lebih mudah dan lebih cepat daripada proses tar / scp / untar yang setara.

Sebagai contoh, saya ingin menyinkronkan folder beranda satu per satu ke server baru. Ini memerlukan akses root di kedua ujungnya karena tidak semua file di sisi sumber dapat dibaca dunia dan tujuannya harus ditulis dengan izin yang benar ke / home. Saya tidak tahu bagaimana cara memberikan akses root rsync di kedua sisi.

Saya telah melihat beberapa pertanyaan terkait, tetapi tidak ada yang cocok dengan apa yang saya coba lakukan.

Saya telah mengatur sudo dan bekerja di kedua server.

Tim Abell
sumber

Jawaban:

14

Sebenarnya Anda TIDAK perlu mengizinkan penghentian root melalui SSH untuk menjalankan rsync seperti yang disarankan Antoine. Transportasi dan otentikasi sistem dapat dilakukan sepenuhnya melalui akun pengguna selama Anda dapat menjalankan rsync dengan sudo di kedua ujungnya untuk membaca dan menulis file.

Sebagai pengguna di server tujuan Anda, Anda dapat menyedot data dari server sumber Anda seperti ini:

sudo rsync -aPe ssh --rsync-path='sudo rsync' boron:/home/fred /home/

Pengguna yang Anda jalankan seperti pada kedua server akan memerlukan akses sudo * tanpa kata sandi ke rsync binary, tetapi Anda TIDAK perlu mengaktifkan ssh login sebagai root di mana saja. Jika pengguna yang Anda gunakan tidak cocok dengan ujung yang lain, Anda dapat menambahkan pengguna @ boron: untuk menentukan pengguna jarak jauh yang berbeda.

Semoga berhasil.

* atau Anda harus memasukkan kata sandi secara manual di dalam jendela batas waktu.

Caleb
sumber
5
Meskipun ini adalah pertanyaan lama, saya ingin menambahkan kata AWAS ke jawaban yang diterima ini. Dari pemahaman saya, mengizinkan "sudo rsync" tanpa kata sandi sama dengan membuka akun root ke login jarak jauh. Ini karena dengan ini sangat mudah untuk mendapatkan akses root penuh, misalnya karena semua file sistem dapat diunduh, dimodifikasi dan diganti tanpa kata sandi.
Ascurion
3

Jika data Anda tidak terlalu sensitif, Anda bisa menggunakan tardan socat. Dalam pengalaman saya, ini seringkali lebih cepat daripada rsyncover ssh.

Anda membutuhkan socatatau netcatdi kedua sisi.

Pada host target, buka direktori tempat Anda ingin meletakkan data Anda, setelah itu jalankan:
socat TCP-LISTEN:4444 - | tar xzf -

Jika host target mendengarkan, mulailah dengan sumber seperti:
tar czf - /home/fred /home/ | socat - TCP:ip-of-remote-server:4444

Untuk pengaturan ini, Anda memerlukan koneksi yang andal antara 2 server.

zagyi
sumber
Poin yang bagus. Di lingkungan tepercaya, Anda akan mengambil banyak kecepatan dengan tidak mengenkripsi. Mungkin tidak masalah pada file kecil, tetapi dengan GB data akan.
pboin
2

Ok, saya telah mengumpulkan semua petunjuk untuk mendapatkan sesuatu yang bekerja untuk saya.

Mari kita memanggil server "src" & "dst".

Siapkan pasangan kunci untuk root pada server tujuan, dan salin kunci publik ke server sumber:

dest $ sudo -i
dest # ssh-keygen
dest # exit
dest $ scp /root/id_rsa.pub src:

Tambahkan kunci publik ke kunci resmi root di server sumber

src $ sudo -i
src # cp /home/tim/id_rsa.pub .ssh/authorized_keys

Kembali ke server tujuan, tarik data dengan rsync:

dest $ sudo -i
dest # rsync -aP src:/home/fred /home/
Tim Abell
sumber