ผู้ใช้สามารถเข้าถึง Terminal ของ CentOS 9 ผ่าน GUI บนเว็บเพจ PHP ซึ่งสิ่งนี้จะเป็นเหมือน Web-based Terminal ที่รันคำสั่ง Linux ผ่านเว็บเบราว์เซอร์
เรามีหลายวิธีทำ แต่ต้องระวังเรื่อง ความปลอดภัยสูงมาก เพราะถ้าเปิดให้รันคำสั่งตรง ๆ จากเว็บจะเสี่ยงต่อการถูกโจมตี
ใช้ ttyd แทน (แนะนำบน CentOS 9)
ttyd
เป็น modern web terminal และติดตั้งง่ายกว่า:
1.ติดตั้งจาก repo EPEL:
sudo dnf install epel-release -y
sudo dnf install ttyd -y
2.รัน terminal:
ttyd -p 4200 bash
3.เข้าเว็บ:
http://[server-ip]:4200
เปิด port 4200 เมื่อเปิดจากภายนอกไม่ได้
1. Firewall บล็อกพอร์ต 4200
CentOS 9 ใช้ firewalld
โดยพอร์ต 4200 ยังไม่ได้เปิดให้เข้าถึงจากภายนอก
ตรวจสอบสถานะ firewall:
sudo firewall-cmd --state
เปิดพอร์ต 4200:
sudo firewall-cmd --permanent --add-port=4200/tcp
sudo firewall-cmd --reload
ตรวจสอบว่าเปิดแล้ว:
sudo firewall-cmd --list-ports
คุณควรเห็น 4200/tcp
อยู่ในรายการ
2.ttyd ฟังเฉพาะ localhost
ตอนคุณรันคำสั่ง:
ttyd -p 4200 bash
โดยค่า default ttyd
ฟัง เฉพาะ 127.0.0.1 ซึ่งหมายถึงเข้าจากเครื่อง local เท่านั้น
ให้รัน ttyd ให้ฟังทุก IP:
ttyd -p 4200 -i 0.0.0.0 bash
-i 0.0.0.0
= ฟังทุก interface
หลังจากนั้นลองเปิดจากเครื่องอื่น:
http://[ip เครื่อง]:4200
✅ สรุป
- เปิดพอร์ต 4200 บน firewall
- รัน ttyd ฟังทุก IP (
-i 0.0.0.0
)
เมื่อคุณเข้าหน้าเว็บ ttyd
ได้แต่ พิมพ์อะไรไม่ได้
วิธีแก้: ใช้ --writable
หรือ -w
รัน ttyd แบบเขียนได้:
ttyd -p 4200 -i 0.0.0.0 -w bash
-w
หรือ --writable
= เปิดให้พิมพ์และรันคำสั่งได้
-i 0.0.0.0
= ฟังทุก interface
-p 4200
= พอร์ต 4200
bash
= shell ที่จะรัน
หรือ
ttyd -p 4200 -i 0.0.0.0 --writable bash
--writable
= เปิดโหมดพิมพ์ได้
bash
= shell ที่จะรัน
อยากให้ ttyd รันอัตโนมัติเมื่อเปิดเครื่อง
1.สร้างไฟล์ service
สร้างไฟล์ใหม่ /etc/systemd/system/ttyd.service
:
sudo nano /etc/systemd/system/ttyd.service
วางเนื้อหาต่อไปนี้:
[Unit]
Description=ttyd Web Terminal
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/ttyd -p 4200 -i 0.0.0.0 --writable bash
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
User=root
→ รัน ttyd ด้วย root เพื่อให้สามารถรันคำสั่ง system ได้ทั้งหมด
Restart=always
→ ถ้า ttyd crash จะ restart อัตโนมัติ
2.รีโหลด systemd และเริ่ม service
sudo systemctl daemon-reload
sudo systemctl enable ttyd.service
sudo systemctl start ttyd.service
ตรวจสอบสถานะ:
sudo systemctl status ttyd.service
คุณควรเห็น active (running)
✅
3.เปิด firewall พอร์ต 4200
sudo firewall-cmd --permanent --add-port=4200/tcp
sudo firewall-cmd --reload
4.ทดสอบ
เปิดเบราว์เซอร์:
http://[server-ip]:4200
คุณจะเห็น web terminal พร้อมพิมพ์คำสั่งได้ทันที
อยากให้ ttyd web terminal รันแล้วมี password login ก่อนเข้าหน้า terminal
ttyd รองรับ authentication ด้วย -c
(credential) แบบ user:password
ตัวอย่างแก้ไขไฟล์ systemd
[Unit]
Description=ttyd Web Terminal
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/ttyd -p 4200 -i 0.0.0.0 --writable -c admin:1234 bash
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
-c admin:1234
→ ใส่ username = admin
และ password = 1234
เมื่อเข้าเว็บ http://<server-ip>:4200
จะขึ้นหน้า login
หลัง login จึงเข้าถึง bash ได้
ขั้นตอน
1.แก้ไขไฟล์ systemd:
sudo nano /etc/systemd/system/ttyd.service
2.เพิ่ม -c user:password
เข้าไปใน ExecStart
3.รีโหลด systemd และ restart service:
sudo systemctl daemon-reload
sudo systemctl restart ttyd.service
4.ตรวจสอบสถานะ:
sudo systemctl status ttyd.service
5.เปิดเบราว์เซอร์เข้า:
http://[server-ip]:4200
จะเจอ login prompt ก่อนเข้า terminal