Score:1

ข้อผิดพลาด kex_exchange_identification กับเซิร์ฟเวอร์ Windows10 OpenSSH

ธง bm

ฉันติดตั้งเซิร์ฟเวอร์ OpenSSH บนพีซี Windows 10 ของฉัน (อาจเป็นเวอร์ชัน "บ้าน" ไม่ใช่เซิร์ฟเวอร์ Windows) โดยใช้ คู่มือ Microsoft. ฉันไม่ได้เปลี่ยน C:/Windows/System32/OpenSSH/sshd_config_default ไฟล์ (แม้ว่าฉันไม่คิดว่ามันเกี่ยวข้องกับที่นี่ก็ตาม) ฉัน สามารถ เข้าสู่ระบบเครื่องจากเทอร์มินัลบนเครื่องเดียวกันนั้น:

SSH ท้องถิ่น

ฉันมีเครื่องอื่นที่ทำงานบน LAN เดียวกัน (ทั้งคู่ต่อสายกับเราเตอร์ SoHo เดียวกัน) จากนั้นการพยายามเชื่อมต่อกับ Windows 10 ล้มเหลวด้วย:

kex_exchange_identification: การเชื่อมต่อถูกปิดโดยโฮสต์ระยะไกล
การเชื่อมต่อปิดโดย 10.0.3.130 พอร์ต 22

ตาม คำตอบนี้สำหรับกระทู้อื่นที่คล้ายกันข้อผิดพลาดนี้เกิดขึ้นเมื่อเซิร์ฟเวอร์ปิดการเชื่อมต่อ TCP ระหว่างการแลกเปลี่ยนการเข้ารหัสหรืออะไรทำนองนั้น ดังนั้นฉันจึงดูที่ไฟร์วอลล์ของ Windows แต่ที่นั่น เป็น กฎขาเข้าที่เปิดใช้งานสำหรับพอร์ต TCP 22 (และนอกจากนี้ หากปัญหากฎขาดหายไป ไคลเอนต์ SSH ก็จะหมดเวลา ไม่มีข้อผิดพลาดใน kex_exchange_identification):

ไฟร์วอลล์

ดังนั้นฉันจึงลองใช้ Wireshark บนเซิร์ฟเวอร์ (10.0.3.130) ดูเหมือนว่าเซิร์ฟเวอร์ยอมรับการจับมือ TCP จากนั้นเครื่องอื่น (10.0.3.10) ส่งแพ็กเก็ต SSH โปรโตคอลบางอย่าง จากนั้นเซิร์ฟเวอร์ก็ปิดการเชื่อมต่อ:

Wireshark OpenSSH เริ่มต้นแล้ว

เพื่อดูว่าจะเกิดอะไรขึ้น ฉันไปที่ Windows' บริการ แอปและหยุดการ เซิร์ฟเวอร์ OpenSSH SSH บริการ จากนั้นลองสิ่งเดียวกัน แต่ผลลัพธ์ของ Wireshark เหมือนกัน:

Wireshark OpenSSH หยุดทำงาน

สิ่งหนึ่งที่ฉันสังเกตเห็นและไม่ค่อยเข้าใจก็คือการวิ่ง netstat -ab ใน PowerShell ของผู้ดูแลระบบแสดงว่าพอร์ต 22 มีผู้ฟังที่ใช้งานอยู่แม้ว่า OpenSSH จะหยุดทำงานก็ตาม (เฉพาะ Windows สิ่งที่ฉันเดา ... ):

คำสั่ง netstat

ใช่แล้ว... ฉันกระทืบ ณ จุดนี้ ความคิดใด ๆ ?

Score:0
ธง bm

