SSH Connection refused: แก้เข้าเซิร์ฟเวอร์ไม่ได้ทีละขั้น

แก้ SSH Connection refused ทีละขั้น แยกอาการจาก timed out และ Permission denied ตรวจ sshd พอร์ต ssh.socket ไฟร์วอลล์ Fail2ban และ Security Group ผ่าน Console

โดย ทีมงาน THAI DATA CLOUD อ่าน 14 นาที

แชร์FacebookXLINELinkedIn
SSH Connection refused — SSH Connection refused: แก้เข้าเซิร์ฟเวอร์ไม่ได้ทีละขั้น
SSH Connection refused: แก้เข้าเซิร์ฟเวอร์ไม่ได้ทีละขั้น

คำตอบสั้น ๆ: แก้ SSH Connection refused ทีละขั้น แยกอาการจาก timed out และ Permission denied ตรวจ sshd พอร์ต ssh.socket ไฟร์วอลล์ Fail2ban และ Security Group ผ่าน Console

คู่มือนี้อธิบาย SSH Connection refused ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย

SSH Connection refused คือข้อความ ssh: connect to host 203.0.113.10 port 22: Connection refused ที่ขึ้นเมื่อแพ็กเก็ตไปถึงเซิร์ฟเวอร์แล้ว แต่เซิร์ฟเวอร์ตอบกลับว่าไม่รับการเชื่อมต่อที่พอร์ตนั้น ต่างจาก Connection timed out ที่แพ็กเก็ตหายระหว่างทางโดยไม่มีคำตอบ และต่างจาก Permission denied ที่เชื่อมต่อได้แล้วแต่ยืนยันตัวตนไม่ผ่าน การแยกสามอาการนี้ให้ออกตั้งแต่แรกช่วยลดเวลาแก้ได้มาก เพราะแต่ละอาการชี้ไปคนละชั้น

คู่มือนี้เหมาะกับผู้ดูแล Linux Server ที่จู่ ๆ เข้าเครื่องผ่าน SSH ไม่ได้ เมื่อไล่ตามขั้นตอนครบ คุณจะรู้ว่า SSH Connection refused มาจาก sshd หยุดทำงาน คอนฟิกผิด พอร์ตเปลี่ยน ไฟร์วอลล์ในเครื่อง หรือ Fail2ban แบน IP ของคุณ และแก้กลับได้ผ่าน Console ของผู้ให้บริการโดยไม่ต้องติดตั้งระบบใหม่

สิ่งที่ต้องเตรียม

  • IP สาธารณะของเซิร์ฟเวอร์ พอร์ต SSH ที่ตั้งไว้ และชื่อผู้ใช้ที่ใช้ล็อกอิน
  • IP สาธารณะของเครื่องคุณเอง เพื่อตรวจว่าถูกแบนหรือไม่ และเพื่อใช้ในกฎไฟร์วอลล์
  • ทางเข้าสำรองที่ไม่ผ่าน SSH เพราะระหว่างที่เจอ SSH Connection refused คุณต้องสั่งงานเครื่องทางอื่น เช่น Console ผ่านเว็บ ดูวิธีเปิดได้ที่ คู่มือ Remote เข้า Console Server ผ่าน Web UI ถ้าจำรหัสผ่าน root ไม่ได้ ตั้งใหม่ได้ตาม คู่มือ Reset OS Password
  • สิทธิ์เข้าหน้าจัดการไฟร์วอลล์ของคลาวด์ เช่น Security Group บน TDC Enterprise
ตารางเปรียบเทียบข้อความ SSH Connection refused, timed out, No route to host และ Permission denied ว่าหมายถึงอะไรและต้องตรวจอะไรก่อน
refused แปลว่าถึงเครื่องแล้วแต่ถูกปฏิเสธ ส่วน timed out แปลว่าแพ็กเก็ตถูกทิ้งก่อนถึง

