ฉันจะทำการถ่ายโอนไฟล์ scp ขนาดใหญ่ต่อเมื่อใช้การส่งต่อพอร์ตได้อย่างไร


10

ฉันมีสองสามเครื่องกระโดดและฉันต้องตั้งค่าการส่งต่อพอร์ตเพื่อถ่ายโอนไฟล์

แก้ไข: เพื่อให้ชัดเจนต้องใช้หลาย hops เพื่อเข้าถึงเครื่องระยะไกล จากเครื่องของฉันฉันตั้งค่า VPN ที่ฉันสามารถเข้าถึง 10.255.xx - เป็นเครื่องเดียวที่ฉันสามารถเชื่อมต่อผ่าน VPN เมื่อลงชื่อเข้าใช้. xxx ฉันสามารถเชื่อมต่อกับเครื่องอื่น ๆ -. ฉันเป็นหนึ่งในนั้น

จากเครื่องของฉัน:

ssh -L 4567:localhost:4567 me@10.255.x.x

จากนั้นจากเครื่องนั้น:

ssh -L 4567:localhost:22 me@10.255.y.y

ฉันสามารถ

scp -P 4567 me@localhost:/path/to/large/file.gz .

ฉันออกจากการทำงาน overnite เพียงเพื่อจะพบว่าการถ่ายโอนตายในบางจุด

ฉันเห็นคำแนะนำสองสามข้อที่จะใช้ rsync บน ssh เพื่อทำการถ่ายโอนต่อ แต่ฉันไม่ทราบวิธีการตั้งค่านั้น เป็นไปได้ไหม


สิ่งเหล่านี้มีไว้สำหรับอะไร? จะไม่scp me@10.255.x.x:/path/to/large/file.gz .ประสบความสำเร็จเหมือนกันทุกประการใช่หรือไม่ เวอร์ชันของ scp (ssh) ติดตั้งบนไคลเอนต์และเซิร์ฟเวอร์?
Dennis

@Dennis: scp ไม่สนับสนุนการถ่ายโอนต่อ - สิ่งที่คุณแนะนำจะรีสตาร์ทการดาวน์โหลด
chris

บางรุ่นทำ (scp แล็ปท็อปของฉันทำ VPS ของฉันไม่ได้) เหตุผลที่ฉันถามก็เพราะว่าฮ็อพดูเหมือนไม่จำเป็นสำหรับฉันและการที่ไม่มีฮ็อพจะทำให้ง่ายขึ้นมาก
Dennis

คำตอบนี้อาจช่วยคุณได้เช่นกัน: unix.stackexchange.com/a/43097/14084
Bernhard

คำตอบ:


9

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

สวิตช์ rsync ต่อไปนี้มีประโยชน์ในการเรียกคืนการถ่ายโอนที่เสียหายถ้า scp ไม่รองรับ:

     --append                append data onto shorter files
     --append-verify         like --append, but with old data in file checksum
 -e, --rsh=COMMAND           specify the remote shell to use
     --progress              show progress during transfer

คำสั่ง

rsync --append-verify --progress --rsh="ssh -p 4567" me@localhost:/path/to/large/file.gz .

ควรมีผลที่ต้องการ โปรดทราบว่า-pสวิตช์จะต้องเป็นตัวพิมพ์เล็กสำหรับ ssh


ฮ็อพจำเป็นเนื่องจากวิธีการกำหนดค่าเครือข่ายบนเซิร์ฟเวอร์ปลายทาง ปัญหาเกี่ยวกับการใช้ rsync บน ssh คือฉันต้องใช้พอร์ตภายในเครื่อง 4567 ไม่มีไฟล์อยู่บนเซิร์ฟเวอร์ 10.255.xx
chris

ความผิดพลาดของฉัน. ฉันสันนิษฐานว่า10.255.y.yเป็นคอมพิวเตอร์ไคลเอนต์
Dennis

ฉันอัพเดตคำตอบแล้ว
Dennis

และจะทำอย่างไรถ้าไม่มีวิธีใช้ rsync ในกรณีของฉันฉันมีเพียง ftp พร้อมใช้งานบนโฮสต์ระยะไกล
dr.dimitru

1
@Enzo คำถามเกี่ยวกับ SCP คำตอบต้องเป็น SCP คำถามเกี่ยวกับการถ่ายโอน SCP ที่ไม่สมบูรณ์ไม่ใช่เกี่ยวกับเครื่องมือ scp แท้จริงแล้วมันบอกว่าฉันเห็นคำแนะนำสองสามข้อที่จะใช้ rsync บน ssh เพื่อทำการถ่ายโอนต่อ แต่ฉันก็ไม่แน่ใจว่าจะตั้งค่าอย่างไร เป็นไปได้ไหม ที่ส่วนลึกสุด.
เดนนิส

3

ใช้ sftp แทน scp

ในกรณีของคุณ:

sftp -a -P 4567 me@localhost:/path/to/large/file.gz .

จากหน้า man sftp:

-a      Attempt to continue interrupted downloads rather than overwriting existing partial or complete copies of files.  If the remote file contents differ from the partial local copy then the resultant file is likely to be corrupt.

1

rsync ใช้ ssh ตามค่าเริ่มต้นคุณอาจต้องระบุคำสั่ง ssh โดยใช้สวิตช์ -e ของ rsync นอกจากนี้ยังมี - บางส่วนซึ่งควรเก็บไฟล์ที่ไม่สมบูรณ์รอบ ๆ เพื่อให้สามารถถ่ายโอนต่อได้


-1

ฉันไม่เห็นว่าอุโมงค์ของคุณคืออะไรดังนั้นนี่คือวิธีที่ฉันจะแก้ปัญหาของคุณ:

ssh -R $tunnelPort:localhost:$localSSHPort $remoteUser@$remoteHost -p $remoteSSHPort

สิ่งนี้จะเปิดอุโมงค์ย้อนกลับจากเครื่องท้องถิ่น (localhost) ไปยังเครื่องระยะไกล (remotehost) $ tunnelPort เป็นพอร์ตที่จะพบช่องสัญญาณใน remotehost $ localSSHPort เป็นพอร์ตที่ local sshd ทำงานและ $ remoteSSHPort เป็นที่ที่ sshd ของ remotehost รับฟัง

ตอนนี้คุณอยู่ในอุโมงค์ (ย้อนกลับ!) คุณสามารถทำสิ่งที่เดนนิสเสนอได้ไม่มากก็น้อย:

rsync --apend-verify -az -e 'ssh -p $tunnelPort' /path/to/large/file $user@localhost:/destination

แฟล็ก -a และ -z อธิบายไว้ใน man page ของ rsync ดังนั้นฉันจะไม่ทำอย่างละเอียดกับพวกเขา สิ่งที่เกิดขึ้นตอนนี้คือเมื่อคุณรัน rsync บน remotehost ดังกล่าวข้างต้นมันจะส่งข้อมูลทั้งหมดไปยังพอร์ต $ tunnelPort ซึ่งจะถูกส่งต่อไปยัง sshd $ localSSHPort ในท้องถิ่นของคุณ

หวังว่าจะช่วย


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