TL;DR: หลังจากค้นหาเพิ่มเติมอีกเล็กน้อย และพยายามรีบูตตามที่คนอื่นแนะนำ ฉันพบวิธีแก้ปัญหาง่ายๆ:

  1. ทำให้ Windows เริ่มต้นเซิร์ฟเวอร์ OpenSSH บนพอร์ตที่ netstat -ab ไม่แสดงว่าถ่ายโดยการเพิ่มบรรทัด หมายเลขพอร์ตพอร์ต เข้าไปข้างใน %programdata%\ssh\sshd_config [*] (แทนที่ หมายเลขพอร์ต ตามพอร์ตที่เลือกแน่นอน) ฉันเลือกพอร์ต 222 เป็นการส่วนตัวเพราะมันจำง่าย
  2. เพิ่มกฎขาเข้าสำหรับพอร์ต TCP หมายเลขพอร์ต ใน ไฟร์วอลล์ Windows Defender พร้อมความปลอดภัยขั้นสูง.

สิ่งที่ฉันคิดว่าผิดคือสิ่งที่ฉันแสดงล่าสุด: ภาพสุดท้ายนั้นดูเหมือนว่าจะแสดงให้เห็นว่าในกรณีของฉัน พอร์ต 22 (ซึ่งเซิร์ฟเวอร์ OpenSSH มักจะเปิดอยู่) ถูกครอบครองโดยเซิร์ฟเวอร์อื่นที่ไม่เกี่ยวข้อง (ด้วยเหตุผล... ไม่ว่าด้วยเหตุผลใดก็ตาม ).ดังนั้นไคลเอนต์ SSH จึงทำการจับมือ TCP ซึ่งเซิร์ฟเวอร์ที่ไม่เกี่ยวข้องนั้นยอมรับ จากนั้นไคลเอนต์ก็ส่งแพ็กเก็ตโปรโตคอล OpenSSH (ซึ่งเซิร์ฟเวอร์ที่ไม่เกี่ยวข้องไม่เข้าใจ) ซึ่งทำให้เซิร์ฟเวอร์ที่ไม่เกี่ยวข้องนี้ปิดการเชื่อมต่อ TCP

ตอนนี้มัน เป็น จริงที่ฉันสามารถเชื่อมต่อกับเซิร์ฟเวอร์ ssh บนพอร์ต 22 จากเซิร์ฟเวอร์เอง ฉันคิดว่านี่เป็นเพราะการเชื่อมต่อกับ โลคัลโฮสต์ ส่งแพ็กเก็ตไปยังอินเทอร์เฟซย้อนกลับ ซึ่งเซิร์ฟเวอร์ที่ไม่เกี่ยวข้องนั้นอาจไม่ได้รับฟัง

ดังนั้นวิธีแก้ปัญหาเชิงตรรกะคือเพียงแค่ย้ายเซิร์ฟเวอร์ OpenSSH ไปยังพอร์ตอื่นที่ไม่ได้ใช้ แล้วเพิ่มกฎขาเข้าไปยังพอร์ตใหม่ในไฟร์วอลล์ Windows อย่างไรก็ตาม ทางออกที่แท้จริงคือการค้นหาสิ่งที่เซิร์ฟเวอร์ที่ไม่เกี่ยวข้องกำลังฟังอยู่บนพอร์ต 22 เข้า แล้วฆ่ามันหรือย้าย มัน ไปยังพอร์ตอื่น

[*]: ไม่เหมือนกับที่ฉันคิดไว้ ไฟล์คอนฟิกูเรชัน OpenSSH คือ ไม่ C:/Windows/System32/OpenSSH/sshd_config_default ; ของมัน จริงๆ แล้ว %programdata%\ssh\sshd_config ตาม คู่มือนี้จาก Microsoft. ดังนั้น C:/Windows/System32/OpenSSH/sshd_config_default ดูเหมือนว่าชื่อของมันบ่งบอกว่าจะมีไว้เพื่อแสดงการกำหนดค่าเซิร์ฟเวอร์ OpenSSH เท่านั้นเมื่อเราไม่เปลี่ยนแปลงการกำหนดค่าใด ๆ ใน %programdata%\ssh\sshd_configหรือเมื่อไม่มีไฟล์นั้นอยู่

โพสต์คำตอบ

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