วิธีแก้ไขปัญหา SSH ติดอยู่ที่ “การสร้างการเชื่อมต่อกับเซิร์ฟเวอร์”

เผยแพร่แล้ว: 2025-12-21

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

TL;ดร

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

1. ยืนยันการเชื่อมต่อเครือข่ายพื้นฐาน

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

  • ปิงเซิร์ฟเวอร์:ใช้ปิงเพื่อตรวจสอบว่าโฮสต์สามารถเข้าถึงได้
  • Traceroute หรือ MTR:สิ่งนี้สามารถช่วยระบุได้ว่ามีบล็อกการเชื่อมต่อที่การข้ามเครือข่ายระหว่างคุณกับเซิร์ฟเวอร์ SSH หรือไม่
  • Telnet หรือ Netcat:พยายามเข้าถึงพอร์ต 22 (หรือพอร์ต SSH แบบกำหนดเอง) เพื่อยืนยันว่าสามารถเข้าถึงได้: telnet your.server.ip 22 หรือ nc -zv your.server.ip 22

หากเซิร์ฟเวอร์ไม่ตอบสนองต่อการ Ping หรือปฏิเสธพอร์ต SSH แสดงว่าโฮสต์หยุดทำงาน เครือข่ายกำลังบล็อกการรับส่งข้อมูล หรือ SSH ทำงานไม่ถูกต้องบนเซิร์ฟเวอร์

2. ใช้โหมด Verbose เพื่อรับข้อมูลเชิงลึก

SSH มีระดับการใช้คำฟุ่มเฟือยที่แตกต่างกันซึ่งสามารถช่วยระบุจุดที่เกิดความล่าช้าในกระบวนการเชื่อมต่อได้ ใช้ตัวเลือก-v,-vvหรือ-vvvเพื่อรับเอาต์พุตที่มีรายละเอียดเพิ่มเติม:

 ssh -vvv [email protected]

ตำแหน่งทั่วไปที่โหมด verbose ช่วย ได้แก่:

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

3. การตั้งค่าไฟร์วอลล์และกลุ่มความปลอดภัย

หลายครั้งที่ไฟร์วอลล์หรือการตั้งค่าความปลอดภัยบนคลาวด์เป็นสาเหตุ คุณควรตรวจสอบทั้งฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์:

  • ไฟร์วอลล์ฝั่งไคลเอ็นต์:ตรวจสอบให้แน่ใจว่าอนุญาตการเชื่อมต่อขาออกบนพอร์ต 22 (หรือพอร์ต SSH ที่คุณกำหนดเอง)
  • ไฟร์วอลล์ฝั่งเซิร์ฟเวอร์:เครื่องมือเช่นiptablesหรือufwอาจทำให้การรับส่งข้อมูล SSH ขาเข้าลดลง
  • กลุ่มความปลอดภัยบนคลาวด์:ในสภาพแวดล้อม AWS, GCP หรือ Azure ให้ตรวจสอบว่ากลุ่มความปลอดภัยอนุญาต IP ของคุณและพอร์ตที่ถูกต้องหรือไม่

หากการเชื่อมต่อของคุณค้างที่ "กำลังสร้างการเชื่อมต่อ" อาจบ่งบอกว่าแพ็กเก็ตกำลังถูกทิ้งอย่างเงียบ ๆ แทนที่จะถูกปฏิเสธอย่างแข็งขัน

4. ตรวจสอบ SSH Daemon บนเซิร์ฟเวอร์

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

 sudo systemctl status sshd
 sudo netstat -tulpn | grep ssh

สิ่งที่ต้องใส่ใจกับ:

  • บริการนี้ทำงานอยู่หรือไม่?
  • กำลังฟัง IP และพอร์ตที่คาดหวังหรือไม่
  • มีการเปลี่ยนแปลงล่าสุดในไฟล์การกำหนดค่า SSH (โดยปกติคือ/etc/ssh/sshd_config) ที่อาจทำให้เกิดความล้มเหลวหรือไม่

หากเพิ่งกำหนดค่า SSH ใหม่หรือรีสตาร์ทไม่ถูกต้อง กระบวนการอาจหยุดทำงานหรือไม่ตอบสนองต่อการเชื่อมต่อขาเข้า

5. ปัญหาการแก้ไข DNS

หากคุณกำลังเชื่อมต่อโดยใช้ชื่อโฮสต์แทนที่จะเป็นที่อยู่ IP ตรวจสอบให้แน่ใจว่า DNS ได้รับการแก้ไขอย่างถูกต้อง:

 nslookup your.server.domain
 dig your.server.domain

