ห้องสอนสด

ลงมือจริง: เซสชันแรกบน VPS

เนื้อหาเสริมนี้เล่นซ้ำเซสชันแรกจริง ๆ บน Hostinger VPS ทีละคำสั่ง — ตั้งแต่ล้าง host key เก่า เชื่อมต่อไปยังไอพีจริง ตรวจสุขภาพเซิร์ฟเวอร์ อัปเดต สร้างผู้ใช้ สร้างไฟล์เว็บไฟล์แรก ไปจนถึงเปิดไฟร์วอลล์ ใช้ผู้ใช้ `renzo` และพาธ /var/www/app เพื่อให้ทำตามด้วยค่าจริงได้ พร้อมชี้จุดพิมพ์ผิดเล็ก ๆ จากเซสชันจริงสองจุดที่ควรเลี่ยง หากต้องการคำอธิบายเต็มเบื้องหลังแต่ละคำสั่ง ดูได้ที่โมดูล Linux

01 / 03

เชื่อมต่อและสำรวจเซิร์ฟเวอร์

ก่อนเปลี่ยนอะไร ให้เข้าไปสำรวจก่อน: ล้างกุญแจเก่าที่ค้าง ล็อกอิน ยืนยันว่าคุณเป็นใครและอยู่ที่ไหน แล้วตรวจสุขภาพเครื่องอย่างเร็ว

บนเครื่องคุณเอง: ล้าง host key เก่า

เมื่อ VPS ถูกสร้างหรือติดตั้งใหม่ fingerprint ของ SSH จะเปลี่ยน และเครื่องคุณจะปฏิเสธการเชื่อมต่อพร้อมเตือนว่าอาจถูกโจมตี `ssh-keygen -R <ip>` ลบกุญแจเก่าที่ค้างอยู่ออก เพื่อให้การเชื่อมต่อครั้งถัดไปเรียนรู้กุญแจใหม่ได้อย่างปลอดภัย [1]

ล้างกุญแจ แล้วเชื่อมต่อ

$ ssh-keygen -R 72.61.112.63
# Host 72.61.112.63 found: line 12 (removed)
$ ssh root@72.61.112.63
root@srv01:~#

ตั้งหลักก่อน

สิ่งแรกที่ควรทำหลังล็อกอินคือยืนยันว่าคุณเป็นใครและอยู่ที่ไหน [2]:

  1. 1`whoami` — ยืนยันว่าคุณเป็น root
  2. 2`pwd` — แสดงไดเรกทอรีปัจจุบัน (/root)
  3. 3`ls` — แสดงว่ามีอะไรอยู่ตรงนี้

ตั้งหลัก

root@srv01:~# whoami
root
root@srv01:~# pwd
/root
root@srv01:~# ls

ตรวจสุขภาพเซิร์ฟเวอร์อย่างเร็ว

คำสั่งบอกอะไร
df -hพื้นที่ดิสก์ที่เหลือต่อระบบไฟล์
free -hRAM ที่ใช้ vs ว่าง
uptimeทำงานมานานแค่ไหน + ค่า load average

ภาพรวมสุขภาพ

root@srv01:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 48G 3.2G 43G 7% /
root@srv01:~# free -h
total used free
Mem: 3.8Gi 280Mi 3.3Gi
root@srv01:~# uptime
09:40:12 up 3 min, 1 user, load average: 0.08, 0.10

02 / 03

อัปเดต สร้างผู้ใช้ และไฟล์เว็บแรก

เมื่อเข้าเซิร์ฟเวอร์ได้แล้ว ให้แพตช์ระบบ เปลี่ยนจากการใช้ root ประจำวันมาเป็นผู้ใช้ sudo ทั่วไป แล้วสร้างไดเรกทอรีเว็บและไฟล์แรก

อัปเดตทุกอย่างก่อน

บนเซิร์ฟเวอร์ใหม่เอี่ยม ให้แพตช์ก่อนทำอย่างอื่น (ตอนนี้คุณเป็น root จึงไม่ต้องใช้ sudo):

  1. 1`apt update` — รีเฟรชรายการแพ็กเกจ [1]
  2. 2`apt upgrade -y` — ติดตั้งอัปเดตทั้งหมดที่มี
  3. 3`reboot` — รีสตาร์ตถ้ามีการอัปเดตเคอร์เนล แล้วเชื่อมต่อใหม่หลังผ่านไปสักครู่

สร้างผู้ใช้ที่ไม่ใช่ root (renzo)

  1. 1`adduser renzo` — สร้างบัญชีและตั้งรหัสผ่าน [2]
  2. 2`usermod -aG sudo renzo` — ให้สิทธิ์แอดมินผ่านกลุ่ม sudo
  3. 3`su - renzo` — สลับไปเป็นผู้ใช้ใหม่ (สังเกตยัติภังค์ `-`)

สร้าง renzo

root@srv01:~# adduser renzo
New password:
root@srv01:~# usermod -aG sudo renzo
root@srv01:~# su - renzo
renzo@srv01:~$ sudo whoami
root

ระวังขีด: su - renzo

คำสั่งที่ถูกต้องคือ `su - renzo` โดยใช้ยัติภังค์ธรรมดา (-) และมีเว้นวรรคทั้งสองข้าง (เครื่องหมาย `-` โหลดสภาพแวดล้อมล็อกอินเต็มของ renzo) การคัดลอกจากเอกสารอาจเปลี่ยนเป็น `su – renzo` ที่ใช้ขีดยาว (en-dash, –) ซึ่งเชลล์ไม่เข้าใจ ถ้าเจอ error ให้พิมพ์ยัติภังค์ใหม่ด้วยมือ

