วิธีการตั้งค่า Rsync โดยไม่ต้องใช้รหัสผ่านกับ SSH บน UNIX / Linux


19

ฉันจะตั้งค่า rsync ระหว่างสองโฮสต์โดยไม่ต้องระบุรหัสผ่านได้อย่างไร

linux  ssh  rsync 

นั่นน่าจะมีประโยชน์มาก: blogs.oracle.com/jkini/entry/how_to_scp_scp_and
Tom

Maverick143 ได้ให้คำตอบแล้ว แต่คำถามนี้ไม่ได้อยู่ใน StackOverflow เนื่องจากมีการเขียนโปรแกรมเพียงเล็กน้อย SuperUser.com จะมีความเกี่ยวข้องมากกว่า
มาร์ติน

คำตอบ:


30

ด้านล่างเป็นบทความจาก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/

สิ่งนี้ช่วยได้ดีกว่า troy.jdmz.net/rsync/index.html
MangeshBiradar

5
ล้างการคัดลอกและวางจากthegeekstuff.com/2011/07/rsync-over-ssh-without-passwordคุณควรอ้างอิงผู้เขียนต้นฉบับ
Lawrence Cherone

หากคุณต้องการใช้ผู้ใช้อื่นคุณสามารถทำได้เมื่อคุณดำเนินการ ssh-copy-id: ssh-copy-id -i ~ / .ssh / id_rsa.pub user@192.168.200.10
Finni McFinger

1

สร้างรหัสสาธารณะใน 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

หรือ

  • เปิด id_rsa.pub คัดลอกเนื้อหา
  • ล็อกอินเข้าสู่ ServerB โดยใช้ผู้ใช้เดียวกันในคำสั่ง rsync
  • ใน ServerB ~/.ssh/authorized_keysผนวกเนื้อหาไปยัง สร้างไฟล์หากไม่มีอยู่ ตรวจสอบว่าโหมดไฟล์เป็น 700

0

คำแนะนำ 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 ความสำเร็จ


-1

ทำเครื่องหมายผู้ใช้ในที่อยู่จะดีกว่า

ssh-copy-id -i ~/.ssh/id_rsa.pub <user_in_server>@192.168.1.100

2
ขณะนี้อาจตอบคำถามที่ว่ามันจะเป็นคำตอบที่ดีหากคุณสามารถให้คำอธิบายบางเหตุผลที่มันไม่ให้
DavidPostill

นอกจากนี้ยังมีไวยากรณ์ ฉันเชื่อว่านี่ใช้แทนคำสั่งบางอย่างเช่นนี้ rsync -aAVx $(ssh-copy-id -i /home/myusername/.ssh/id_rsa.pub)แล้วทั้งหมดexcludesและ--deleteอื่น ๆ ฉันยังไม่ได้ทำงาน แต่นี่เป็นสิ่งที่ใกล้เคียงที่สุดที่ฉันเคยเห็น สมมุติว่าคุณต้องทำสิ่งนี้แม้ว่าคุณจะสามารถทำได้แล้วsshและscpไปยังเซิร์ฟเวอร์เป้าหมายและ rsync daemon จำเป็นต้องทำงานเนื่องจากไม่ได้ใช้รูปแบบ sftp ปกติ ฉันยังค้นหาอยู่
SDsolar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.