ปัญหาเกี่ยวกับการตั้งค่า DNS อาจทำให้การเชื่อมต่อ SSH ของคุณล่าช้าหรือหยุดชะงักหากชื่อโฮสต์ไม่สามารถแก้ไขได้ ตรวจสอบ/etc/resolv.confหรือการตั้งค่า DNS ในเราเตอร์หรือ VPN ของคุณด้วย

6. TCP Wrappers และข้อจำกัดตามโฮสต์

ใน Linux บางรุ่น ตัวห่อ TCP ซึ่งควบคุมผ่าน/etc/hosts.allowและ/etc/hosts.denyสามารถจำกัดการเข้าถึง SSH ได้:

  • ตรวจสอบให้แน่ใจว่า /etc/hosts.deny ไม่มีบรรทัดเช่น sshd: ALL
  • อนุญาต IP ของคุณอย่างชัดเจนใน /etc/hosts.allow ด้วย sshd: your.ip.address

แม้ว่า TCP Wrapper จะเลิกใช้งานไปแล้วเป็นส่วนใหญ่ แต่ระบบเดิมอาจยังคงใช้งาน TCP Wrapper โดยไม่มีการระบุที่ชัดเจนในบันทึก

7. VPN หรือการแทรกแซงพร็อกซี

VPN และการตั้งค่าพร็อกซีบางอย่างอาจรบกวนการรับส่งข้อมูล SSH:

  • ตรวจสอบว่า VPN ของคุณทำงานอยู่หรือไม่และกำหนดเส้นทางการรับส่งข้อมูลของคุณอย่างถูกต้อง
  • หากใช้อุโมงค์แยก VPN ให้ตรวจสอบว่าการรับส่งข้อมูลไปยังเซิร์ฟเวอร์ SSH นั้นรวมอยู่ในทันเนลหรือไม่
  • ลองปิดการใช้งาน VPN ชั่วคราวและเชื่อมต่อใหม่ผ่านการเข้าถึงอินเทอร์เน็ตโดยตรง

ในทำนองเดียวกัน พร็อกซีขององค์กรหรือเกตเวย์ที่จำกัดอาจทิ้งหรือจัดการแพ็กเก็ต SSH ส่งผลให้เซสชันแฮงค์

8. ปัญหาสำคัญ SSH และความล่าช้าในการตรวจสอบความถูกต้อง

แม้ว่าข้อผิดพลาดในการรับรองความถูกต้องมักจะส่งกลับข้อความ “Permission rejected” ที่ชัดเจน แต่บางครั้งความล่าช้าในการประมวลผลคีย์หรือการค้นหาคีย์ที่ได้รับอนุญาตก็อาจเลียนแบบการเชื่อมต่อที่ค้างอยู่ได้

  • มีคีย์มากเกินไปในไดเร็กทอรี ~/.ssh อาจทำให้การตรวจสอบสิทธิ์ช้าลง ใช้ IdentitiesOnly yes ใน~/.ssh/configเพื่อลดความพยายาม
  • กำหนดค่าคีย์ที่ระบุ: ssh -i ~/.ssh/my_key user@host

9. ข้อจำกัดด้านโหลดเซิร์ฟเวอร์และทรัพยากร

เซิร์ฟเวอร์ที่มีการโหลดจำนวนมากอาจทำให้ช้าลงหรือบล็อกการเชื่อมต่อ SSH ใหม่ได้:

  • ตรวจสอบ CPU, RAM หรือขีดจำกัดกระบวนการที่สูงบนเซิร์ฟเวอร์
  • หากไม่สามารถเข้าถึงได้ผ่าน SSH ให้ใช้คอนโซลระบบคลาวด์เพื่อตรวจสอบสถานะของระบบ

สถานการณ์หน่วยความจำเหลือน้อยอาจทำให้sshdทำงานผิดปกติหรือหมดเวลาความพยายามในการเชื่อมต่อใหม่

10. ถูกแบนชั่วคราวโดย Fail2Ban หรือเครื่องมือที่คล้ายกัน

เครื่องมือรักษาความปลอดภัยเช่น Fail2Ban หรือ DenyHosts อาจบล็อก IP ที่ไม่ผ่านการรับรองความถูกต้องซ้ำแล้วซ้ำอีก ซึ่งอาจส่งผลให้การเชื่อมต่อเงียบค้าง:

  • ตรวจสอบการแบน IP ใน /var/log/fail2ban.log หรือบันทึกที่เกี่ยวข้อง
  • ไวท์ลิสต์ IP ของคุณเมื่อเป็นไปได้หรือเข้าถึงเซิร์ฟเวอร์จากเครือข่ายอื่น

บทสรุป

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

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