Đăng nhập

Kết nối GitHub Secrets với VPS để CI/CD an toàn trong 10 phút

Hướng dẫn thực chiến tạo SSH key, thêm public key vào VPS và cấu hình GitHub Actions Secrets để tự động deploy. Nhanh, gọn, bảo mật.
Kết nối GitHub Secrets với VPS để CI/CD an toàn trong 10 phút

Yêu cầu trước khi bắt đầu

  • Máy cá nhân và VPS đều có OpenSSH.

  • Quyền truy cập GitHub repo.

  • Biết thông tin VPS: IP, user SSH, port.

  • Ví dụ trong bài dùng user deploy, IP 203.0.113.10, port 22. Bạn thay bằng thông tin thật của bạn.


Bước 1: Tạo SSH key trên máy cá nhân

Chạy lệnh sau và thay email của bạn cho phần comment (khuyên dùng ed25519 hiện đại, nhẹ, an toàn):

ssh-keygen -t ed25519 -C "you@example.com"

Nếu cần RSA cho hệ thống cũ:

ssh-keygen -t rsa -b 4096 -C "you@example.com"

Mặc định key nằm ở:

  • Private key: ~/.ssh/id_ed25519 hoặc ~/.ssh/id_rsa

  • Public key: ~/.ssh/id_ed25519.pub hoặc ~/.ssh/id_rsa.pub

Xem nội dung public key:

cat ~/.ssh/id_ed25519.pub

📝 Không chia sẻ private key (ví dụ: id_ed25519, id_rsa) cho bất kỳ ai. Chỉ public key (.pub) mới được phép công khai.


Bước 2: Thêm public key vào VPS

Cách 1: Dán tay vào authorized_keys (lần đầu có thể đăng nhập bằng mật khẩu):

ssh deploy@203.0.113.10 -p 22
mkdir -p ~/.ssh && chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys   # dán toàn bộ nội dung file .pub vào đây
chmod 600 ~/.ssh/authorized_keys

Cách 2: Dùng ssh-copy-id (tiện và nhanh):

ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 22 deploy@203.0.113.10

🔒 Phân quyền đúng là bắt buộc: ~/.ssh = 700, authorized_keys = 600. Sai quyền là SSH sẽ phật ý ngay 😅


Bước 3: Kiểm tra đăng nhập không mật khẩu

Từ máy cá nhân:

ssh -i ~/.ssh/id_ed25519 -p 22 deploy@203.0.113.10

Nếu vào được mà không hỏi mật khẩu → thành công.


Bước 4: Thêm private key vào GitHub Secrets cho CI/CD

Trên máy cá nhân, lấy nội dung private key:

cat ~/.ssh/id_ed25519

Copy toàn bộ output gồm cả dòng -----BEGIN ...-----END ....

Trên GitHub repo:

  1. Vào repo → Settings → Secrets and variables → Actions

  2. New repository secret

  3. Name: SERVER_SSH_PRIVATE_KEY

  4. Paste nội dung private key vào Value → Save

🚨 Không commit private key vào repo. Private key chỉ lưu trong GitHub Secrets.


Gợi ý workflow GitHub Actions

Ví dụ job deploy đơn giản sử dụng secret để thiết lập SSH và chạy lệnh từ xa.

name: Deploy
on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Thiết lập SSH key
        uses: webfactory/ssh-agent@v0.9.0
        with:
          ssh-private-key: $ secrets.SERVER_SSH_PRIVATE_KEY 

      - name: Known hosts
        run: |
          mkdir -p ~/.ssh
          ssh-keyscan -p 22 203.0.113.10 >> ~/.ssh/known_hosts

      - name: Deploy script (ví dụ)
        run: |
          ssh -p 22 deploy@203.0.113.10 "bash -lc 'cd /var/www/app && git pull && npm ci && npm run build && pm2 restart app'"

Tùy stack của bạn mà thay npm ci, pm2, hay php artisan cho phù hợp.


Tăng cường bảo mật (rất nên làm)

  • Tắt đăng nhập bằng mật khẩu, chỉ cho phép key: sửa /etc/ssh/sshd_configPasswordAuthentication no rồi sudo systemctl restart sshd.

  • Tạo user deploy riêng, quyền tối thiểu cần thiết. Hạn chế sudo.

  • Dùng tường lửa (UFW) chỉ mở port SSH và các dịch vụ cần thiết.

  • Cân nhắc đổi port SSH, bật Fail2ban.


Lỗi thường gặp và cách xử lý nhanh

  • Permission denied (publickey): kiểm tra đã thêm đúng .pub vào authorized_keys và quyền file thư mục chuẩn 700/600.

  • Host key verification failed: thiếu known_hosts hoặc IP/port sai → dùng ssh-keyscan để thêm.

  • Secret rỗng trong Actions: kiểm tra tên secret trùng khớp SERVER_SSH_PRIVATE_KEY và repo đúng.


Tổng kết

  • Tạo SSH key → thêm public key vào VPS → test SSH → đưa private key vào GitHub Secrets → dùng trong Actions để deploy tự động.

  • Làm đúng từ đầu là deploy nhàn, đỡ đau tim mỗi lần push code 🚀


Tài liệu tham khảo nên đọc thêm

Bài trước

Setup máy dev trong 30 phút: PHP 8.3, Laravel, Node, Python, Git, SSH (Linux + macOS)

Bài tiếp theo

Setup SSH an toàn cho VPS CentOS: đổi cổng, tắt root, bật SSH key, Fail2Ban

Để lại bình luận của bạn

Email của bạn sẽ không được công khai. Các trường bắt buộc được đánh dấu *

Đăng ký nhận bản tin

Đăng ký bản tin email để nhận những bài viết mới nhất trực tiếp trong hộp thư của bạn.
Cảm hứng mỗi ngày, nói không với spam ✨