ไฟล์ Rsync ผ่านทางโฮสต์ระดับกลาง


22

ขณะนี้ฉันไม่ได้อยู่ใน LAN และฉันจำเป็นต้องสำรองข้อมูลแล็ปท็อปของฉัน ฉันมีแล็ปท็อปของฉันบนเซิร์ฟเวอร์ของฉันและฉันมักจะสำรองแล็ปท็อปโดยใช้ rsync ตอนนี้ฉันต้องการทำเช่นนั้น แต่อยู่นอก LAN ของฉัน

ในระยะสั้นฉันต้องการส่งข้อมูลจาก A ถึง C ผ่าน B โดยที่ A คือแล็ปท็อปของฉัน B เราเตอร์ของฉันและ C เซิร์ฟเวอร์ของฉัน

ฉันพบคำสั่งนี้: ใช้A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destinationงานได้ดีสำหรับการถ่ายโอนไฟล์ผ่าน scp - แต่เนื่องจากฉันมีข้อมูลส่วนใหญ่บนเซิร์ฟเวอร์ของฉันแล้วฉันต้องการใช้ rsync เพื่อซิงค์เดลต้าเท่านั้น

ฉันได้ลองแล้ว: A$ rsync file -e 'ssh B ssh' Cและใช้งานได้เท่าที่ฉันได้รับแจ้งให้ใส่รหัสผ่านสำหรับผู้ใช้: C อย่างไรก็ตามเมื่อฉันป้อนรหัสผ่านไม่มีอะไรเกิดขึ้น เราเตอร์กำลังเรียกใช้ Tomato v1.28 และฉันไม่สามารถตั้งค่าเพื่อใช้ไฟล์ ssh config เพื่อให้สามารถเข้าสู่ระบบด้วยรหัสผ่าน C / Oa ได้

มีความคิดเห็นเกี่ยวกับวิธีการทำงานนี้หรือไม่?


2
ใช้เหมือนกันProxyCommandในไฟล์กำหนดค่า Rsync ควรเลือกมัน
Jakuje

คำตอบ:


30

คำถามนี้เป็นคำถามตอบหลักอื่น ๆ รวมทั้งที่นี่สำหรับ SCPและที่นี่สำหรับ rsync เนื่องจากหลังมีคำตอบของฉัน แต่ไม่ยอมรับคำตอบฉันจะทำซ้ำที่นี่

ในขณะที่คุณสังเกตเห็นคุณสามารถใช้rsync's -e | --rshตัวเลือก แต่มันจะเป็นบิตซับซ้อนมากขึ้น:

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/

หรือถ้ารุ่นของคุณsshใหม่พอ (OpenSSH> = v7.3) คุณสามารถใช้ตัวเลือก-J( ProxyJump)

rsync -azv -e 'ssh -A -J USER@PROXYHOST:PORT' foo/ dest:./foo/

โปรดทราบว่าฉันกำลังใช้-A(การส่งต่อตัวแทน) แต่ควรทำงานกับการตรวจสอบรหัสผ่านด้วยหากคุณไม่ได้ใช้คีย์และแน่นอนคุณสามารถแทนที่proxyด้วยBและdestด้วยCในตัวอย่างของคุณ

หากบังเอิญคุณไม่มีรุ่นใหม่เพียงพอssh(> = 5.3, IIRC) คุณสามารถใช้netcatแทน-Wตัวเลือกเพื่อssh:

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/

ในที่สุดตามที่ระบุไว้ในความคิดเห็นแล้วคุณสามารถใส่ProxyCommandลงใน$HOME/.ssh/configไฟล์ของคุณเพื่อให้คุณไม่ต้องมีบรรทัดคำสั่งที่ซับซ้อน โดยเฉพาะให้เพิ่มสิ่งนี้:

Host C
  ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p

หรือใช้ProxyJumpสำหรับ OpenSSH> = v 7.3:

Host C
  ProxyJump PROXYHOST

จากนั้นคุณควรจะสามารถทำได้:

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