ขั้นตอนที่ 1: อ่านข้อความผิดพลาดให้ตรงอาการ

เมื่อเจอข้อความที่ดูคล้าย SSH Connection refused ให้รัน ssh พร้อม -v เพื่อดูว่าหยุดที่ขั้นไหน ข้อความบรรทัดสุดท้ายคือสิ่งที่ต้องใช้

ssh -v -p 22 [email protected]
  • SSH Connection refused: เครื่องปลายทางตอบปฏิเสธทันที แปลว่าเครือข่ายถึงเครื่องแล้ว ปัญหาอยู่ที่ไม่มีโปรแกรมรอที่พอร์ตนั้น หรือไฟร์วอลล์ในเครื่องตั้งให้ตอบปฏิเสธ เช่น Fail2ban
  • Connection timed out: ไม่มีคำตอบเลย มักเป็นไฟร์วอลล์ที่ทิ้งแพ็กเก็ตเงียบ ๆ เช่น Security Group, ค่าเริ่มต้นของ UFW, IP ผิด หรือเครื่องปิดอยู่
  • No route to host: บน AlmaLinux และ Rocky Linux มักมาจาก firewalld ที่ปฏิเสธด้วย ICMP
  • Permission denied (publickey): เข้าถึง sshd แล้ว แต่คีย์หรือรหัสผ่านไม่ผ่าน ไม่ใช่ปัญหาเครือข่าย ให้ดู คู่มือตั้งค่า SSH Key บน Linux
  • Connection reset by peer หรือ Connection closed ทันทีหลังเชื่อมต่อ: sshd รับแล้วตัดทิ้ง มักมาจากการจำกัดจำนวนการเชื่อมต่อหรือกฎที่ปฏิเสธ IP

คู่มือนี้เน้นอาการ SSH Connection refused เป็นหลัก และครอบคลุม timed out ในขั้นตอนที่ 5 เพราะสองอาการนี้มักสลับกันไปมาระหว่างแก้

ขั้นตอนที่ 2: ทดสอบพอร์ตจากเครื่องของคุณ

ทดสอบเฉพาะการเชื่อมต่อ TCP โดยไม่ยืนยันตัวตน เพื่อแยกปัญหาเครือข่ายออกจากปัญหาของ ssh client

# macOS / Linux
nc -vz -w 5 203.0.113.10 22

# Windows PowerShell
Test-NetConnection 203.0.113.10 -Port 22

ถ้า nc ตอบ Connection refused ทันที ยืนยันได้ว่าเป็น SSH Connection refused ที่เครื่องปลายทาง ให้ตรวจสองเรื่องที่ทำพลาดบ่อยที่สุดก่อน คือพอร์ต SSH ถูกเปลี่ยนไปแล้วแต่ยังเชื่อมต่อพอร์ต 22 (ทบทวนได้จาก คู่มือเปลี่ยน SSH Port บน Linux) และ IP ที่ใช้ถูกเครื่องหรือไม่ ลองพอร์ตอื่นที่เครื่องเปิดอยู่ เช่น nc -vz 203.0.113.10 443 ถ้าพอร์ตเว็บตอบได้ แปลว่าเครื่องทำงานและเครือข่ายปกติ SSH Connection refused จึงจำกัดอยู่ที่บริการ SSH เท่านั้น

ถ้าคุณเพิ่งรีสตาร์ตเครื่องหรือบริการ ให้รอ 1–2 นาทีแล้วลองใหม่ เพราะช่วงที่ระบบกำลังบูต sshd ยังไม่เริ่มฟังพอร์ต และจะตอบ SSH Connection refused ชั่วคราว

ขั้นตอนที่ 3: เข้า Console แล้วตรวจบริการ sshd

สาเหตุที่พบบ่อยที่สุดของ SSH Connection refused คือ sshd ไม่ได้ทำงาน เข้าเครื่องผ่าน Console ของผู้ให้บริการ แล้วตรวจว่าบริการทำงานและฟังพอร์ตใดอยู่ บน Ubuntu และ Debian ชื่อบริการคือ ssh บน AlmaLinux และ Rocky Linux คือ sshd

