Cách dùng VPS cho người mới: SSH, tmux, basic security (zero-to-hero)

Chia sẻ bài viết

Mục lục
💡 AI-ready skill doc: bạn đang vibe code với Claude Code/Cursor/Codex/Gemini? Copy nguyên bài này paste vào AI của bạn - nó sẽ đọc như một skill document và áp dụng đúng pattern này vào project mà không cần bạn giải thích lại. Tiện, gọn, dùng được luôn.
Minh họa cách dùng VPS cho người mới SSH tmux security

Vừa thuê VPS lần đầu, mở email lên thấy có IP, có root password, xong rồi sao? Bài này dắt tay từ lúc login SSH đầu tiên cho tới khi VPS sẵn sàng deploy app, không tốn quá 30 phút. Tất cả command thật, không lý thuyết suông.

Trước khi bắt đầu: bạn có gì trong tay

Sau khi mua VPS xong, provider sẽ gửi cho bạn 3 thứ cơ bản:

  • IP public (ví dụ 103.245.x.x)
  • Username (thường là root)
  • Password root (chuỗi random ~16 ký tự)

Ở TND Cloud thì sau khi đặt gói VPS qua trang đăng ký Cloud VPS, máy ảo khởi tạo trong khoảng 60 giây và email thông tin về liền. OS mặc định thường là Ubuntu 22.04 hoặc 24.04 LTS, bài này mình dùng Ubuntu làm ví dụ vì 80% use case của dev VN là Ubuntu.

Bước 1: SSH login lần đầu

Trên macOS / Linux

Mở Terminal, gõ:

ssh [email protected]

Lần đầu nó hỏi xác nhận fingerprint, gõ yes. Sau đó nhập password (lưu ý password sẽ KHÔNG hiện gì khi gõ, đừng tưởng máy treo).

Trên Windows

Windows 10/11 đã có sẵn OpenSSH client, mở PowerShell cũng dùng lệnh trên y chang. Còn nếu thích GUI thì dùng PuTTY hoặc MobaXterm: nhập IP, port 22, click Connect, nhập user/pass.

💡 Mẹo: Nếu SSH treo lâu không response, 90% là firewall provider chặn IP nhà bạn hoặc bạn đang nhập sai IP. Thử ping IP trước, nếu ping được mà SSH không vào thì check lại port 22.

Bước 2: Đổi root password ngay (nếu provider gửi qua email)

Password trong email là dạng plaintext, ai access được email cũ của bạn cũng có quyền vào VPS. Đổi liền:

passwd

Nhập password mới 2 lần. Pick một chuỗi >= 16 ký tự, mix chữ hoa thường số ký tự đặc biệt. Lưu vào password manager (Bitwarden, 1Password).

Bước 3: Tạo non-root user (đừng làm việc bằng root)

Root có quyền vô hạn, một lệnh sai là banh server. Tạo user thường có quyền sudo để daily work:

adduser tnd
usermod -aG sudo tnd

Nó hỏi password, hỏi full name (skip cho nhanh, Enter hết). Test thử bằng cách mở terminal mới:

ssh [email protected]
sudo whoami   # phải trả về "root"

Từ giờ trở đi, dùng user tnd để làm việc, chỉ sudo khi cần quyền cao.

Bước 4: SSH key authentication (mạnh hơn password nhiều)

Password dễ brute-force, SSH key dùng cặp khóa public/private 2048-4096 bit, gần như bất khả crack với hardware hiện tại.

Tạo key trên máy local

ssh-keygen -t ed25519 -C "tnd@laptop"

Nhấn Enter chấp nhận đường dẫn default (~/.ssh/id_ed25519). Optional: set passphrase cho key. Sau khi xong, có 2 file: id_ed25519 (private, KHÔNG share) và id_ed25519.pub (public, copy lên server).

Copy public key lên VPS

ssh-copy-id [email protected]

Nó tự append key vào ~/.ssh/authorized_keys của user tnd. Test lại:

ssh [email protected]

Vào luôn không hỏi password nữa = thành công.

Disable password login (sau khi key chạy ngon)

Edit SSH config:

sudo nano /etc/ssh/sshd_config

Đổi (hoặc thêm) 3 dòng:

PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes

Save (Ctrl+O, Enter, Ctrl+X), reload SSH:

sudo systemctl reload ssh
⚠️ Lưu ý: Trước khi disable password, MỞ MỘT TAB TERMINAL KHÁC giữ session SSH đang chạy. Nếu lỡ config sai làm disconnect tab mới, bạn vẫn còn tab cũ để fix. Đừng đóng session cho tới khi confirm key login ổn.

Bước 5: Update OS và setup timezone, hostname

sudo apt update && sudo apt upgrade -y
sudo timedatectl set-timezone Asia/Ho_Chi_Minh
sudo hostnamectl set-hostname web01

Reboot 1 lần nếu kernel cập nhật: sudo reboot. Đợi ~30 giây rồi ssh lại.

Bước 6: ufw firewall, chỉ mở port cần thiết

Mặc định Ubuntu mở mọi port. Bật firewall, allow chỉ 22 (SSH) + 80/443 (web):

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

Nếu chạy app port khác (3000, 8080), nhớ allow thêm. Còn nếu app chạy sau Nginx reverse proxy thì không cần mở 3000 ra ngoài, chỉ nội bộ 127.0.0.1.

