ฉันมีกล่อง Linux ในที่ทำงานที่ฉันมักจะเข้าสู่ระบบจากที่บ้าน กล่อง Linux อยู่บนเครือข่ายภายใน แต่มีกล่องที่ครอบคลุมทั้งสองเครือข่ายดังนั้นฉันจึงสามารถเข้าสู่ระบบได้เช่น:
ssh -tA username@bridge.work.com ssh username@10.10.10.130
ฉันมีไฟล์สองไฟล์นั่งอยู่ใน ~ / tmp ที่ฉันต้องการคัดลอกไปยังเครื่องของฉัน (เราเรียกมันว่า ~ / tmp / file1 ~ / tmp / file2 และ ~ / tmp / file3 เพื่อการโต้แย้ง)
ฉันเห็นบางสิ่งบางอย่างเช่นงานนี้:
ssh -tA username@bridge.work.com ssh username@10.10.10.130 'tar cf - ~/tmp/file*' | tar xf -
สิ่งนี้จะ tar ไฟล์บนเครื่องรีโมตส่งผลลัพธ์ไปยัง stdout จากนั้นไพพ์ผลลัพธ์ไปยัง tar แบบโลคัลซึ่งกำลังคลายข้อมูลบน stdin โลคัล
ใช้งานไม่ได้:
บนเครื่องระยะไกลถ้าฉันเรียกใช้
tar cf - tmp/file* | md5sum
f1b776364c10dfc20500f228399a7c63 -
จากเครื่องท้องถิ่น:
ssh -tA username@bridge.work.com ssh username@10.10.10.130 'tar cf - ~/tmp/file*' | md5sum
bc7436c9771ee2b4978ffd29b8b7ed36 -
ฉันสมมติว่านี่น่าจะเป็น byte สั่ง snafu ผ่านเครือข่าย ... ในที่สุดฉันก็สามารถที่จะรับมันได้โดย uuencoding ไฟล์ catting มันข้ามเครือข่ายแล้ว uudecoding มันในเครื่อง ... ด้วยเหตุผลบางอย่างที่ฉันทำไม่ได้ รับไวยากรณ์ที่ถูกต้องเพื่อให้สามารถ tar | uuencode บนรีโมทและ uudecode | untar ในด้านท้องถิ่น
ฉันกำลังมองหาวิธีที่ดีในการทำทั้งหมดนี้ในขั้นตอนเดียว โดยเฉพาะอย่างยิ่งสิ่งที่ฉันสามารถห่อในฟังก์ชั่นเปลือก