scp ไฟล์ "ท่อ" ผ่านโฮสต์กลาง


0

นี่คือการยกระดับจากคำถามนี้ สมมติว่าผมบนคอมพิวเตอร์และต้องการที่จะส่งไฟล์ไปยังเครื่องคอมพิวเตอร์A เราแต่ละคนมีการเข้าถึงที่แยกต่างหากเพื่อโฮสต์ C และไม่สามารถสื่อสารโดยตรงและไม่สามารถเริ่มต้นการเชื่อมต่อกับทั้งBACB

มีวิธีที่ฉันสามารถส่งไฟล์ขนาดใหญ่ไปยัง SSH และสร้างกระแสข้อมูลบางประเภทที่ฉันสามารถบอกให้ผู้ใช้คอมพิวเตอร์Cเชื่อมต่อได้หรือไม่ Bไฟล์ที่มีขนาดใหญ่กว่าพื้นที่ที่มีอยู่บน โซลูชันปัจจุบันของฉันคือsplitไฟล์ขนาดใหญ่อัปโหลดแต่ละเซกเมนต์ตามลำดับและเมื่อผู้ใช้ที่Cดาวน์โหลดเสร็จหนึ่งก้อนแจ้งให้ฉันทราบฉันจะลบไฟล์และอัปโหลดไฟล์ถัดไป

คำตอบ:


1

ถ้าฉันเข้าใจคุณถูกต้องคุณต้องการส่งข้อมูลจาก A ถึง C แต่คอมพิวเตอร์ไม่สามารถเชื่อมต่อกับอีกเครื่องได้ แต่ทั้งคู่สามารถเชื่อมต่อกับ B B ไม่สามารถเชื่อมต่อกับใครก็ได้

ทางออกหนึ่งคือการใช้การส่งต่อพอร์ต C สามารถส่งต่อจากพอร์ตบน B ไปยังพอร์ต SSH (พอร์ต 22):

ssh -R 1088:localhost:22

1088 นั้นเป็นแบบสุ่มเลือกพอร์ตที่ไม่ได้ใช้งานอยู่ โดยค่าเริ่มต้นพอร์ตนี้จะใช้ได้เฉพาะในเครื่องท้องถิ่นนั้นเท่านั้นกระบวนการที่ทำงานบน B เท่านั้นที่สามารถเชื่อมต่อได้

ตอนนี้ผู้ใช้บน A สามารถเชื่อมต่อโดยตรงกับ C:

ssh B "ssh -p 1088 localhost"

หรือตัวอย่างเช่นคำสั่งนี้จะส่งไฟล์จาก A ถึง C:

cat infile | ssh B "ssh -p 1088 localhost \"cat > outfile\""

อีกทางหนึ่ง A อาจมีการส่งต่อพอร์ตของพวกเขาอนุญาตให้ผู้ใช้ใน C เพื่อเริ่มต้นการคัดลอก

อีกวิธีคือใช้ท่อที่มีชื่อ บน B ดำเนินการ:

mkfifo named_pipe

จากนั้นใน A คุณสามารถส่งข้อมูลไปที่ pipe ด้วย:

cat infile | ssh B "cat > named_pipe"

คำสั่งนี้จะหยุดทำงานจนกว่าจะมีคนเปิดปลายอีกด้านหนึ่งของไปป์และอ่านข้อมูลออกมา ตัวอย่างเช่นผู้ใช้บน C สามารถทำได้:

ssh B "cat named_pipe" > outfile

นี่จะส่งไฟล์จาก A ถึง B ถึง C


0

ใช่คุณสามารถสร้างไปป์ที่มีชื่อเพื่อให้พวกเขาดึง ตรวจสอบให้แน่ใจว่าได้สร้างไปป์ก่อนแล้วให้พวกเขาเชื่อมต่อจากคอมพิวเตอร์Cแล้วเริ่มการสตรีมเข้า

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