systemctl status ssh --no-pager
sudo ss -tlnp | grep -E 'sshd|:22 '
sudo sshd -t
sudo journalctl -u ssh -n 30 --no-pager

sshd -t ตรวจไวยากรณ์ของ /etc/ssh/sshd_config และไฟล์ใน sshd_config.d/ ถ้าไม่มีผลลัพธ์แปลว่าผ่าน ถ้ามีข้อผิดพลาดจะบอกเลขบรรทัด เช่น Bad configuration option ซึ่งทำให้ sshd เริ่มไม่ได้และเกิด SSH Connection refused ทันทีหลังรีสตาร์ต (บน Ubuntu ที่ใช้ ssh.socket อาการอาจเป็น Connection reset หรือ closed แทน) แก้บรรทัดนั้นแล้วสั่ง sudo systemctl restart ssh

ข้อความที่พบบ่อยในล็อกเมื่อ sshd เริ่มไม่ได้มีอีกสองแบบ sshd: no hostkeys available -- exiting หมายถึงไฟล์ host key หาย แก้ด้วย sudo ssh-keygen -A ซึ่งสร้างเฉพาะคีย์ที่ขาด ส่วน Missing privilege separation directory: /run/sshd แก้ด้วย sudo mkdir -p /run/sshd && sudo chmod 0755 /run/sshd แล้วเริ่มบริการใหม่

บน Ubuntu 22.10 ขึ้นไปรวมถึง 24.04 SSH ใช้ socket activation ผ่าน ssh.socket ตรวจด้วย systemctl is-active ssh.socket ถ้าได้ active คำสั่ง ss จะแสดงว่า systemd เป็นผู้ถือพอร์ต และการแก้ Port ใน sshd_config ต้องตามด้วยสองคำสั่งนี้ ไม่เช่นนั้น socket จะยังฟังพอร์ตเดิม และการเชื่อมต่อไปพอร์ตใหม่จะได้ SSH Connection refused

sudo systemctl daemon-reload
sudo systemctl restart ssh.socket

ตรวจบรรทัด ListenAddress ด้วย ถ้าตั้งไว้เป็น IP ภายในอย่างเดียว เช่น 10.0.0.11 การเชื่อมต่อจาก IP สาธารณะจะเจอ SSH Connection refused ทั้งที่บริการทำงานปกติ

หน้าจอ Console แสดง sshd.service สถานะ failed และ sshd -t ฟ้อง Bad configuration option ซึ่งทำให้เกิด SSH Connection refused
รัน sshd -t ทุกครั้งก่อนรีสตาร์ต คอนฟิกผิดบรรทัดเดียวทำให้ทุกคนเข้าเครื่องไม่ได้

ขั้นตอนที่ 4: ตรวจ Fail2ban, CrowdSec และไฟร์วอลล์ในเครื่อง

ถ้า sshd ทำงานและฟังพอร์ตถูกต้อง แต่ IP ของคุณยังได้ SSH Connection refused ขณะที่เพื่อนร่วมงานจากเครือข่ายอื่นเข้าได้ ให้สงสัยว่า IP ของคุณถูกแบน ค่าเริ่มต้นของ Fail2ban โดยทั่วไปตอบกลับแบบ reject ฝั่งผู้ใช้จึงเห็น Connection refused ไม่ใช่ timeout ส่วน firewall bouncer ของ CrowdSec ทิ้งแพ็กเก็ตเงียบ ๆ อาการจึงเป็น timed out แทน

sudo fail2ban-client status sshd
sudo fail2ban-client set sshd unbanip 198.51.100.25

# ถ้าใช้ CrowdSec
sudo cscli decisions list -i 198.51.100.25
sudo cscli decisions delete -i 198.51.100.25

