Rsync บน ssh ด้วยการเข้าถึงรูททั้งสองด้าน


14

ฉันมีเซิร์ฟเวอร์ ubuntu รุ่นเก่ากว่าหนึ่งเซิร์ฟเวอร์และเซิร์ฟเวอร์ debian รุ่นใหม่หนึ่งตัวและฉันกำลังย้ายข้อมูลจากเซิร์ฟเวอร์เก่าไปยังเซิร์ฟเวอร์ใหม่ ฉันต้องการใช้ rsync เพื่อถ่ายโอนข้อมูลข้ามเพื่อให้การโยกย้ายครั้งสุดท้ายง่ายขึ้นและเร็วกว่ากระบวนการ tar / scp / untar ที่เทียบเท่า

ตัวอย่างเช่นฉันต้องการซิงค์โฮมโฟลเดอร์ทีละรายการกับเซิร์ฟเวอร์ใหม่ สิ่งนี้ต้องการการเข้าถึงรูทที่ปลายทั้งสองเนื่องจากไฟล์บางไฟล์ที่ด้านแหล่งข้อมูลนั้นไม่สามารถอ่านได้ทั่วโลกและปลายทางจะต้องถูกเขียนด้วยสิทธิ์ที่ถูกต้องใน / home ฉันไม่สามารถหาวิธีที่จะให้สิทธิ์การเข้าถึงรูทของ rsync ทั้งสองด้าน

ฉันเห็นคำถามที่เกี่ยวข้องสองสามข้อ แต่ไม่มีอะไรตรงกับสิ่งที่ฉันพยายามทำ

ฉันติดตั้ง sudo แล้วและทำงานกับเซิร์ฟเวอร์ทั้งสองเครื่อง

คำตอบ:


14

จริงๆแล้วคุณไม่จำเป็นต้องอนุญาตให้รูทการรับรองความถูกต้องผ่าน SSH เพื่อเรียกใช้ rsyncตามที่ Antoine แนะนำ การรับรองความถูกต้องของการขนส่งและระบบสามารถทำได้ทั้งหมดในบัญชีผู้ใช้ตราบใดที่คุณสามารถเรียกใช้ rsync ด้วย sudo ทั้งสองด้านสำหรับการอ่านและการเขียนไฟล์

ในฐานะผู้ใช้บนเซิร์ฟเวอร์ปลายทางของคุณคุณสามารถดูดข้อมูลจากเซิร์ฟเวอร์ต้นทางของคุณเช่นนี้:

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

ผู้ใช้ที่คุณใช้งานบนเซิร์ฟเวอร์ทั้งสองนั้นจะต้องใช้รหัสผ่าน * sudo เพื่อเข้าถึง rsync binary แต่คุณไม่จำเป็นต้องเปิดใช้งานการเข้าสู่ระบบ ssh เป็นรูทได้ทุกที่ หากผู้ใช้ที่คุณใช้ไม่ตรงกับปลายทางคุณสามารถเพิ่ม user @ boron: เพื่อระบุผู้ใช้ระยะไกลคนอื่น

โชคดี.

* หรือคุณจะต้องป้อนรหัสผ่านด้วยตนเองในหน้าต่างหมดเวลา


5
แม้ว่านี่เป็นคำถามเก่าที่ฉันต้องการเพิ่มคำว่า CAUTIONให้กับคำตอบที่ยอมรับนี้ จากความเข้าใจของฉันการอนุญาตให้ "sudo rsync" ที่ไม่มีรหัสผ่านนั้นเทียบเท่ากับการเปิดบัญชีรูทเพื่อเข้าสู่ระบบจากระยะไกล นี่เป็นเพราะด้วยวิธีนี้มันเป็นเรื่องง่ายมากที่จะได้รับการเข้าถึงรูททั้งหมดเช่นเนื่องจากไฟล์ระบบทั้งหมดสามารถดาวน์โหลดแก้ไขและแทนที่ได้โดยไม่ต้องใช้รหัสผ่าน
Ascurion

3

ถ้าข้อมูลของคุณไม่ได้มีความไวสูงคุณสามารถใช้และtar socatจากประสบการณ์ของฉันนี้มักจะเร็วกว่าrsyncเกิน ssh

คุณต้องการsocatหรือnetcatทั้งสองด้าน

บนโฮสต์เป้าหมายให้ไปที่ไดเรกทอรีที่คุณต้องการใส่ข้อมูลของคุณหลังจากที่เรียกใช้:
socat TCP-LISTEN:4444 - | tar xzf -

หากโฮสต์เป้าหมายกำลังฟังให้เริ่มต้นจากแหล่งที่มาเช่น:
tar czf - /home/fred /home/ | socat - TCP:ip-of-remote-server:4444

สำหรับการตั้งค่านี้คุณจะต้องเชื่อมต่อที่เชื่อถือได้ระหว่าง 2 เซิร์ฟเวอร์


จุดดี. ในสภาพแวดล้อมที่เชื่อถือได้คุณจะได้รับความเร็วมากโดยไม่เข้ารหัส มันอาจไม่สำคัญกับไฟล์ขนาดเล็ก แต่ด้วย GB ของข้อมูล
pboin

2

ตกลงฉันได้รวบรวมปมทั้งหมดเพื่อให้ได้สิ่งที่เหมาะกับฉัน

ให้เรียกเซิร์ฟเวอร์ "src" & "dst"

ตั้งค่าคู่คีย์สำหรับรูทบนเซิร์ฟเวอร์ปลายทางและคัดลอกกุญแจสาธารณะไปยังเซิร์ฟเวอร์ต้นทาง:

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

เพิ่มพับลิกคีย์ไปยังรูตที่ได้รับอนุญาตของรูทบนเซิร์ฟเวอร์ต้นทาง

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

กลับไปที่เซิร์ฟเวอร์ปลายทางดึงข้อมูลด้วย rsync:

dest $ sudo -i
dest # rsync -aP src:/home/fred /home/
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.