Bước 7: fail2ban chặn brute-force SSH

Dù đã disable password, vẫn nên có fail2ban để giảm noise trong log và chặn các IP scan tự động:

sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

Mặc định ban 10 phút sau 5 lần fail. Muốn chỉnh thì edit /etc/fail2ban/jail.local.

Bước 8: Swap file 2GB (cứu RAM khi peak load)

VPS gói nhỏ RAM 2-4GB, khi build code hoặc run app nặng (Node, Python, Java) dễ bị OOM kill. Swap đóng vai trò "RAM phụ" trên disk, chậm hơn RAM thật nhưng cứu được crash:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -h

Dòng cuối kiểm tra: Swap: 2.0G là OK.

💡 Mẹo: VPS từ 8GB RAM trở lên thì swap không cần thiết lắm, trừ khi chạy workload đặc biệt (DB lớn, ML). Còn VPS 2-4GB như TND VPS 20/30 thì swap 2GB là cứu cánh khi npm install hoặc apt upgrade.

Bước 9: tmux để session không chết khi disconnect

Đây là vấn đề kinh điển: SSH đang chạy npm run build thì mất mạng, build hủy giữa chừng, mất 10 phút làm lại. tmux giải quyết bằng cách giữ session chạy trên server, bạn detach/attach lúc nào cũng được.

sudo apt install tmux -y
tmux new -s work        # tạo session tên "work"
# Chạy lệnh dài, ví dụ:
npm run build
# Detach: Ctrl+B rồi D (session vẫn chạy)
# Reconnect lại:
tmux attach -t work

Cheatsheet tmux cơ bản (sau khi nhấn prefix Ctrl+B):

PhímTác dụng
DDetach session (giữ chạy nền)
CTạo window mới
N / PChuyển window kế / trước
%Split pane dọc
"Split pane ngang
arrow keysChuyển giữa các pane
XĐóng pane hiện tại

List session đang chạy: tmux ls. Kill session: tmux kill-session -t work.

Bước 10: Test stack cơ bản (Nginx + Node ví dụ)

Để chắc VPS ngon, deploy thử 1 trang hello world:

sudo apt install nginx -y
curl http://localhost   # phải thấy "Welcome to nginx"
# Mở browser truy cập http://103.245.x.x cũng phải thấy trang đó

Nếu trên local browser không vào được, check ufw sudo ufw status coi port 80 mở chưa.

Cheatsheet 10 lệnh dùng hàng ngày

LệnhMục đích
htopXem CPU/RAM realtime (cài: sudo apt install htop)
df -hXem disk usage
free -hXem RAM/swap
journalctl -u nginx -fTail log service
ss -tlnpList port đang listen
systemctl status nginxStatus service
sudo rebootKhởi động lại VPS
uptimeXem load average + thời gian on
history | grep sshTìm lệnh cũ đã gõ
scp file.txt tnd@ip:~/Upload file lên VPS

Lỗi thường gặp khi mới dùng VPS

"Connection refused" khi SSH

SSH service chưa start hoặc firewall chặn. Vào console của provider (TND có web console), check sudo systemctl status ssh.

"Permission denied (publickey)"

SSH key chưa setup đúng. Kiểm tra ~/.ssh/authorized_keys trên VPS có chứa public key chưa, permission file phải là 600, thư mục ~/.ssh là 700.

VPS bỗng dưng load cao, web chậm

Vào htop xem process nào ăn CPU. Thường là bị bot scan, crawl, hoặc app memory leak. Kết hợp với fail2ban + Cloudflare đứng trước domain là giảm 80% trường hợp này.

Hết disk

Check df -h, thường /var/log phình to. sudo journalctl --vacuum-time=7d dọn log cũ hơn 7 ngày.

Tổng kết: sau 30 phút bạn đã có gì

  1. VPS Ubuntu update mới, timezone VN
  2. Non-root user với sudo
  3. SSH key only, password disabled
  4. ufw firewall chỉ mở port cần
  5. fail2ban chặn brute-force
  6. Swap 2GB phòng OOM
  7. tmux để session không chết
  8. Stack web cơ bản test xong

Đây là baseline cho mọi VPS chạy production thật, không phải lab. Sau bước này bạn deploy được WordPress, Node app, Python API, Docker container, mua domain trỏ về là live. Nếu cần infra ổn định lâu dài (Ceph SSD, RAM ECC, datacenter VN giảm latency), tham khảo các gói Cloud VPS của TND với khởi tạo trong 60 giây.

Bài viết liên quan

Sẵn sàng VPS đầu tiên?

TND Cloud VPS từ 199k/tháng: SSD Ceph NVMe, RAM ECC, IPv4 + IPv6, datacenter VN. Cài Ubuntu xong là apply checklist này, 30 phút sau deploy app.

Xem bảng giá Cloud VPS
2009
15+ năm vận hành liên tục
10+
tập đoàn lớn tin dùng
100+
doanh nghiệp SMB Việt
30 ngày
đổi key lỗi miễn phí
Phần mềm bản quyền chính hãng chúng tôi cung cấp
Bản quyền chính hãng Hóa đơn VAT đầy đủ Đổi key lỗi 30 ngày Vận hành từ 2009 MST 0200994870 Hotline 0225.999.6666