SSH ไม่พร้อมท์สำหรับโฮสต์ของแท้เมื่อทำการเชื่อมต่อผ่านการข้ามโฮสต์ครั้งแรก


0

มีโฮสต์กระโดดที่เรียกผ่าน ProxyCommand เพื่อเข้าถึงเซิร์ฟเวอร์บางตัว ในไฟล์. ssh / configมีHostคำจำกัดความสำหรับแต่ละเซิร์ฟเวอร์และคำสั่งสำหรับ jumphost (ด้วย%rและ%hมาจากการกำหนดค่าโฮสต์):

Host myserver
    Hostname myserver.mydomain.net
    User technic
    port 22
    ProxyCommand ssh -x -p 22 jumpuser@jumphost ssh -6 -p 22 -x %r@%h "nc localhost %p"

การเข้าถึงjumphostและแล้วการออกssh <host>ผลงานที่สั่งการและแจ้งให้ฉันเพื่อยืนยันการเชื่อมต่อ จากนั้นการเชื่อมต่อดังต่อไปนี้ทำงานได้ดีแม้กระทั่งผ่านjumphost

ถ้าฉันพยายามเชื่อมต่อโดยตรงผ่านjumphost แทนฉันจะไม่ได้รับการยืนยันความถูกต้องและฉันจะได้รับ

key_load_public: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าวการตรวจสอบคีย์โฮสต์ล้มเหลว

ผมใช้รุ่นต่อไปนี้: OpenSSH_6.9p1และLibreSSL 2.1.8

ฉันต้องทำการเชื่อมต่อด้วยตนเองก่อนหรือไม่

หรือมีการตั้งค่าให้ฉันยืนยันการเชื่อมต่อแม้ที่การเชื่อมต่อครั้งแรกผ่านทาง jumphostหรือไม่ (โดยไม่ต้องอัปเกรด OpenSSH)


คุณใช้วิธี jumphost ตรงไหน?
grawity

ProxyCommand ssh -x -p 22 jumpuser@jumphost ssh -6 -p 22 -x %r@%h "nc localhost %p"(ด้วย% r และ% h มาจากการHostกำหนดค่า)
Kamafeather

โปรดอัปเดตคำถามของคุณด้วยข้อมูลนี้ // ทำไมไม่ใช้-J? ไม่จำเป็นต้องใช้งานด้วยตนเอง
Daniel B

อัปเดตกับมัน ไม่มีเป็น-JตัวเลือกในของฉันSSH มันทำอะไร? และฉันจะทำให้มันทำงานโดยไม่มีตัวเลือกนั้นได้อย่างไร? (สมมติว่าเป็นไปได้ที่จะข้ามขั้นตอนเริ่มต้นที่ฉันเขียนไว้ด้านบน)
Kamafeather

ผมใช้OpenSSH_6.9p1, LibreSSL 2.1.8 ฉันไม่สามารถหาตัวเลือกที่คุณกล่าวถึงในคู่มือ
Kamafeather

คำตอบ:


2

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

ลูกค้าในพื้นที่ของคุณยังคงทำงานเหมือนเดิม แต่ไคลเอนต์ระยะไกล (jumphost) ทำงานในโหมดที่ไม่มีการโต้ตอบ - มันไม่มี pseudoterminal และแม้ว่ามันจะทำเช่นนั้นอินพุต / เอาท์พุตทั้งหมดจะถูกแนบกับฝั่งเครือข่าย "ลูกค้าเครือข่ายของคุณ " ดังนั้นจึงไม่มีวิธีใดที่ไคลเอนต์ระยะไกลสามารถสร้างพรอมต์ที่มองเห็นได้ (มันจะตีความโดยลูกค้าในพื้นที่ของคุณว่าการรับส่งข้อมูล SSH ผิดรูปแบบ) หรือรับอินพุตการยืนยัน

คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยการลบการเชื่อมต่อที่สอง (ซ้ำซ้อน) อย่างสมบูรณ์และทำให้ ProxyCommand ของคุณง่ายขึ้นหนึ่งใน:

ProxyCommand ssh -W %h:%p jumpuser@jumphost

ProxyCommand ssh -x jumpuser@jumphost "nc -6 %h %p"

ProxyCommand ssh -x jumpuser@jumphost "socat stdio tcp6:%h:%p"

ProxyCommand ssh -x jumpuser@jumphost "(cat <&\$fd & cat >&\$fd) {fd}<>/dev/tcp/%h/%p"

ของวิธีการเหล่านี้ต้องการssh -Wหากมีให้ใช้nc / ncat / socatมิฉะนั้นลองแฮกcat $ fdเป็นทางเลือกสุดท้าย (ถ้า jumphost ห้ามssh -Wและไม่มีncหรือncatหรือsocatลองพูดคุยกับทีมไอทีของคุณเกี่ยวกับสาเหตุที่พวกเขาจงใจทำให้ใช้ jumphost ได้ยากขึ้น)


ฉันจะถามมันอย่างแน่นอน ... เมื่อพวกเขาจะกลับมาจากวันหยุด😅
Kamafeather

การหักที่สมบูรณ์แบบ ฉันลองตัวอย่างที่สองและใช้งานได้อย่างไร้ที่ติและไม่ได้ขอให้ฉันยืนยันความถูกต้องอีกต่อไป! (ฉันเดาเพราะjumphostยืนยันแล้วเมื่อเชื่อมต่อกับเซิร์ฟเวอร์อื่น) ขอบคุณ! 😃👍🏼
Kamafeather

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