Back to blog

Mar 07, 2025

Hướng Dẫn Cài Đặt SSH, Git Trên Server Ubuntu Và Quản Lý Người Dùng Hiệu Quả

PH

Phineas

@Phineas

cover

Bài viết này, mình sẽ hướng dẫn về cách cấu hình ssh để đăng nhập vào VPS mà ko cần mật khẩu, ngoài ra mình cũng hướng dẫn cách cài đặt git và cách phân quyền người dùng ở VPS. Cùng bắt đầu nhé! 🚀

Trước tiên, nếu bạn cần tìm 1 VPS ngon bổ rẻ, các bạn có thể tìm VPS của Contabo. Mình thấy vừa rẻ vừa khỏe =))

1. Cài Đặt SSH Trên Ubuntu

Bảo mật cho Virtual Private Server (VPS) là yếu tố quan trọng để ngăn chặn truy cập trái phép vào dữ liệu và ứng dụng của bạn. Sử dụng SSH (Secure Shell) với xác thực bằng Public Key là một trong những phương pháp hiệu quả nhất, giúp bạn đăng nhập VPS mà không cần nhập mật khẩu, an toàn hơn so với cách xác thực truyền thống

Bước 1: Tạo Public và Private key

SSH hoạt động dựa trên cặp khóa: khóa công khai (public key)khóa riêng tư (private key). Bằng cách tạo cặp khóa này trên hệ thống của bạn và gán khóa công khai lên server, bạn có thể đăng nhập mà không cần nhập mật khẩu!

Để tạo cặp khóa SSH, chạy lệnh sau:

bash
ssh-keygen -t rsa -b 4096

Lệnh này sẽ tạo một cặp khóa RSA với độ dài 4096-bit. Bạn sẽ được yêu cầu nhập:

  • Enter file in which to save the key (mặc định là ~/.ssh/id_rsa)
  • Enter passphrase (không bắt buộc, nhưng nên đặt để tăng bảo mật)

Sau khi chạy lệnh, bạn sẽ thấy đầu ra tương tự như sau:

bash
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub

Giờ đây, bạn đã có hai tệp:

  • id_rsa – Khóa riêng tư (private key) của bạn, không được chia sẻ với ai.
  • id_rsa.pub – Khóa công khai (public key), sẽ được thêm vào server để xác thực SSH.

Bước 2: Sao Chép Public key Lên VPS

Sau khi tạo cặp khóa SSH, bạn cần sao chép Public Key lên server. Có hai cách để làm điều này:

Cách 1: Dùng Lệnh ssh-copy-id (Nhanh Và Tự Động)

Chạy lệnh sau trên máy của bạn:

bash
ssh-copy-id user@your_server_ip

Lệnh này sẽ:

  • Kết nối đến VPS bằng giao thức SSH.
  • Thêm khóa công khai vào tệp ~/.ssh/authorized_keys trên VPS.
  • Tạo thư mục .ssh và tệp authorized_keys nếu chúng chưa tồn tại.

Sau khi nhập mật khẩu VPS, bạn sẽ thấy thông báo xác nhận rằng khóa đã được sao chép thành công.

Cách 2: Dùng Lệnh scp (Thủ Công Nhưng Linh Hoạt)

Nếu ssh-copy-id không hoạt động, bạn có thể sử dụng scp để sao chép tệp thủ công:

bash
scp ~/.ssh/id_rsa.pub user@your_server_ip:~/.ssh/uploaded_key.pub

Thay user bằng tên người dùng trên VPS và your_server_ip bằng địa chỉ IP của VPS. Khi chạy lệnh, bạn sẽ được yêu cầu nhập mật khẩu để xác thực.

Sau đó, đăng nhập vào VPS và chạy lệnh sau để thêm nội dung của uploaded_key.pub vào authorized_keys:

bash
cat ~/.ssh/uploaded_key.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Lệnh trên đảm bảo rằng chỉ chủ sở hữu có quyền đọc và ghi vào tệp authorized_keys, tăng cường bảo mật cho SSH.

Bước 3: Chỉnh Sửa Cấu Hình SSH Trên VPS

Sau khi sao chép public key lên VPS, bạn cần chỉnh sửa cấu hình SSH để cho phép xác thực bằng public key. Mở tệp cấu hình SSH bằng vim:

bash
sudo vim /etc/ssh/sshd_config
// ấn i để chỉnh sửa vì mình quen dùng vim hơn nano
// sau khi chỉnh sửa xong, ấn ESC và :wq để lưu thay đổi