หลังปลดแบน ลองเชื่อมต่อใหม่ ถ้าไม่ขึ้น SSH Connection refused แล้ว แปลว่าต้นเหตุคือการแบน ให้เพิ่ม IP สำนักงานใน ignoreip ของไฟล์ /etc/fail2ban/jail.local เพื่อไม่ให้เกิดซ้ำ รายละเอียดอยู่ใน คู่มือป้องกันการเดารหัสผ่าน SSH ด้วย Fail2ban สาเหตุที่ถูกแบนบ่อยคือโปรแกรม SFTP หรือสคริปต์ที่ลองคีย์หลายดอกจนเกิน maxretry

จากนั้นตรวจไฟร์วอลล์ในเครื่องว่าอนุญาตพอร์ต SSH หรือไม่ กฎแบบ REJECT ใน UFW, nftables หรือ iptables ทำให้เกิด SSH Connection refused ได้เช่นเดียวกับ Fail2ban

sudo ufw status numbered          # Ubuntu ที่ใช้ UFW
sudo firewall-cmd --list-all       # AlmaLinux / Rocky Linux
sudo nft list ruleset | grep -n -E 'dport (22|ssh)'

ถ้าย้ายพอร์ต SSH บน AlmaLinux ไปเลขอื่น SELinux ต้องรู้จักพอร์ตใหม่ด้วย sudo semanage port -a -t ssh_port_t -p tcp 2222 ไม่เช่นนั้น sshd จะผูกพอร์ตใหม่ไม่ได้และผู้ใช้เห็น SSH Connection refused

ขั้นตอนที่ 5: ตรวจ Security Group เมื่อเป็น timed out

ถ้าอาการเป็น Connection timed out แทน SSH Connection refused แพ็กเก็ตมักถูกทิ้งก่อนถึงระบบปฏิบัติการ ที่ชั้นไฟร์วอลล์ของคลาวด์ บน TDC Enterprise ให้ตรวจกลุ่มกฎที่ผูกกับเครื่องว่ามีกฎ Inbound แบบ Allow TCP พอร์ต SSH จาก IP ของคุณ ขั้นตอนการแก้กฎอยู่ใน คู่มือ Security Group บน TDC Enterprise

จุดที่พลาดบ่อยคือ IP สาธารณะของสำนักงานเปลี่ยนหลังเราเตอร์รีสตาร์ต ทำให้กฎที่จำกัดเฉพาะ IP เดิมใช้ไม่ได้ ตรวจ IP ปัจจุบันของคุณแล้วแก้ Source ของกฎให้ตรง และอย่าเปิดพอร์ต SSH ให้ 0.0.0.0/0 เป็นการถาวรเพียงเพราะเข้าไม่ได้ครั้งหนึ่ง ถ้าเปิดชั่วคราวเพื่อทดสอบ ให้ปิดกลับทันทีหลังแก้เสร็จ

ขั้นตอนที่ 6: ทดสอบและกันไม่ให้ล็อกตัวเองออกครั้งหน้า

เมื่อแก้แล้ว ทดสอบจากเครื่องของคุณอีกครั้งด้วย ssh -v ให้แน่ใจว่าไม่ขึ้น SSH Connection refused แล้ว และเปิด session ใหม่ทุกครั้งก่อนปิด session เดิม ทุกครั้งที่แก้ sshd_config ไฟร์วอลล์ หรือพอร์ต ให้ทำตามลำดับนี้ เพื่อไม่ให้ SSH Connection refused กลับมาในวันที่ไม่มีใครอยู่หน้า Console

  1. รัน sudo sshd -t ก่อนรีสตาร์ตเสมอ
  2. เปิดพอร์ตใหม่ที่ไฟร์วอลล์ทั้งในเครื่องและ Security Group ก่อนเปลี่ยนพอร์ตของ sshd
  3. คง session เดิมไว้ แล้วทดสอบเข้าใหม่จากหน้าต่างอีกบาน
  4. เพิ่ม IP ที่ไว้ใจใน ignoreip ของ Fail2ban หรือ allowlist ของ CrowdSec
  5. จด IP พอร์ต และวิธีเข้า Console ไว้ในเอกสารของทีม
