scp ระหว่างสองเซิร์ฟเวอร์ไม่ได้อยู่ในเครือข่ายเดียวกัน


13

มีเซิร์ฟเวอร์สองตัวที่ฉันสามารถเข้าถึงได้ด้วยการเชื่อมต่อ VPN 2 แบบ ฉันจัดการเพื่อให้ VPN ทั้งสองทำงานในเวลาเดียวกันบนเครื่องของฉัน (กฎการกำหนดเส้นทางเล็กน้อย)

ฉันต้องการที่จะทำscp <remote1>:some/file <remote2>:destination/folderจากขั้วแล็ปท็อปของฉัน แต่เมื่อฉันลองทำสิ่งนี้scpคำสั่งที่เรียกใช้บนremote1ไม่สามารถค้นหาremote2 ได้เนื่องจากพวกเขาไม่ได้อยู่ในเครือข่ายเดียวกัน เป็นไปได้ไหมที่จะบังคับให้scpคำสั่งผ่านแล็ปท็อปของฉันเป็นเราเตอร์หรือไม่?

ถ้าฉันลองใช้ Nautilus (เชื่อมต่อกับเซิร์ฟเวอร์ทั้งสองเซิร์ฟเวอร์จากนั้นคัดลอกวาง) ใช้งานได้ แต่ฉันต้องการทำจากเทอร์มินัล


มันเป็นเครื่องของคุณว่ารายชื่อทั้งสองREMOTE1และremote2 คุณแน่ใจหรือว่าข้อผิดพลาดคือremote1ไม่สามารถเข้าถึงremote2 ได้ ?
Jan

ใช่ข้อผิดพลาดคือ ssh: ไม่สามารถแก้ไขชื่อโฮสต์ <remote2>: ไม่ทราบชื่อหรือบริการที่ขาดการเชื่อมต่อ
Danduk82

และถ้าฉันพยายามใช้ที่อยู่ IP โดยตรงสำหรับ <remote2> การเชื่อมต่อจะล้มเหลวหลังจากผ่านไประยะหนึ่ง (Hangout)
Danduk82

ถ้าอย่างนั้นฉันเดาว่ามันเป็นเครื่องที่ไม่สามารถเชื่อมต่อกับremote2ได้ บางทีอาจจะเป็นครั้ง VPN การเชื่อมต่อออกหรือ flakey ...
ม.ค.

ไม่ทำงานแม้แต่ DNS ก็ใช้งานได้ ผมมีความรู้สึกว่าคำสั่ง SCP พยายามที่จะดำเนินการเชื่อมต่อระหว่างREMOTE1และremote2โดยตรงบนREMOTE1
Danduk82

คำตอบ:


34

scp รุ่นใหม่กว่ามีตัวเลือก -3

-3

Copies between two remote hosts are transferred through the local host. Without this option the data is copied directly between the two remote hosts

ที่ดี! สิ่งที่ฉันต้องการ ขอบคุณมาก
Danduk82

1
เยี่ยมมากฉันไม่รู้เรื่องนี้เลย!
ม.ค.

9

หากคุณต้องการความยืดหยุ่นมากกว่าscp -3ธรรมดาsshและท่อก็สนุก

นี่เทียบเท่ากับการเปลี่ยนเส้นทางสตรีมไปยังเครื่องท้องถิ่น:

ssh sourceRemote 'cat /path/to/sourceFile' \
| ssh destinationRemote 'cat > /path/to/destinationFile'

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


2
คุณจะได้รับแถบความคืบหน้าที่ดีหากมีการpvติดตั้งเครื่องต้นทางและคุณแทนที่แถบแรกcatด้วย
liori

6

เมื่อตอบตามคำตอบของ @ Anko คุณสามารถใช้tarไฟล์ได้หลายไฟล์:

ssh -q user@sourcehost 'cd /source/path; tar -czf - files...' | \
ssh -q user@desthost 'cd /dest/path; tar -xzf -'

การบีบอัดเป็นตัวเลือกทั้งหมด - ข้อมูลของคุณอาจไม่สามารถบีบอัดได้มากหรือใหญ่พอที่จะรับประกันค่าใช้จ่าย ถ้ารุ่นของคุณtarไม่สนับสนุน-zสวิทช์, ท่อผ่านgzip -cและgzip -dcตามลำดับ

PS: ระวังเวอร์ชันtarที่ไม่ตัดสแลชนำหน้าบนการแตกไฟล์ (เช่นเขียนชื่อพา ธ สัมบูรณ์ถ้ามีให้)

แก้ไข: -e noneไม่จำเป็นต้องใช้กับไพพ์เนื่องจากไม่ได้มีการจัดสรรเทอร์มินัลหลอก


1
sshมี-Cค่าสถานะเพื่อเปิดใช้งานการบีบอัดข้อมูล อ้างอิงถึงmanหน้ามันใช้อัลกอริทึมเดียวกันกับgzipว่า หน้าคู่มือยังช่วยอธิบายอย่างมีประโยชน์เมื่อใช้: "การบีบอัดเป็นที่ต้องการในสายโมเด็มและการเชื่อมต่อที่ช้าอื่น ๆ แต่จะทำให้สิ่งต่าง ๆ ช้าลงบนเครือข่ายที่รวดเร็ว"
Anko

4
@Anko ปัญหาในการใช้งาน-Cที่นี่คือเครื่องท้องถิ่นจะต้องคลายการบีบอัดและบีบอัดข้อมูลอีกครั้ง การบอกtarให้ทำการบีบอัดหมายความว่าข้อมูลที่ถูกบีบอัดถูกส่งผ่านไปยังไพพ์โดยตรงโดยไม่มีการประมวลผลใด ๆ
cjm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.