วิธีเปลี่ยน SSH Port บน Linux Server
SSH ใช้ Port 22 เป็นค่าเริ่มต้น บอตที่สแกนอินเทอร์เน็ตจึงยิงไปที่ Port นี้ตลอดเวลา การย้าย SSH ไปใช้ Port อื่นไม่ได้ทำให้เซิร์ฟเวอร์ปลอดภัยขึ้นโดยตรง แต่ช่วยลดปริมาณการเดารหัสผ่านอัตโนมัติและทำให้ Log สะอาดขึ้นมาก ควรใช้ร่วมกับ SSH Key และ Fail2ban ไม่ใช่ใช้แทน
การเปลี่ยน Port เป็นงานที่เสี่ยงต่อการล็อกตัวเองออกจากเซิร์ฟเวอร์ หากลืมเปิด Firewall หรือ SELinux คู่มือนี้จึงใช้วิธีเปิด Port ใหม่ควบคู่กับ Port 22 ก่อน ทดสอบจนแน่ใจ แล้วจึงปิด Port 22 ภายหลัง
สิ่งที่ต้องเตรียม
- สิทธิ์ root หรือผู้ใช้ที่ใช้
sudoได้ บน Ubuntu 22.04/24.04 หรือ AlmaLinux/Rocky Linux 8-9 - เลข Port ใหม่ที่ยังไม่มีโปรแกรมใช้ แนะนำช่วง 1024-65535 เช่น 2222 หรือ 49222 ตรวจได้ด้วย
sudo ss -tlnp | grep :2222ถ้าไม่มีผลลัพธ์แปลว่าว่าง - ช่องทางสำรองกรณีเข้า SSH ไม่ได้ เช่น Console Server ผ่าน Web UI
หมายเหตุ: เปิด SSH Session ปัจจุบันค้างไว้ตลอดทุกขั้นตอน และทดสอบด้วยหน้าต่างใหม่เสมอ Session ที่เชื่อมต่ออยู่แล้วจะไม่หลุดเมื่อเปลี่ยนค่า จึงใช้แก้กลับได้หากผิดพลาด
ตัวอย่างในคู่มือนี้ใช้ Port 2222 ให้เปลี่ยนเป็นเลขที่คุณเลือก
ขั้นตอนที่ 1: เปิด Port ใหม่ที่ Firewall ก่อน
ทำขั้นตอนนี้ก่อนแก้ SSH เสมอ
Ubuntu ที่ใช้ UFW
sudo ufw allow 2222/tcp
sudo ufw status
ต้องเห็นบรรทัด 2222/tcp ALLOW Anywhere หาก UFW ยังไม่ได้เปิดใช้งาน (Status: inactive) ข้ามขั้นตอนนี้ได้
AlmaLinux / Rocky Linux ที่ใช้ firewalld
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
ผลลัพธ์ควรมี 2222/tcp
หากเซิร์ฟเวอร์มี Security Group หรือ Firewall ภายนอกจากฝั่งผู้ให้บริการ ให้เปิดพอร์ตนั้นเพิ่มด้วย
ขั้นตอนที่ 2: อนุญาต Port ใหม่ใน SELinux (เฉพาะ AlmaLinux / Rocky)
SELinux อนุญาตให้ SSH ฟังได้เฉพาะ Port ที่ติดป้าย ssh_port_t ถ้าไม่เพิ่ม Port ใหม่ SSH จะเริ่มทำงานไม่ได้ ตรวจสถานะ SELinux ก่อน
getenforce
ถ้าได้ Enforcing หรือ Permissive ให้เพิ่ม Port ดังนี้ (คำสั่ง semanage อยู่ในแพ็กเกจ policycoreutils-python-utils)
sudo dnf install -y policycoreutils-python-utils
sudo semanage port -a -t ssh_port_t -p tcp 2222
sudo semanage port -l | grep ssh_port_t
ผลลัพธ์บรรทัดสุดท้ายควรเป็น ssh_port_t tcp 2222, 22 Ubuntu ไม่ได้ใช้ SELinux ข้ามขั้นตอนนี้ได้
ขั้นตอนที่ 3: เพิ่ม Port ใหม่ในการตั้งค่า SSH
ตรวจก่อนว่ามีการกำหนด Port ไว้ที่ใดบ้าง
sudo grep -ri '^ *port' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
ถ้าไม่มีผลลัพธ์ แปลว่าใช้ค่าเริ่มต้น 22 อยู่ เปิดไฟล์หลัก
sudo nano /etc/ssh/sshd_config
หาบรรทัด #Port 22 แล้วแก้เป็นสองบรรทัด เพื่อให้ SSH ฟังทั้งสอง Port ในช่วงทดสอบ
Port 22
Port 2222
ถ้าคำสั่ง grep ด้านบนพบ Port ในไฟล์ใต้ sshd_config.d/ ให้แก้ที่ไฟล์นั้นแทน เพื่อไม่ให้ค่าซ้ำซ้อนกัน ตรวจไวยากรณ์
sudo sshd -t
ไม่มีข้อความแสดงออกมาแปลว่าถูกต้อง
ขั้นตอนที่ 4: รีสตาร์ต SSH
การเปลี่ยน Port ต้องรีสตาร์ต ไม่ใช่แค่ reload และแต่ละ Distro ต่างกันดังนี้
Ubuntu 24.04
Ubuntu 24.04 ใช้ Socket Activation โดย ssh.socket เป็นตัวรับการเชื่อมต่อ และสร้างรายการ Port จาก sshd_config ตอนโหลด systemd จึงต้องสั่ง daemon-reload ก่อน
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
หากเซิร์ฟเวอร์ของคุณปิด Socket Activation ไว้และใช้ ssh.service โดยตรง ให้ใช้คำสั่งเดียวกับ Ubuntu 22.04
Ubuntu 22.04
sudo systemctl restart ssh
AlmaLinux / Rocky Linux
sudo systemctl restart sshd
ตรวจสอบผลลัพธ์
ดูว่ามีการฟังที่ Port ใหม่จริง
sudo ss -tlnp | grep -E ':22 |:2222 '
ควรเห็นทั้ง 0.0.0.0:22 และ 0.0.0.0:2222 (และแบบ IPv6 [::]) จากนั้นเปิดหน้าต่างใหม่บนเครื่องของคุณแล้วเชื่อมต่อด้วย Port ใหม่
ssh -p 2222 [email protected]
ถ้าเข้าได้ ให้กลับไปแก้ไฟล์ /etc/ssh/sshd_config ลบบรรทัด Port 22 ออก เหลือเพียง Port 2222 แล้วรัน sudo sshd -t และรีสตาร์ตตามขั้นตอนที่ 4 อีกครั้ง ทดสอบเข้าด้วย Port 2222 จากหน้าต่างใหม่อีกรอบ เมื่อสำเร็จจึงค่อยปิด Port 22 ที่ Firewall
# Ubuntu (UFW)
sudo ufw delete allow OpenSSH
sudo ufw delete allow 22/tcp
# AlmaLinux / Rocky (firewalld)
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload
คำสั่ง ufw delete จะแจ้งว่าไม่พบกฎถ้ากฎนั้นไม่เคยถูกเพิ่มไว้ ซึ่งไม่เป็นปัญหา ใช้ sudo ufw status ดูว่าเหลือกฎใดบ้าง
ตั้งค่าเครื่องของคุณให้จำ Port
เพื่อไม่ต้องพิมพ์ -p 2222 ทุกครั้ง เพิ่มข้อความนี้ในไฟล์ ~/.ssh/config บนเครื่องของคุณ
Host myserver
HostName 203.0.113.10
User user
Port 2222
จากนั้นเชื่อมต่อด้วย ssh myserver ได้เลย สำหรับ scp ใช้ตัวเลือก -P 2222 (P ตัวใหญ่) และ rsync ใช้ -e "ssh -p 2222"
ปัญหาที่พบบ่อย
Connection timed out
Port ใหม่ถูก Firewall ปิดอยู่ ทั้งบนเซิร์ฟเวอร์หรือ Firewall ภายนอก เข้าด้วย Port 22 หรือ Console แล้วตรวจกฎตามขั้นตอนที่ 1
Connection refused
SSH ไม่ได้ฟังที่ Port นั้น บน AlmaLinux/Rocky มักเกิดจากลืมเพิ่ม SELinux ดู Log ด้วย sudo journalctl -u sshd -n 30 หากพบ error: Bind to port 2222 on 0.0.0.0 failed: Permission denied ให้ทำขั้นตอนที่ 2 บน Ubuntu 24.04 ถ้า ss ยังเห็นแค่ Port 22 แปลว่ายังไม่ได้สั่ง systemctl daemon-reload ก่อนรีสตาร์ต ssh.socket
Fail2ban ไม่แบน IP ที่โจมตี Port ใหม่
Jail sshd ยังบล็อกเฉพาะ Port 22 ให้แก้ port = 2222 ในส่วน [sshd] ของ /etc/fail2ban/jail.local แล้วรัน sudo systemctl restart fail2ban
หากทำตามแล้วยังเชื่อมต่อไม่ได้ หรือถูกล็อกออกจากเซิร์ฟเวอร์ ติดต่อทีมซัพพอร์ต THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