เช็กลิสต์ก่อนแก้ค่า SSH ไฟร์วอลล์หรือพอร์ต เพื่อไม่ให้เกิด SSH Connection refused ซ้ำ และสิ่งที่ไม่ควรทำ
ทดสอบจากหน้าต่างใหม่เสมอ และเก็บ session เดิมไว้จนแน่ใจว่าเข้าได้

ปัญหาที่พบบ่อยเกี่ยวกับ SSH Connection refused

เข้าได้จากมือถือที่ใช้ 4G แต่จากออฟฟิศขึ้น SSH Connection refused เป็นเพราะอะไร?

เกือบทุกครั้งเป็นเพราะ IP ของออฟฟิศถูกแบนโดย Fail2ban หรือ CrowdSec หรือกฎไฟร์วอลล์จำกัดเฉพาะ IP อื่น ใช้มือถือหรือ Console เข้าไปตรวจและปลดแบนตามขั้นตอนที่ 4 แล้วเพิ่ม IP ออฟฟิศใน ignoreip

ขึ้น REMOTE HOST IDENTIFICATION HAS CHANGED หลังติดตั้งระบบใหม่ แก้อย่างไร?

เครื่องที่ติดตั้งใหม่มี host key ชุดใหม่ ssh บนเครื่องคุณจึงเตือนเพราะไม่ตรงกับที่จำไว้ ถ้าแน่ใจว่าคุณเป็นคนติดตั้งเครื่องใหม่เอง ให้ลบรายการเก่าด้วย ssh-keygen -R 203.0.113.10 แล้วเชื่อมต่อใหม่ ถ้าไม่ได้ติดตั้งใหม่ ให้หยุดและตรวจสอบก่อน เพราะอาจมีผู้ดักกลางทาง

รีสตาร์ต sshd แล้วยังได้ SSH Connection refused บนพอร์ตใหม่ ทำไม?

บน Ubuntu ที่ใช้ ssh.socket การรีสตาร์ต ssh.service ไม่เปลี่ยนพอร์ตที่ฟัง ต้องรัน daemon-reload และรีสตาร์ต ssh.socket ตามขั้นตอนที่ 3 บน AlmaLinux ให้ตรวจ semanage และ firewalld ว่าเพิ่มพอร์ตใหม่แล้ว ดูตัวเลือกทั้งหมดของ sshd ได้ที่ sshd_config(5) ของ OpenSSH

Console ก็เข้าไม่ได้หรือจอดำ ควรทำอย่างไร?

ตรวจสถานะเครื่องในพอร์ทัลว่ายังทำงานอยู่ ลองสั่งรีบูตจากพอร์ทัล ถ้าหลังรีบูตยังเข้าไม่ได้ อาจเป็นปัญหาดิสก์เต็มหรือระบบไฟล์เสีย ให้เปิด Ticket แจ้งทีมงานพร้อม IP และเวลาที่เกิด

ถ้าลองครบแล้วยังแก้ SSH Connection refused ไม่ได้ หรือต้องการให้ช่วยตั้ง SSH ให้ปลอดภัยโดยไม่ล็อกตัวเองออก ติดต่อทีมงาน THAI DATA CLOUD ได้ และถ้ากำลังวางแผนเครื่องใหม่ที่ตั้งค่าความปลอดภัยพื้นฐานไว้ตั้งแต่ต้น ดูรายละเอียดได้ที่หน้า Cloud Linux Server

อ่านเพิ่มเติมเกี่ยวกับ SSH Connection refused

แชร์FacebookXLINELinkedIn

มีคำถามเรื่องบริการ? ติดต่อทีมงาน