Tìm và chỉnh sửa các dòng sau (nếu có # ở đầu, hãy xóa nó):

bash
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Nếu bạn muốn vô hiệu hóa đăng nhập bằng mật khẩu để tăng cường bảo mật, hãy thay đổi:

bash
PasswordAuthentication no

Nếu muốn đổi cổng SSH để tránh tấn công brute-force, hãy chỉnh sửa:

bash
Port 1234  # Chọn một cổng khác thay vì 22 default

Lưu lại thay đổi trong vim bằng cách nhấn Esc, gõ :wq, rồi nhấn Enter.

Sau đó, khởi động lại SSH để áp dụng thay đổi:

bash
sudo service ssh restart

Bước 4: Kiểm Tra Đăng Nhập Không Cần Mật Khẩu

Thử đăng nhập lại bằng SSH:

bash
ssh username@your-server-ip

Nếu không yêu cầu mật khẩu, bạn đã cấu hình thành công!

2. Thiết Lập SSH Key Để Làm Việc Với Git

SSH Key giúp bạn kết nối GitHub/GitLab mà không cần nhập mật khẩu mỗi lần.

Bước 1: Tạo SSH Key ở trên VPS của các bạn

bash
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"

Nhấn Enter để chấp nhận đường dẫn mặc định, sau đó nhập mật khẩu nếu cần.

Bước 2: Thêm SSH Key Vào SSH Agent

bash
eval "$(ssh-agent -s)"
sudo ssh-add ~/.ssh/id_rsa

Bước 3: Sao Chép SSH Key Để Thêm Vào GitHub/GitLab

bash
cat ~/.ssh/id_rsa.pub

Copy nội dung hiển thị và dán vào phần SSH Keys trên GitHub/GitLab.

3. Tạo User Mới, Phân Quyền, Và Quản Lý User Trên Server

Best pratice:

Mỗi thành viên truy cập SSH vào server nên có tài khoản riêng, thay vì dùng chung một account. Public key của mỗi người nên được thêm vào file authorized_keys trong thư mục của chính họ.

🔹 Cấu trúc thư mục:

Mỗi user trên server sẽ có thư mục riêng tại:

📂 /home/<tên-user>

Khi đăng nhập vào user nào, ~/ sẽ đại diện cho thư mục của user đó (/home/<tên-user>).

🔹 Có nên dùng chung tài khoản SSH?

  • Nếu team ít người, có thể linh động dùng chung một tài khoản.
  • Tuy nhiên, tốt nhất vẫn là phân chia tài khoản riêng biệt.

🎯 Lợi ích của việc phân chia tài khoản SSH:

Lịch sử lệnh rõ ràng: Tránh bị lẫn lộn, dễ dàng kiểm tra ai đã thực hiện lệnh nào bằng file lịch sử (~/.bash_history) - (có thể investigate ai gây ra vấn đề gì bằng việc xem file lịch sử lệnh ở từng user)

Dễ quản lý user: Khi một thành viên rời dự án, chỉ cần xóa tài khoản của họ, thay vì phải dò từng public key để gỡ bỏ.

Tóm lại: Dùng tài khoản SSH riêng giúp bảo mật tốt hơn, quản lý dễ dàng hơn và truy vết vấn đề hiệu quả hơn. 🚀

1. Tạo tài khoản riêng cho từng thành viên

Trước tiên, bạn cần SSH vào server với quyền root hoặc một user có quyền sudo.

Tạo user mới

Chạy lệnh sau để tạo user mới (<tên-user> là tên tài khoản bạn muốn tạo):

bash
sudo adduser <tên-user>

Sau đó, hệ thống sẽ yêu cầu nhập password và một số thông tin cá nhân (có thể bỏ qua bằng cách nhấn Enter).

Thêm user vào nhóm sudo (nếu cần)

Nếu bạn muốn cấp quyền sudo cho user này, chạy:

bash
sudo usermod -aG sudo <tên-user>

2. Cấu hình SSH cho user mới

Chuyển sang user mới

bash
su - <tên-user>

Tạo thư mục .ssh và file authorized_keys

bash
mkdir -p ~/.ssh && chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys

Thêm public key vào authorized_keys

Nhờ thành viên gửi public key của họ (id_rsa.pub). Sau đó, thêm vào file:

bash
echo "<public-key-của-user>" >> ~/.ssh/authorized_keys

3. Cấu hình SSH để chặn đăng nhập bằng mật khẩu (khuyến nghị như phía trên đã nói)

Chỉnh sửa file cấu hình SSH:

bash
sudo vi/etc/ssh/sshd_config

Tìm và sửa các dòng sau:

bash
PasswordAuthentication no
PermitRootLogin no

Lưu lại (Ctrl + X → Y → Enter) và restart SSH:

bash
sudo systemctl restart ssh

4. Kiểm tra kết nối SSH

Từ máy client, thử kết nối:

bash
ssh <tên-user>@<địa-chỉ-IP-server>

Nếu kết nối thành công, tức là user đã được thiết lập đúng cách.

5. Quản lý user

Xem danh sách user

bash
cut -d: -f1 /etc/passwd

Ngoài ra, các bạn nên note lại đâu đó cho tiện quản lý, ví dụ mình đang sài notion để note chẳng hạn

Xóa user khi rời team

Nếu một thành viên rời team, hãy xóa tài khoản của họ:

bash
sudo deluser --remove-home <tên-user>

4. Thiết Lập Firewall Để Giới Hạn IP Truy Cập SSH

Firewall giúp chặn truy cập SSH từ các IP không mong muốn, bảo vệ server khỏi các cuộc tấn công.

4.1. Kiểm Tra Trạng Thái Firewall (UFW)

bash
sudo ufw status

Nếu firewall chưa bật, kích hoạt bằng:

bash
sudo ufw enable

4.2. Chỉ Cho Phép SSH Từ Một IP Cụ Thể

Nếu bạn muốn chỉ cho phép IP 123.456.789.000 truy cập SSH:

bash
sudo ufw allow from 123.456.789.000 to any port 22

Hoặc nếu bạn đã đổi cổng SSH (ví dụ 1234):

bash
sudo ufw allow from 123.456.789.000 to any port 1234

4.3. Chặn Toàn Bộ Các Kết Nối SSH Khác

Sau khi chỉ định IP được phép, chặn tất cả truy cập SSH từ IP khác:

bash
sudo ufw deny 22

Nếu đã đổi port SSH:

bash
sudo ufw deny 1234

4.4. Kiểm Tra Các Quy Tắc Đã Thiết Lập

bash
sudo ufw status numbered

Nếu cần xóa một rule, chạy:

bash
sudo ufw delete [số thứ tự rule]

4.5. Restart Firewall

Sau khi thiết lập, restart firewall để áp dụng thay đổi:

bash
sudo systemctl restart ufw

OK. Bài viết cũng khá dài, hy vọng mọi người thích nội dung này. Cảm ơn mọi người đã đọc đến đây