Tidak dapat mengaktifkan rsync dalam mode daemon-over-ssh

11

Saya mencoba mengatur rsync untuk menyalin data dari server setiap hari. Untuk membuat sistem seketat mungkin, saya mencoba menggunakan mode yang dijelaskan dalam halaman manual sebagai: "MENGGUNAKAN FITUR RSYNC-DAEMON MELALUI KONEKSI SHELL-REMOTE"

Jadi saya telah meletakkan file bernama rsyncd.conf di folder home root:

[root]
path = /
read only = true

dan mencoba menyalin / etc / passwd sebagai ujian:

rsync -vv -e ssh myserver::root/etc/passwd .

Tapi saya mendapatkan yang berikut ini:

opening connection using: ssh myserver rsync --server --daemon . 
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(635) [receiver=3.0.3]

Alasan saya melakukan semua ini adalah bahwa begitu saya membuatnya berfungsi, saya berencana untuk membatasi akses dengan menentukan perintah

rsync --server --daemon .

di ~ / .ssh / authorized_keys

rjmunro
sumber
Apa yang masuk / var / log / aman atau / var / log / pesan di server penerima?
Dave Cheney
Itu: rsync: tidak dapat membuka file konfigurasi "/etc/rsyncd.conf": Tidak ada file atau direktori (2) Terima kasih, itu mengarah ke solusi, yang akan saya posting sebagai jawaban.
rjmunro

Jawaban:

11

Tampaknya ada bug dalam dokumentasi atau penegasan rsync. man rsync mengatakan:

Rsync mendukung menyambung ke host menggunakan shell jarak jauh dan kemudian menelurkan server "daemon" sekali pakai yang mengharapkan untuk membaca file konfigurasi di dir home dari pengguna jarak jauh.

tetapi ketika terhubung ke root, menurut / var / log / messages, ia mencari di /etc/rsyncd.conf untuk file konfigurasi (lokasi standar untuk file rsyncd.conf saat tidak digunakan di SSH.

Saya harus memaksa server ssh untuk menggunakan file konfigurasi yang tepat dengan menambahkan

command="rsync --config=/root/rsyncd.conf --server --daemon ."

ke /root/.ssh/authorized_keys.

Alasan saya tidak hanya meletakkan konfigurasi di lokasi default adalah bahwa saya tidak ingin seseorang secara tidak sengaja memulai daemon rsync yang normal - Saya hanya ingin daemon memiliki akses sebanyak ini ketika telah mendapatkan kunci ssh yang benar.

rjmunro
sumber
5

rsync dalam mode daemon bukan yang saya sarankan jika Anda ingin menguncinya sedekat mungkin. Anda ingin membatasi perintah bahwa kunci SSH diizinkan untuk dijalankan dan menjalankan perintah salin menggunakan kunci itu.

Untuk mengetahui perintah apa yang membatasi kunci, jalankan baris perintah rsync yang sesuai dengan sedikit modifikasi pada perintah ssh:

rsync -avz -e 'ssh -v' stuff somewhere:/place

Anda akan melihat garis di output debug seperti:

debug1: Sending command: rsync --server -vlogDtprze.iLs . /place

Perintah persis itulah yang ingin Anda batasi kunci agar dapat dijalankan di .ssh /otorized_keys:

command="rsync --server -vlogDtprze.iLs . /place" ssh-dss AAAASSHKEY=
MikeyB
sumber
3
Saya ingin dapat melakukan backup hanya baca bagian-bagian dari sistem - mis. Backup e-mail & database SQL setiap hari, tetapi hal-hal lain seminggu sekali. Saya akan memerlukan perintah khusus dan kunci khusus untuk setiap cadangan yang mungkin, dan saya tidak akan dapat melakukan cadangan tambahan ad-hoc dengan infrastruktur yang sama.
rjmunro
2
Cukup adil - Saya mengambil "Dalam rangka untuk membuat sistem sebagai dibatasi mungkin" secara harfiah :)
MikeyB
1
Anda dapat menempatkan banyak perintah dalam skrip dan meneruskan skrip parameter sebagai input baris pertama.
alecco
1
apakah ada cara untuk membuat serial perintah tanpa harus melalui info debug? '-vlogDtprze.iLs'
qodeninja