ไม่สามารถรับ rsync ให้ทำงานในโหมด daemon-over-ssh


11

ฉันพยายามตั้งค่า rsync เพื่อคัดลอกข้อมูลจากเซิร์ฟเวอร์ทุกวัน เพื่อที่จะทำให้ระบบมีข้อ จำกัด มากที่สุดฉันพยายามใช้โหมดที่อธิบายไว้ในหน้า man เป็น: "การใช้คุณสมบัติ RSYNC-DAEMON ผ่านการเชื่อมต่อแบบเปลือกระยะไกล"

ดังนั้นฉันจึงใส่ไฟล์ชื่อ rsyncd.conf ในโฟลเดอร์หลักของรูท:

[root]
path = /
read only = true

และพยายามที่จะคัดลอก / etc / passwd เป็นทดสอบ:

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

แต่ฉันได้รับต่อไปนี้:

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]

เหตุผลที่ฉันทำทั้งหมดนี้คือเมื่อฉันได้ทำงานฉันวางแผนที่จะ จำกัด การเข้าถึงโดยการระบุคำสั่ง

rsync --server --daemon .

ใน ~ / .ssh / authorized_keys


อะไรถูกบันทึกไว้ใน / var / log / secure หรือ / var / log / ข้อความบนเซิร์ฟเวอร์ที่รับ
Dave Cheney

มันเป็น: rsync: ไม่สามารถเปิดไฟล์การกำหนดค่า "/etc/rsyncd.conf": ไม่มีไฟล์หรือไดเรกทอรี (2) ขอบคุณที่นำไปสู่การแก้ปัญหาซึ่งฉันจะโพสต์เป็นคำตอบ
rjmunro

คำตอบ:


11

ดูเหมือนว่าจะมีข้อผิดพลาดในเอกสารหรือการฝัง rsync man rsyncพูดว่า:

Rsync รองรับการเชื่อมต่อกับโฮสต์โดยใช้รีโมตเชลล์แล้ววางไข่เซิร์ฟเวอร์“ daemon” แบบใช้ครั้งเดียวซึ่งคาดว่าจะอ่านไฟล์กำหนดค่าในโฮม dir ของผู้ใช้รีโมต

แต่เมื่อเชื่อมต่อกับรูทตาม / var / log / messages มันค้นหา /etc/rsyncd.conf สำหรับไฟล์ config (ตำแหน่งมาตรฐานสำหรับไฟล์ rsyncd.conf เมื่อไม่ใช้ SSH

ฉันต้องบังคับเซิร์ฟเวอร์ ssh ให้ใช้ไฟล์กำหนดค่าที่ถูกต้องโดยการเพิ่ม

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

ถึง /root/.ssh/authorized_keys

เหตุผลที่ฉันไม่เพียงวางค่าตั้งไว้ในตำแหน่งเริ่มต้นคือฉันไม่ต้องการให้ใครบางคนเริ่ม rsync daemon ปกติโดยไม่ตั้งใจ - ฉันเพียงต้องการให้ daemon มีการเข้าถึงมากเมื่อมันมีคีย์ ssh ที่ถูกต้อง


5

rsync ในโหมด daemon ไม่ใช่สิ่งที่ฉันอยากจะแนะนำถ้าคุณต้องการล็อคให้แน่นที่สุด คุณต้องการ จำกัด คำสั่งที่อนุญาตให้ใช้คีย์ SSH เพื่อเรียกใช้และเรียกใช้คำสั่งคัดลอกโดยใช้คีย์นั้น

ในการค้นหาว่าคำสั่งใดที่จะ จำกัด คีย์ให้รันบรรทัดคำสั่ง rsync ที่เหมาะสมด้วยการแก้ไขเล็กน้อยในคำสั่ง ssh:

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

คุณจะเห็นบรรทัดในผลลัพธ์การดีบักเช่น:

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

คำสั่งที่แน่นอนนั้นคือสิ่งที่คุณต้องการ จำกัด คีย์เพื่อให้สามารถเรียกใช้ใน. ssh / authorized_keys:

command="rsync --server -vlogDtprze.iLs . /place" ssh-dss AAAASSHKEY=

3
ฉันต้องการที่จะสามารถทำการสำรองข้อมูลแบบอ่านอย่างเดียวในส่วนต่าง ๆ ของระบบ - เช่นอีเมลสำรองและฐานข้อมูล SQL ทุกวัน แต่อย่างอื่นสัปดาห์ละครั้ง ฉันต้องการคำสั่งเฉพาะและคีย์เฉพาะสำหรับการสำรองข้อมูลที่เป็นไปได้แต่ละครั้งและฉันจะไม่สามารถสำรองข้อมูลแบบเฉพาะกิจได้ด้วยโครงสร้างพื้นฐานเดียวกัน
rjmunro

2
พอ Fair - ฉันใช้เวลา "เพื่อที่จะทำให้ระบบที่ จำกัด ที่เป็นไปได้" ค่อนข้างอักษร :)
MikeyB

1
คุณสามารถใส่คำสั่งหลายคำสั่งลงในสคริปต์และส่งสคริปต์พารามิเตอร์เป็นอินพุตบรรทัดแรก
alecco

1
มีวิธีสร้างอนุกรมคำสั่งโดยไม่ต้องผ่านการตรวจแก้จุดบกพร่องข้อมูลหรือไม่ '-vlogDtprze.iLs'
qodeninja
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.