สร้างไดเรกทอรีเว็บและแก้ไขไฟล์

  1. 1`sudo mkdir -p /var/www/app` — สร้างโฟลเดอร์พร้อมไดเรกทอรีแม่ที่ขาด
  2. 2`cd /var/www/app` — เข้าไปในนั้น
  3. 3`sudo nano index.html` — เปิดโปรแกรมแก้ไขแล้วพิมพ์ HTML
  4. 4บันทึกด้วย Ctrl+O แล้ว Enter; ออกด้วย Ctrl+X

สร้างหน้าเว็บ

renzo@srv01:~$ sudo mkdir -p /var/www/app
renzo@srv01:~$ cd /var/www/app
renzo@srv01:/var/www/app$ sudo nano index.html
# พิมพ์ แล้ว Ctrl+O Enter (บันทึก) Ctrl+X (ออก)

rm -rf ลบถาวร — อ่านพาธให้ดี

`sudo rm -rf /var/www/myapp` ลบโฟลเดอร์นั้นและทุกอย่างข้างในทันที ไม่มีถังขยะ ไม่มีการถามยืนยัน สังเกตว่ามันชี้ไปที่ `myapp` ไม่ใช่ `app` ที่คุณเพิ่งสร้าง — พิมพ์ผิดคำเดียวก็ลบผิดที่ ให้อ่านพาธเต็มทุกครั้งก่อนกด Enter

อ่าน ls -la

`ls -la` แสดงทุกรายการ (รวมไฟล์ซ่อนที่ขึ้นต้นด้วยจุด) แบบยาว [3] อักษรตัวแรกของแต่ละบรรทัดคือชนิด และอีกเก้าตัวถัดมาคือสิทธิ์ rwx ของเจ้าของ กลุ่ม และคนอื่น

อักษรนำหน้าของ ls -la

สัญลักษณ์ความหมาย
dไดเรกทอรี (ไฟล์ธรรมดาแสดงเป็น -)
rอ่าน (read)
wเขียน (write)
xรัน/execute (ถ้าเป็นไดเรกทอรี: เข้าไปข้างใน)

ผลลัพธ์ ls -la

renzo@srv01:/var/www/app$ ls -la
drwxr-xr-x 2 root root 4096 Jun 29 .
-rw-r--r-- 1 root root 128 Jun 29 index.html
# d rwx r-x r-x -> ไดเรกทอรี; เจ้าของ rwx, กลุ่ม r-x, อื่น r-x

03 / 03

เปิดไฟร์วอลล์ให้ SSH

ปิดท้ายด้วยการเปิดไฟร์วอลล์ — แต่ต้องอนุญาต SSH ก่อน ไม่งั้นคุณจะล็อกตัวเองออกจากเซิร์ฟเวอร์ที่เพิ่งตั้งค่าเสร็จ

อนุญาต SSH ก่อน แล้วค่อยเปิด

  1. 1`sudo ufw status` — ตรวจว่าไฟร์วอลล์ทำงานอยู่ไหม [1]
  2. 2`sudo ufw allow OpenSSH` — อนุญาต SSH ก่อน เปิดใช้งาน เพื่อไม่ให้ล็อกตัวเองออก [2]
  3. 3`sudo ufw enable` — เปิดไฟร์วอลล์เมื่ออนุญาต SSH แล้ว

เปิดไฟร์วอลล์

renzo@srv01:~$ sudo ufw status
Status: inactive
renzo@srv01:~$ sudo ufw allow OpenSSH
Rules updated
renzo@srv01:~$ sudo ufw enable
Firewall is active and enabled on system startup

เป็น OpenSSH ไม่ใช่ OenSSH

ชื่อโปรไฟล์คือ `OpenSSH` (มีตัว p) `sudo ufw allow OenSSH` จะล้มเหลวพร้อมข้อความ “Could not find a profile matching OenSSH” ถ้า ufw ปฏิเสธกฎ ให้ตรวจการสะกด — หรือใช้หมายเลขพอร์ตแทนด้วย `sudo ufw allow 22`

ทบทวน

  • 1

    หลังติดตั้ง VPS ใหม่ ssh ปฏิเสธการเชื่อมต่อและเตือนว่า host key เปลี่ยน คำสั่งใดแก้ได้ และทำไม

    ดูเฉลย

    คำตอบ: ssh-keygen -R <ไอพีเซิร์ฟเวอร์> — มันลบ fingerprint เก่าที่ค้างอยู่ เพื่อให้ SSH เรียนรู้กุญแจใหม่อย่างปลอดภัยในการเชื่อมต่อครั้งถัดไป

  • 2

    คุณพิมพ์ `su – renzo` แล้วขึ้น error ผิดตรงไหน

    ดูเฉลย

    คำตอบ: เครื่องหมาย `–` เป็นขีดยาว (en-dash) ไม่ใช่ยัติภังค์ ให้พิมพ์ใหม่เป็น `su - renzo` ด้วยยัติภังค์ธรรมดา

  • 3

    ทำไม `sudo ufw allow OpenSSH` ต้องมาก่อน `sudo ufw enable`

    ดูเฉลย

    คำตอบ: การเปิดไฟร์วอลล์แบบ default-deny โดยไม่มีกฎ SSH จะบล็อกพอร์ต 22 และตัดการเชื่อมต่อของคุณ ทำให้ถูกล็อกออกจากเซิร์ฟเวอร์

แหล่งอ้างอิง

  1. [1]UFW — Ubuntu community help
  2. [2]ufw(8) — Ubuntu manual page