ฉันจะตั้งค่า rsync ระหว่างสองโฮสต์โดยไม่ต้องระบุรหัสผ่านได้อย่างไร
ฉันจะตั้งค่า rsync ระหว่างสองโฮสต์โดยไม่ต้องระบุรหัสผ่านได้อย่างไร
คำตอบ:
ด้านล่างเป็นบทความจากThe Geek Stuff :
1. ทดสอบ rsync ผ่าน ssh (ด้วยรหัสผ่าน):
ทำ rsync เพื่อให้แน่ใจว่าจะขอรหัสผ่านสำหรับบัญชีของคุณบนเซิร์ฟเวอร์ระยะไกลและคัดลอกไฟล์ไปยังเซิร์ฟเวอร์ระยะไกลได้สำเร็จ
ตัวอย่างต่อไปนี้จะซิงโครไนซ์โฟลเดอร์โลคัลกับโฟลเดอร์
/home/test
ระยะไกล/backup/test
(บน192.168.200.10
เซิร์ฟเวอร์)สิ่งนี้ควรถามรหัสผ่านของบัญชีของคุณบนเซิร์ฟเวอร์ระยะไกล
rsync -avz -e ssh /home/test/ user@192.168.200.10:/backup/test/
2. ssh-keygen สร้างคีย์
ตอนนี้ตั้งค่า
ssh
เพื่อที่จะไม่ถามรหัสผ่านเมื่อคุณดำเนินการ ssh ใช้ssh-keygen
บนเซิร์ฟเวอร์ท้องถิ่นเพื่อสร้างกุญแจสาธารณะและส่วนตัว$ ssh-keygen
ป้อนข้อความรหัสผ่าน (ว่างเปล่าเพราะไม่มีข้อความรหัสผ่าน):
ป้อนวลีรหัสผ่านเดียวกันอีกครั้ง: หมายเหตุ: เมื่อขอให้คุณป้อนวลีรหัสผ่านเพียงแค่กดปุ่ม Enter และอย่าให้รหัสผ่านใด ๆ ที่นี่
3. ssh-copy-id คัดลอกกุญแจสาธารณะไปยังโฮสต์ระยะไกล
ใช้
ssh-copy-id
เพื่อคัดลอกกุญแจสาธารณะไปยังโฮสต์ระยะไกลssh-copy-id -i ~/.ssh/id_rsa.pub user@192.168.200.10
หมายเหตุ: ข้อมูลข้างต้นจะถามรหัสผ่านสำหรับบัญชีผู้ใช้บนโฮสต์ระยะไกลและคัดลอกกุญแจสาธารณะโดยอัตโนมัติไปยังตำแหน่งที่เหมาะสม หาก ssh-copy-id ใช้งานไม่ได้ให้คุณใช้วิธีที่เรากล่าวถึงก่อนหน้านี้เพื่อตั้งค่ารหัสผ่าน ssh ให้น้อยลงเข้าสู่ระบบ
4. ดำเนินการ rsync ผ่าน ssh โดยไม่มีรหัสผ่าน
ตอนนี้คุณควรจะสามารถ ssh ไปยังโฮสต์ระยะไกลโดยไม่ต้องป้อนรหัสผ่าน
ssh user@192.168.200.10
ดำเนินการ rsync อีกครั้งไม่ควรให้คุณใส่รหัสผ่านใด ๆ ในครั้งนี้
rsync -avz -e ssh /home/test/ user@192.168.200.10:/backup/test/
สร้างรหัสสาธารณะใน ServerA
$ ssh-keygen
$ Enter passphrase (empty for no passphrase):
$ Enter same passphrase again:
รหัสสาธารณะจะถูกสร้างขึ้นและเก็บไว้ใน
~/.ssh/id_rsa.pub
คัดลอกกุญแจสาธารณะไปยังโฮสต์ระยะไกล
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.100
หรือ
~/.ssh/authorized_keys
ผนวกเนื้อหาไปยัง สร้างไฟล์หากไม่มีอยู่ ตรวจสอบว่าโหมดไฟล์เป็น 700คำแนะนำ rsync ทั้งหมดเหล่านี้ล้มเหลวในการใช้เวอร์ชั่นล่าสุดในเดือนสิงหาคม 2560 บน Ubuntu 16.04 LTS ไม่ใช่คนเดียวที่ทำงาน
พวกเขาทั้งหมดยังร่วมกันขาดความต้องการ rsync daemon ที่ทำงานบนเซิร์ฟเวอร์ไฟล์
คำตอบนี้ใช้ได้กับ Linux NAS ทั่วไป
นี่คือขั้นตอน:
1) ใช้ rsync ตามที่แสดงด้านล่าง (ไปยังไดเรกทอรีภายใต้ / mnt หรือ / media ที่คุณสร้างหรือบนอุปกรณ์ที่คุณติดตั้งมันไม่สำคัญว่า) 2) โอนไฟล์ด้วย scp ที่แสดงด้านล่าง FileZilla ก็ใช้ได้เช่นกัน
ทั้งหมดนี้ (ยกเว้น FileZilla) สามารถทำงานใน cron โดยไม่ต้องใช้รหัสผ่าน
การตั้งค่านี้ทำงานได้ดีมาก ครั้งเดียวที่คุณต้องการรหัสผ่านคือเมื่อคุณตั้งค่า ssh-copy-id เริ่มต้นเพื่อตั้งค่าการเข้าสู่ระบบแบบไม่ใช้รหัสผ่าน RSA จากนั้นคุณเขียนโปรแกรมลงใน FileZilla หนึ่งครั้ง หลังจากนั้นทุกวันจะไม่มีการแจ้งเตือนรหัสผ่านให้ นี่คือง่าย และส่วนที่ดีที่สุดคือคุณสามารถใช้ประโยชน์ทั้งหมดของโปรแกรม rsync
คำตอบนี้อธิบายวิธีใช้ rsync ด้วยตนเองโดยไม่ต้องใช้รหัสผ่าน
นอกจากนี้ยังไม่จำเป็นต้องติดตั้งอีก daemon (rsync) ในระบบใดระบบหนึ่ง
หากคุณยังไม่ได้ทำสิ่งนี้:
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rse.pub NASserver
และทดสอบด้วยสิ่งนี้:
ssh NASserver
และบางทีสิ่งนี้:
scp myfile myusername@NASserver:Documents
ฉันมีฮาร์ดไดรฟ์ที่สองดังนั้นฉันจึงใช้ rsync เพื่อคัดลอกบูตไดรฟ์ไปยังไดเรกทอรีย่อยใน sdb1 (ติดตั้งภายใต้ / mnt และแยกออกจาก rsync)
หากคุณไม่มีฮาร์ดไดรฟ์ที่มีอยู่จริงและมีพื้นที่ว่างเพียงพอให้คุณสร้างไดเรกทอรีย่อยภายใต้ / mnt (หรือ / สื่อ) แล้วใช้สิ่งนั้น
ตราบใดที่ไดเรกทอรีถูกแยกออกก็ไม่สำคัญว่าจะอยู่ในไดรฟ์แยกต่างหากหรือไม่
นี่คือสคริปต์สำรอง:
cls
echo "EMPTYING TRASH"
rm ~/.local.share/Trash/*
echo "====================================================================="
echo " BEGINNING rsync from root to /mnt/full/sysbkp"
echo "====================================================================="
time sudo rsync -aAXv / --delete --ignore-errors --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /mnt/full/mysystem
หลังจาก rsync ใช้สคริปต์:
ฉันสร้างไดเรกทอรีใหม่บน NASserver เป้าหมาย: / mnt / fullsys / mysystem ดังนั้นเฉพาะไฟล์ที่เกี่ยวข้องเท่านั้นที่จะถูกถ่ายโอน
ssh -e"mv /mnt/fullsys/mysystem mysystem.bak" myusername@NASserver
ssh -e"mkdir /mnt/fullsys/mysystem" myusername@NASserver
scp -r /mnt/full/mysystem myusername@NASserver:/mnt/fullsys/mysystem
Voila! ใช้เวลาสักครู่ แต่ก็เสร็จแล้ว
สคริปต์ทั้งสองสามารถทำงานได้ดีใน cron
ทางเลือกคือใช้ FileZilla เพื่อส่งไปยังเซิร์ฟเวอร์ NAS ด้วยตนเอง
เนื่องจากมีการลบฉันมักจะ
make a new directory and enter it
ผ่าน FileZilla บน HDD 1TB เป้าหมายดังนั้นเฉพาะไฟล์ที่เกี่ยวข้องเท่านั้นที่จะถูกถ่ายโอน
เมื่อการถ่ายโอนเสร็จสิ้นฉันจะลบเวอร์ชันเก่าออกได้ไหม
voila ความสำเร็จ
ทำเครื่องหมายผู้ใช้ในที่อยู่จะดีกว่า
ssh-copy-id -i ~/.ssh/id_rsa.pub <user_in_server>@192.168.1.100
rsync -aAVx $(ssh-copy-id -i /home/myusername/.ssh/id_rsa.pub)
แล้วทั้งหมดexcludes
และ--delete
อื่น ๆ ฉันยังไม่ได้ทำงาน แต่นี่เป็นสิ่งที่ใกล้เคียงที่สุดที่ฉันเคยเห็น สมมุติว่าคุณต้องทำสิ่งนี้แม้ว่าคุณจะสามารถทำได้แล้วssh
และscp
ไปยังเซิร์ฟเวอร์เป้าหมายและ rsync daemon จำเป็นต้องทำงานเนื่องจากไม่ได้ใช้รูปแบบ sftp ปกติ ฉันยังค้นหาอยู่