ฉันต้อง sftp ไปยังเซิร์ฟเวอร์ระดับกลางหรือไม่


11

ฉันไม่สามารถ sftp ลงในโฮสต์ได้โดยตรง ในการย้ายไฟล์จากเครื่องที่บ้านของฉันไปยังโฮสต์ฉันต้อง sftp ไฟล์ไปยังโฮสต์ระดับกลาง ssh เข้าสู่โฮสต์ระดับกลาง และ sftp ไฟล์ไปยังปลายทางสุดท้าย เป็นไปได้ไหมที่จะหลีกเลี่ยงความบ้าคลั่งเช่นนี้?

คำตอบ:


28

จากเครื่องโลคัลของคุณคุณสามารถสร้างช่องสัญญาณ SSH ผ่านโฮสต์ระดับกลางถึงโฮสต์สุดท้าย:

ssh user@intermediate -L 2000:final:22 -N

สิ่งนี้จะเปิดพอร์ต 2000 บนโลคัลโฮสต์ของคุณที่จะเชื่อมต่อโดยตรงไปยังเซิร์ฟเวอร์สุดท้ายในพอร์ต 22 โดยการเจาะผ่านโฮสต์ระดับกลาง ในตอนนี้ให้เชื่อมต่อกับ sftp บนพอร์ต 2000 อีกครั้งเพื่อรับสัญญาณผ่านไปยังเซิร์ฟเวอร์สุดท้ายโดยสังเกตว่าผู้ใช้ที่ระบุที่นี่เป็นโฮสต์สุดท้าย:

sftp -P 2000 user@localhost

ดูเหมือนว่านี้อยู่ในsuperuser.comหรือserverfault.comแม้ว่า


ขอบคุณฉันจะลอง และคุณพูดถูกมันเป็นฟอรัมที่ผิด ขอโทษ

หลังจากให้รหัสผ่านผู้ใช้ @ localhost ฉันได้รับข้อความ: ข้อความที่ได้รับยาวเกินไป 1131376238
user74094

14

คุณสามารถใช้ตัวเลือก ProxyCommand ของ SFTP เพื่อสร้างช่องสัญญาณการเชื่อมต่อ SFTP ที่โปร่งใสผ่านการเชื่อมต่อ SSH (คล้ายกับคำตอบของ WhiteFang34 แต่เหนือ stdin & stdout ของการเชื่อมต่อ SSH แทนที่จะเป็นพอร์ต TCP ภายในเครื่องที่ส่งต่อ):

sftp -o "ProxyCommand=ssh -e none user@intermediatehost exec /usr/bin/nc %h %p 2>/dev/null" user@finalhost

(นั่นคือสมมติว่าโฮสต์ระดับกลางติดตั้ง netcat เป็น / usr / bin / nc - หากไม่ใช่คุณอาจต้องค้นหา / ติดตั้งวิธีที่เทียบเท่าในการเกตเวย์ stdin & stdout ในเซสชัน TCP)

สิ่งที่เจ๋งจริงๆเกี่ยวกับตัวเลือกนี้คือคุณสามารถเพิ่มลงในไฟล์ ~ / .ssh / config ของคุณซึ่งทำให้มันโปร่งใส:

Host finalhost
    ProxyCommand ssh -e none user@intermediatehost exec nc %h %p 2>/dev/null

ด้วยรายการดังกล่าวคุณสามารถใช้ sftp, scp และ ssh เพื่อ finalhost และมันจะเรียกใช้อุโมงค์โดยอัตโนมัติ ส่วนที่ไม่โปร่งใสเพียงอย่างเดียวคือมันจะถามรหัสผ่านสองอัน (middlehost ตามด้วย finalhost) แต่ถ้าคุณต้องการคุณสามารถกำจัดมันได้ด้วย SSH keypairs ...


ขอบคุณกอร์ดอน ต้องใช้รหัสผ่านทั้งสองแล้วหยุดข้อความ: ข้อความที่ได้รับยาวเกินไป 1131376238
user74094

ดูเหมือนว่ามีบางอย่างในการเชื่อมต่อ - อาจเป็นสคริปต์การเข้าสู่ระบบที่โฮสต์หนึ่งอาจจะ nc - กำลังเขียนข้อความพิเศษผ่านการเชื่อมต่อที่ทำให้เกิดความสับสน sftp (ดูคำถามที่พบบ่อยนี้ได้ที่ snailbook.com ) 1131376238 เป็นการเข้ารหัสทศนิยมของอักขระ ASCII "Conn" ดังนั้นอาจเป็นข้อความเช่น "กำลังเชื่อมต่อกับ ... " "เชื่อมต่อจาก ... " หรืออาจเป็น "การเชื่อมต่อล้มเหลว" ลองใช้ ssh แทน sftp ดูว่าข้อความนั้นถูกพิมพ์อย่างเห็นได้ชัดหรือคุณอาจบอกได้ว่ามันมาจากไหน
Gordon Davisson

ssh ทำงานได้ดี ฉันควรพูดถึงว่าฉันมักจะเผชิญกับคำถามนี้: ความถูกต้องของโฮสต์ 'xxxxx (<ไม่มี hostip สำหรับคำสั่ง proxy>)' ไม่สามารถสร้างได้ ลายนิ้วมือคีย์ RSA คือ 37: 40: d4: c7: ฯลฯ คุณแน่ใจหรือไม่ว่าคุณต้องการเชื่อมต่อ (ใช่ / ไม่ใช่) ใช่
user74094

กอร์ดอนมีประโยชน์มาก! ฉันกำลังเพิ่มสิ่งนี้ลงในไฟล์ข้อความของผู้สั่งให้ผู้ลงโฆษณารายบรรทัด ขอบคุณตัน!
เทรวิส Leleu

คือexecจำเป็น? (ใช้งานได้ดีที่นี่โดยไม่มีส่วนนั้น)
2559

3

คุณสามารถไพพ์ข้อมูลไปยังกระบวนการ ssh ที่รันบนเครื่องของคุณจากนั้นรันคำสั่งบนเครื่องระดับกลางซึ่งอ่าน stdin และส่งไปยัง sftp ตามความเหมาะสม

สิ่งนี้สามารถทำได้ใน oneliner บนเครื่องของคุณแม้ว่าการอ้างถึงข้อโต้แย้งกับ ssh จะต้องได้รับการดูแล ตอนนี้ฉันอยู่ในโทรศัพท์ของฉันดังนั้นจึงไม่สามารถพิมพ์รายละเอียดได้ บางทีคนอื่นอาจทำคำตอบนี้ให้สมบูรณ์ในแบบฝึกหัด!


0

ฉันสมมติว่าโฮสต์สุดท้ายมีไฟร์วอลล์และฉันสามารถเดาได้เฉพาะวิธีที่คุณสามารถใช้เพื่อแก้ไข

ตัวอย่างเช่น - เปิดเผย ssh จากเครื่องโลคัลของคุณจากนั้น ssh ไปยังโฮสต์แรกจากนั้น ssh ไปที่สองและ sftp จากโฮสต์สุดท้ายไปยังเครื่องของคุณ


0

สมมติว่า A และ B เป็นโฮสต์ตัวแรกและตัวที่สอง และไฟล์ที่จะทำการคัดลอกนั้นเป็น foo

แทนที่จะเป็น SFTP คุณสามารถใช้สิ่งต่อไปนี้

แมวฟู | ssh A "cat -> foo"

ทีนี้คุณสามารถ daisy-chain 2 ของเหล่านี้เข้าด้วยกัน

แมวฟู | ssh A "cat - | ssh B \" cat -> foo \ ""


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