ถ่ายโอนไฟล์ระหว่างเซิร์ฟเวอร์ SSH ระยะไกลสองเครื่อง


21

มีวิธีง่าย ๆ ในการถ่ายโอนไฟล์ระหว่างเซิร์ฟเวอร์ SSH / SFTP สองเครื่องหรือไม่ โซลูชันที่สมบูรณ์แบบคือ FileZilla แต่จะให้คุณสร้างการเชื่อมต่อระหว่างโลคัลและรีโมตเท่านั้น แต่ไม่ได้อยู่ระหว่างรีโมตและรีโมต

ในทางทฤษฎีฉันสามารถเปิดหน้าต่างสองบาน Nautilus และเชื่อมต่อไปยังบางส่วนssh://server1/path/to/folderและssh://server2/path/to/folderจากนั้นเพียงแค่ดึงไฟล์จากที่หนึ่งไปยังอีกด้านหนึ่ง ประสบการณ์ของฉันคือว่ามันไม่แน่นอนมาก ส่งไฟล์ในผลรวมขนาดของเช่น 10MB จะไม่มีปัญหา แต่การถ่ายโอนคือ 10GB มักจะส่งผลในการแขวน Nautilus ตัวเองขึ้นและเหลืออยู่ในความต้องการของ->ps -e | grep nautilus kill -9 <pid>ฉันยังทดสอบสิ่งเดียวกันกับ Nemo และ Caja ในขณะที่ Nemo มีแนวโน้มที่จะมีเสถียรภาพมากกว่าสองคนอื่น ๆ แต่ก็ยังไม่สมบูรณ์แบบและแบ่งเป็นครั้งคราว FileZilla มีความเสถียรอย่างยิ่งไม่เคยทำลายมันได้ แต่มันไม่ยืดหยุ่นมากเนื่องจากความจริงที่กล่าวถึงว่ามันสามารถเชื่อมต่อกับเซิร์ฟเวอร์ SSH เดียวเท่านั้น

แน่นอนว่าฉันสามารถเมานต์โฟลเดอร์ได้ด้วยsshfsแต่นี่เป็นวิธีแก้ปัญหาที่ไม่สะดวก pre-work มากเกินไปที่จะทำเพื่อให้การถ่ายโอนทำงานได้ง่าย

มีแอพใดบ้างที่สามารถจัดการการถ่ายโอนระหว่างเซิร์ฟเวอร์ SSH สองเครื่องโดยไม่ทำให้แตกหัก? เพอร์เฟ็กต์จะเป็นอะไรอย่างเช่น FileZilla ที่รับงานอีกครั้งหากการเชื่อมต่อหยุดชะงัก


ไม่ใช่คำตอบเพราะนี่ไม่ใช่ไซต์แนะนำซอฟต์แวร์ แต่ฉันใช้ (เปรียบเทียบ) (เปรียบเทียบ) ( scootersoftware.com ) มาหลายปีแล้วและมันก็ยอดเยี่ยมสำหรับงานประเภทนี้ มันมีสองหน้าต่างซึ่งทั้งสองอย่างสามารถแสดงพา ธ โลคัลหรือ sftp: // URL จะแสดงความแตกต่างระหว่างโฟลเดอร์และความสามารถในการคัดลอกแค่ความแตกต่างทำให้เกิดกลไกการทำงานที่ยอดเยี่ยมถ้ามันแตกซึ่งเกิดขึ้นน้อยมาก จากประสบการณ์ของฉัน (ไม่ afflilated กับพวกเขายกเว้นเป็นลูกค้าที่พอใจ)
Guntram Blohm สนับสนุน Monica

คำตอบ:


36

หากคุณใช้เวอร์ชั่น Ubuntu ที่ยังคงรองรับscpคำสั่งของคุณจะให้-3สวิตช์ซึ่งช่วยให้สามารถคัดลอกไฟล์จากremote1ถึงremote2ผ่านlocalhost :

me@local:~> scp -3 user1@remote1:/path/to/file1 user2@remote2:/path/to/file2

คุณสามารถละเว้น-3สวิตช์ได้ แต่คุณจะต้องใช้รหัสสาธารณะ ( id_rsa.pub) จากuser1@remote1ในไฟล์authorized_keysของuser2@remote2:

me@local:~> scp user1@remote1:/path/to/file1 user2@remote2:/path/to/file2

scpจากนั้นภายใต้ฝากระโปรงไม่ได้เป็นครั้งแรกและจากที่นั่นssh user1@remote1 scp /path/to/file1 user2@remote2:/path/to/file2นั่นเป็นเหตุผลที่ต้องกระจายข้อมูลรับรองที่แตกต่างจาก-3โซลูชัน

