แม้ในหลายกรณีข้อผิดพลาด ssh_exchange_identification: Connection closed by remote host จะเกิดจากปัญหาไฟล์ตั้งค่า hosts.deny และ hosts.allow แต่มีสาเหตุอื่นๆ อีกมาก หากคุณกำลังอ่านบทความนี้ แสดงว่าคุณน่าจะตรวจสอบแล้วว่าทั้งสองไฟล์ไม่ได้บล็อก IP ของคุณไม่ให้ใช้ SSH เข้าเซิร์ฟเวอร์ระยะไกล
สมมติว่านั่นคือสาเหตุ คุณอาจเผชิญกับปัญหา การพึ่งพา (dependency), การแยกส่วนหน่วยความจำ (memory fragmentation) หรือ เซสชันมากเกินไปจากไคลเอนต์รายเดียว ข่าวดีคือหลังแก้ปัญหาแล้ว คุณไม่ควรเจอข้อผิดพลาดนี้อีก
วิธีที่ 1: แก้ไขการพึ่งพาที่ขาดหาย (Missing Dependencies)
หากเจอข้อผิดพลาด ssh_exchange_identification: connection closed by remote host เฉพาะหลังอัปเดต OpenSSL หรือ glibc อาจเป็นปัญหา dependency ที่หายไป ให้รัน
sudo lsof -n | grep ssh | grep DEL
จากบรรทัดคำสั่งในสถานการณ์นี้ จะแสดงรายการไฟล์ที่เปิดอยู่ แล้วกรองเฉพาะที่ถูกลบไปเมื่อเร็วๆ นี้เกี่ยวกับ SSH daemon

หากไม่ได้ผลลัพธ์อะไรกลับมา ยังลองรีสตาร์ท daemon หรือระบบทั้งหมดได้ ควรลองรีสตาร์ทหากมีข้อผิดพลาดหลายอย่างโยนกลับมา แต่อาจละเลยข้อผิดพลาดเกี่ยวกับ /run/user/1000/gvfs ได้ เพราะมาจากปัญหา virtual file system ที่ไม่เกี่ยวข้อง
อาจลองใช้ apt-get, pacman หรือ yum อัปเดตแพ็กเกจหากสงสัยปัญหา dependency หากอยู่บนระบบ Debian/Ubuntu ลอง sudo apt-get -f upgrade ดูว่าซ่อมแพ็กเกจที่เสียหายได้ไหม
วิธีที่ 2: แก้ไขการแยกส่วนหน่วยความจำ (Memory Fragmentation)
หากวิธีแรกไม่ช่วย อาจมีปัญหาที่ฝั่งโฮสต์ (host side) โฮสต์ที่รันใน VM ไม่ได้มี swap partition เสมอไป ซึ่งนำไปสู่ memory fragmentation ให้เข้าถึงโฮสต์ด้วยวิธีอื่น (อาจเป็นแบบกายภาพหากทำได้) แล้วรีสตาร์ทบริการที่มีปัญหา เช่น MySQL, Apache, nginx เป็นต้น
แม้การรีบูทโฮสต์อาจไม่เป็นไปได้ตลอดเวลา แต่สามารถแก้ปัญหาได้ และควรทำหากเคยสลับระหว่างข้อผิดพลาดนี้กับข้อผิดพลาดที่คืนค่า IP Address จำไว้ว่าหากมีการเข้าถึงเซิร์ฟเวอร์ได้ สามารถรันคำสั่ง vmstat -s เพื่อดูสถิติการใช้หน่วยความจำสำคัญได้ แม้จะเป็นผู้ใช้ทั่วไปก็ตาม

วิธีที่ 3: ตรวจสอบอินสแตนซ์ SSH เกิน (Extra SSH Instances)
นอกจากนี้ ให้ตรวจสอบว่าโฮสต์มีการพยายามเชื่อมต่อเข้ามาหรือไม่ อาจเกินจำนวนเซสชัน SSH สูงสุดโดยไม่รู้ตัว ให้ล้างเซสชันเก่าแล้วลองเชื่อมต่อใหม่ วิธีง่ายคือรันคำสั่ง who เพื่อดูว่ามีกระบวนการผู้ใช้ไหนล็อกอินอยู่ ควรเห็นเพียง 1-2 คน หากมีหลายเซสชันขนานกัน ให้ kill กระบวนการผู้ใช้แล้วล็อกอินใหม่
สิ่งนี้อาจเกิดขึ้นหาก sshd ติดตามไม่ทันสคริปต์ที่เริ่มหลายเซสชัน SSH ในลูป หากเคยเกิดขึ้น ให้เพิ่มคำสั่ง sleep 0.3 ในลูป เพื่อให้ sshd daemon มีเวลาติดตาม
วิธีที่ 4: หาขีดจำกัดการเชื่อมต่อ sshd (sshd Connection Limit)
ปัญหาการเชื่อมต่อแบบนี้พบได้มากเมื่อพยายามใช้ SSH เข้าถึงเราเตอร์หรืออุปกรณ์สวิตช์กล่อง (boxed switch) เนื่องจากค่า default ของจำนวนการเชื่อมต่อสูงสุดน้อยมาก แม้ไม่ควรอนุญาตให้โหลดเซิร์ฟเวอร์เกิน แต่สามารถดูค่า default ได้
ลองรัน
บนเซิร์ฟเวอร์เพื่อดูว่า sshd รองรับการเชื่อมต่อได้กี่ครั้ง ในส่วนใหญ่ระบบจะ default ไว้ที่ 10 การเชื่อมต่อพร้อมกัน ซึ่งควรเพียงพอสำหรับโครงสร้างเซิร์ฟเวอร์ส่วนใหญ่ที่ผู้ใช้ส่วนใหญ่ต้องใช้ SSH อย่างสม่ำเสมอ