ในคำอื่น ๆ :

  • scp -3 remote1:file1 remote2:file2ถ่ายโอนไฟล์จาก REMOTE1เพื่อlocalhostแล้วกลับไปremote2 ข้อมูลการเดินทางREMOTE1 → localhost → remote2 localhostเป็นบุคคลที่ 3 -3ในสถานการณ์นี้จึง เพื่อให้ทำงานได้คุณจะต้องมีข้อมูลรับรองจากlocalhost ทั้งremote1และremote2เนื่องจากlocalhostเชื่อมต่อกับทั้งคู่

  • scp remote1:file1 remote2:file2คัดลอกไฟล์โดยตรงจาก remote1ไปยังremote2ที่ความเร็วด้วยการเชื่อมต่อซึ่งกันและกัน localhostไม่เกี่ยวข้องกับที่นี่ (นอกเหนือจากการออกคำสั่ง) ข้อมูลการเดินทางREMOTE1 → remote2 สำหรับการทำงานคุณจะต้องข้อมูลประจำตัวจากlocalhost เฉพาะในREMOTE1 แต่คุณยังต้องการข้อมูลประจำตัวของREMOTE1บนremote2เพราะlocalhostเชื่อมต่อกับREMOTE1 เท่านั้นและแล้วREMOTE1เชื่อมต่อกับremote2

ถ้าเป็นไปได้ฉันจะเลือกวิธีที่สอง ในฐานะที่เป็นความคิดเห็นบางส่วนแล้วกล่าวว่าโดยปกติมักจะเป็นสายเคเบิลเครือข่ายระหว่างREMOTE1และremote2อยู่ไกลหนากว่าสายเคเบิลระหว่างพวกเขาและlocalhost


2
นั่นเป็นเพียงความสวยงาม ssh เป็นมีดทหารของสวิสซอฟต์แวร์ ขอบคุณฉันเรียนรู้บางสิ่ง
หินอ่อนอินทรีย์

4
โปรดทราบว่าวิธีการนี้เช่นวิธี nautilus ที่อธิบายไว้ในคำถามจะถ่ายโอนไฟล์ก่อนไปยังเครื่องโลคัลจากนั้นขึ้นไปยังเซิร์ฟเวอร์ที่สอง สิ่งนี้จะทำให้การทำงานช้าลงอย่างมากเมื่อเซิร์ฟเวอร์ระยะไกลสองเครื่องมีลิงค์เชื่อมโยงที่เร็วกว่าระหว่างเครื่องท้องถิ่น (ตัวอย่างเช่นเมื่อเซิร์ฟเวอร์ระยะไกลอยู่ในศูนย์ข้อมูลและเครื่องท้องถิ่นมีการเชื่อมต่อ DSL)
Stobor

1
@Stobor จุดดีขอบคุณ ฉันอัปเดตคำตอบของฉันเพื่อชี้แจงว่าข้อมูลเดินทางเข้าและออกได้-3อย่างไร
PerlDuck

1
วิธีที่สองจะทำงานกับการส่งต่อตัวแทนโดยไม่ต้องมีคีย์หรือรหัสผ่านใน remote1 หรือไม่
Eric Duminil

1
@EricDuminil ฉันกลัวฉันไม่สามารถบอกได้ ฉันไม่มีความอดทนอย่างแท้จริงกับการส่งต่อตัวแทน แต่ฉันสงสัยเพราะ remote1 ควรปฏิเสธการเข้าถึงเมื่อไม่มีการให้รหัสหรือรหัสผ่านใช่หรือไม่
PerlDuck

10

ในกรณีส่วนใหญ่เซิร์ฟเวอร์ ssh สองตัวสามารถติดต่อกัน (หรืออย่างน้อยหนึ่งสามารถเข้าถึงกันได้) และอีกครั้งในกรณีส่วนใหญ่อินเทอร์เน็ตของเวิร์กสเตชันนั้นแย่กว่าเซิร์ฟเวอร์ใดเซิร์ฟเวอร์หนึ่ง

ถ้าเป็นเช่นนั้นการสั่งซื้อเซิร์ฟเวอร์หนึ่งเครื่องเพื่อถ่ายโอนไปยังเซิร์ฟเวอร์อื่นเป็นวิธีที่จะดำเนินการ

ssh server1 nohup scp somefile server2:somefile

ตรวจสอบnohup.outข้อผิดพลาด server1

หากความสามารถในการเข้าถึงเซิร์ฟเวอร์เป็นอีกทางหนึ่งคุณสามารถย้อนกลับได้ว่าเครื่องใดเป็นเครื่องต้นแบบ:

ssh server2 nohup scp server1:somefile somefile

7

บางทีคุณสามารถใช้หนึ่งในหลาย ๆ ส่วนหน้าของ GUI เพื่อ rsync:

มีแอปพลิเคชัน GUI สำหรับคำสั่ง rsync หรือไม่

หรือบางทีคุณอาจใช้ rsync โดยตรงจากบรรทัดคำสั่งเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล:

"วิธี rsync ไฟล์ระหว่างรีโมทสองรีโมท"

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

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


0

คุณต้องใช้โปรโตคอล SCP scp file you want to transfer login@address_of_second_server:/path_where_you_want_to_save


2
OP ต้องการคัดลอกไฟล์ระหว่างคอมพิวเตอร์ระยะไกลสองเครื่องไม่ใช่จากเครื่องคอมพิวเตอร์ไปยังคอมพิวเตอร์ระยะไกล ดูเหมือนว่าเขาจะมองหาโซลูชัน GUI
user68186

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