Cách Cấu Hình và Bảo Mật SSH Trên Ubuntu: Hướng Dẫn Chi Tiết Từ A-Z Cho Quản Trị Viên

目次

1. Giới thiệu

Việc cấu hình SSH trên Ubuntu là vô cùng quan trọng để quản lý máy chủ từ xa. SSH (Secure Shell) là một giao thức cung cấp truyền thông mã hóa an toàn, được sử dụng rộng rãi để truy cập máy chủ từ xa, thực thi lệnh, hoặc truyền tập tin.

Trong bài viết này, chúng tôi sẽ hướng dẫn chi tiết cách cấu hình SSH trên Ubuntu, từ các bước cài đặt cơ bản cho đến các biện pháp bảo mật nâng cao.

1.1 Lý do cấu hình SSH trên Ubuntu

1.1.1 SSH là gì?

SSH (Secure Shell) là một giao thức giúp truyền thông an toàn qua mạng. Thông thường, SSH được sử dụng để đăng nhập máy chủ từ xa, truyền tập tin, và chuyển tiếp cổng (port forwarding). Khác với Telnet hay FTP truyền thống, SSH mã hóa toàn bộ dữ liệu, đảm bảo tính bảo mật cao.

1.1.2 Trường hợp cần sử dụng SSH trên Ubuntu

Các tình huống quản lý Ubuntu từ xa phổ biến như sau:

  • Quản lý máy chủ đám mây: Với AWS, GCP, Vultr và các dịch vụ đám mây, SSH thường dùng để truy cập và điều khiển máy chủ từ xa.
  • Điều khiển từ xa qua mạng LAN: Truy cập máy chủ nội bộ hoặc máy trạm phát triển qua SSH để thực hiện công việc từ xa.
  • Quản lý thiết bị IoT: Điều khiển các thiết bị nhúng như Raspberry Pi từ xa thông qua SSH.

Mặc định trên Ubuntu, SSH server chưa được bật. Do đó, bạn cần cài đặt và cấu hình thủ công để sử dụng SSH.

2. Cấu hình cơ bản SSH

Để sử dụng SSH trên Ubuntu, cần cài đặt SSH server (OpenSSH) và cấu hình phù hợp. Phần này sẽ hướng dẫn cách cài đặt, cấu hình cơ bản, thiết lập firewall, và cách kết nối SSH.

2.1 Cài đặt và khởi động OpenSSH

2.1.1 OpenSSH là gì?

OpenSSH (Open Secure Shell) là phần mềm mã nguồn mở triển khai giao thức SSH. Nó hỗ trợ kết nối từ xa an toàn, truyền file (SCP/SFTP), và chuyển tiếp cổng.

2.1.2 Cài đặt OpenSSH

Trên Ubuntu, SSH server không được cài sẵn, hãy cài bằng lệnh sau:

sudo apt update && sudo apt install -y openssh-server

Lệnh này sẽ cập nhật danh sách gói và cài đặt OpenSSH server mới nhất.

2.1.3 Khởi động và bật tự động SSH server

Sau khi cài đặt, hãy khởi động và cho phép SSH chạy cùng hệ thống:

sudo systemctl enable --now ssh

Tùy chọn enable sẽ kích hoạt SSH mỗi khi khởi động máy.

2.1.4 Kiểm tra trạng thái hoạt động của SSH

Để kiểm tra SSH server đã chạy hay chưa, dùng lệnh:

systemctl status ssh

Nếu thấy kết quả như dưới đây, SSH server đã hoạt động bình thường:

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2025-02-28 12:00:00 UTC; 5min ago

Nếu trạng thái là inactive (dead) hoặc failed, khởi động lại bằng:

sudo systemctl start ssh

2.2 Thiết lập tường lửa (UFW)

Trên Ubuntu, có thể dùng ufw (Uncomplicated Firewall) để cấu hình firewall một cách dễ dàng. Hãy mở cổng cho SSH:

2.2.1 Kiểm tra trạng thái UFW

Kiểm tra trạng thái firewall hiện tại:

sudo ufw status

Ví dụ (UFW chưa bật)

Status: inactive

Ví dụ (UFW đã bật)

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere

2.2.2 Mở cổng cho SSH

Để cho phép truy cập SSH qua cổng mặc định 22, chạy:

sudo ufw allow ssh

Hoặc chỉ định cổng rõ ràng:

sudo ufw allow 22/tcp

2.2.3 Bật UFW

Nếu UFW chưa bật, dùng lệnh sau để kích hoạt:

sudo ufw enable

Hãy chắc chắn rằng đã mở cổng SSH trước khi bật UFW để tránh bị khóa ngoài.

2.2.4 Kiểm tra lại thiết lập

Kiểm tra chi tiết trạng thái firewall:

sudo ufw status verbose

Ví dụ kết quả

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)

Nếu thấy như trên, SSH đã được cho phép.

2.3 Cách kết nối cơ bản qua SSH

Sau khi SSH server đã chạy, hãy thử kết nối từ máy tính client.

2.3.1 Kết nối từ Linux/macOS

Trên Linux/macOS, mở Terminal và dùng lệnh:

ssh tên_người_dùng@địa_chỉ_IP_máy_chủ

Ví dụ:

ssh user@192.168.1.100

Lần đầu kết nối có thể thấy cảnh báo:

The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?

Nhập yes để tiếp tục kết nối.

2.3.2 Kết nối từ Windows

Trên Windows, bạn có thể dùng PowerShell hoặc PuTTY.

Sử dụng PowerShell
Từ Windows 10 trở đi, PowerShell đã có sẵn SSH client. Chạy lệnh:

ssh tên_người_dùng@địa_chỉ_IP_máy_chủ

Sử dụng PuTTY

  1. Tải và cài đặt PuTTY từ trang chủ
  2. Mở PuTTY, nhập địa chỉ IP máy chủ vào Host Name (or IP address)
  3. Chọn Connection typeSSH, nhấn Open
  4. Nhập tên người dùng và mật khẩu

Tổng kết

Ở phần này, bạn đã nắm được các bước cơ bản để cấu hình SSH trên Ubuntu:

  • Cài đặt và khởi động OpenSSH
  • Cấu hình UFW để cho phép kết nối SSH
  • Cách kết nối SSH từ Linux/macOS và Windows

3. Tăng cường bảo mật cho SSH

SSH là công cụ mạnh mẽ cho kết nối từ xa, nhưng nếu cấu hình mặc định, hệ thống sẽ dễ bị tấn công. Hacker thường sử dụng brute-force hoặc quét cổng để nhắm vào SSH. Do đó, cần thực hiện các biện pháp bảo mật sau.

3.1 Cấm đăng nhập bằng tài khoản root

Mặc định, Ubuntu có thể cho phép đăng nhập bằng root, điều này rất nguy hiểm vì root có toàn quyền hệ thống. Nên vô hiệu hóa đăng nhập root và chỉ sử dụng user thông thường để tăng bảo mật.

3.1.1 Các bước thực hiện

  1. Chỉnh sửa file cấu hình SSH: /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
  1. Tìm dòng PermitRootLogin và chuyển thành PermitRootLogin no
PermitRootLogin no
  1. Lưu file và khởi động lại dịch vụ SSH
sudo systemctl restart ssh
  1. Kiểm tra lại thiết lập đã áp dụng hay chưa
sudo grep PermitRootLogin /etc/ssh/sshd_config

Nếu trả về PermitRootLogin no là OK.

3.2 Vô hiệu hóa đăng nhập mật khẩu, bật xác thực khóa công khai

Nên dùng xác thực bằng SSH key thay vì mật khẩu để tránh bị tấn công brute-force. Hệ thống sẽ sử dụng cặp khóa riêng–khóa công khai, không cần nhập mật khẩu khi đăng nhập.

3.2.1 Tạo khóa SSH

Tạo SSH key trên máy tính cá nhân:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa

Sau khi hoàn thành sẽ có 2 file:

  • Khóa riêng (id_rsa) – Chỉ lưu trên máy cá nhân, KHÔNG chia sẻ!
  • Khóa công khai (id_rsa.pub) – Đăng ký lên server Ubuntu

3.2.2 Chuyển khóa công khai lên server

ssh-copy-id tên_người_dùng@địa_chỉ_IP_máy_chủ

3.2.3 Tắt xác thực mật khẩu

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

sudo nano /etc/ssh/sshd_config

Tìm và sửa thành:

PasswordAuthentication no

Sau đó khởi động lại SSH:

sudo systemctl restart ssh

3.3 Chỉ cho phép user cụ thể truy cập SSH

Có thể giới hạn chỉ một số tài khoản nhất định được phép SSH vào server.

3.3.1 Cách thiết lập

  1. Mở file /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
  1. Thêm dòng:
AllowUsers user1 user2
  1. Khởi động lại SSH
sudo systemctl restart ssh

3.4 Đổi cổng SSH

Cổng mặc định 22 rất dễ bị scan, nên đổi sang cổng khác để giảm nguy cơ bị tấn công tự động.

3.4.1 Các bước đổi cổng

  1. Mở file cấu hình SSH
sudo nano /etc/ssh/sshd_config
  1. Tìm dòng Port 22 và sửa thành ví dụ Port 2200
Port 2200
  1. Khởi động lại SSH
sudo systemctl restart ssh

3.4.2 Cập nhật firewall cho cổng mới

sudo ufw allow 2200/tcp

Kiểm tra trạng thái firewall:

sudo ufw status

3.5 Dùng Fail2Ban để chặn tấn công brute-force

Fail2Ban giúp phát hiện nhiều lần đăng nhập thất bại và tự động block IP đó tạm thời.

3.5.1 Cài đặt Fail2Ban

sudo apt install fail2ban -y

3.5.2 Tạo file cấu hình

Copy file cấu hình mặc định:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Sau đó mở và chỉnh sửa:

sudo nano /etc/fail2ban/jail.local

Thay đổi các dòng:

[sshd]
enabled = true
port = 2200
maxretry = 3
findtime = 600
bantime = 3600

3.5.3 Khởi động lại Fail2Ban

sudo systemctl restart fail2ban

3.5.4 Kiểm tra danh sách IP bị block

sudo fail2ban-client status sshd

Tổng kết

Trong phần này, bạn đã biết cách nâng cao bảo mật SSH:

  • Cấm đăng nhập root
  • Tắt xác thực mật khẩu, bật xác thực SSH key
  • Chỉ cho phép user được chỉ định
  • Đổi cổng SSH
  • Dùng Fail2Ban để chặn IP tấn công

Áp dụng các biện pháp này sẽ giúp môi trường SSH trên Ubuntu an toàn hơn.

4. Cấu hình nâng cao cho SSH

Sau khi đã hoàn tất cấu hình cơ bản và tăng cường bảo mật, bạn có thể áp dụng các thiết lập nâng cao để tận dụng tối đa SSH trên Ubuntu. Phần này sẽ hướng dẫn về quản lý ssh.socket (Ubuntu 22.10 trở lên), SSH Tunnel (port forwarding), lắng nghe nhiều cổng cùng lúc, giới hạn truy cập theo IP, v.v.

4.1 Sử dụng ssh.socket trên Ubuntu 22.10 trở lên

Từ Ubuntu 22.10, SSH có thể được quản lý qua ssh.socket thay vì ssh.service. Khi này, SSH sẽ chỉ khởi động khi có yêu cầu kết nối, giúp tiết kiệm tài nguyên.

4.1.1 Kiểm tra trạng thái ssh.socket

sudo systemctl status ssh.socket

Ví dụ (socket đang bật):

● ssh.socket - OpenSSH Server Socket
   Loaded: loaded (/lib/systemd/system/ssh.socket; enabled; vendor preset: enabled)
   Active: active (listening) since Fri 2025-02-28 12:00:00 UTC

4.1.2 Bật hoặc tắt ssh.socket

Để bật:

sudo systemctl enable --now ssh.socket

Nếu muốn quay về kiểu truyền thống, tắt socket và bật service:

sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service

4.2 SSH Tunnel (Port Forwarding)

SSH Tunnel giúp truyền dữ liệu an toàn giữa máy tính và server qua kênh mã hóa. Có 3 dạng port forwarding phổ biến:

4.2.1 Port forwarding cục bộ (Local forwarding)

Dùng để truy cập các dịch vụ nội bộ từ xa một cách an toàn.
Ví dụ: Kết nối MySQL server (cổng 3306) từ xa

ssh -L 3306:localhost:3306 tên_người_dùng@địa_chỉ_IP_máy_chủ

4.2.2 Port forwarding ngược (Reverse forwarding)

Dùng để truy cập dịch vụ nội bộ từ bên ngoài qua SSH.
Ví dụ: Xuất bản Web server nội bộ (cổng 80) ra cổng 8080 của server từ xa

ssh -R 8080:localhost:80 tên_người_dùng@địa_chỉ_IP_máy_chủ

4.2.3 Port forwarding động (Dynamic forwarding)

Thiết lập SOCKS proxy để duyệt web ẩn danh hoặc vượt tường lửa.

ssh -D 1080 tên_người_dùng@địa_chỉ_IP_máy_chủ

4.3 Lắng nghe SSH trên nhiều cổng

Mặc định SSH chỉ lắng nghe cổng 22, nhưng bạn có thể mở thêm cổng khác cho các mục đích đặc biệt.

4.3.1 Các bước thiết lập

  1. Mở file cấu hình /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
  1. Thêm nhiều dòng Port (ví dụ):
Port 22
Port 2200
  1. Khởi động lại SSH
sudo systemctl restart ssh
  1. Mở cổng mới trên UFW
sudo ufw allow 2200/tcp

4.4 Giới hạn SSH chỉ cho IP nhất định

Tăng bảo mật bằng cách chỉ cho phép truy cập SSH từ IP cụ thể.

4.4.1 Chỉnh /etc/hosts.allow

sudo nano /etc/hosts.allow

Thêm dòng (thay 192.168.1.100 bằng IP của bạn):

sshd: 192.168.1.100

4.4.2 Chỉnh /etc/hosts.deny

Chặn tất cả các IP còn lại:

sudo nano /etc/hosts.deny
sshd: ALL

Chỉ IP đã liệt kê trong hosts.allow mới được truy cập SSH.

Tổng kết

Phần này bạn đã học cách cấu hình nâng cao SSH trên Ubuntu:

  • Quản lý ssh.socket trên Ubuntu mới
  • Sử dụng SSH Tunnel để truyền dữ liệu an toàn
  • Lắng nghe nhiều cổng SSH
  • Giới hạn truy cập theo IP

Các thiết lập này sẽ giúp tăng cường bảo mật và sự linh hoạt khi vận hành server.

5. Xử lý sự cố SSH (Troubleshooting)

Ngay cả khi đã cấu hình đúng, đôi khi bạn vẫn gặp sự cố không thể kết nối SSH. Phần này sẽ hướng dẫn cách nhận diện và xử lý các lỗi thường gặp nhất.

5.1 Không thể kết nối SSH

Nếu gặp lỗi Connection refused hoặc timeout, hãy kiểm tra các nguyên nhân dưới đây.

5.1.1 Dịch vụ SSH chưa chạy

Kiểm tra trạng thái SSH:

sudo systemctl status ssh

Cách khắc phục:

  • Nếu là inactive (dead) hoặc failed, khởi động lại dịch vụ:
sudo systemctl restart ssh
  • Bật chế độ khởi động cùng hệ thống:
sudo systemctl enable ssh

5.1.2 Cổng chưa mở hoặc cổng bị đổi

Nếu đã đổi cổng, cần chỉ định cổng khi kết nối:

ssh -p 2200 tên_người_dùng@địa_chỉ_IP_máy_chủ

Kiểm tra cổng SSH đang mở:

sudo netstat -tulnp | grep ssh

Hoặc:

ss -tulnp | grep ssh

5.1.3 Kiểm tra firewall (UFW)

sudo ufw status

Nếu SSH chưa được mở, chạy:

sudo ufw allow 22/tcp

Nếu dùng cổng khác:

sudo ufw allow 2200/tcp

5.2 Lỗi xác thực (Authentication)

5.2.1 Sai tên đăng nhập hoặc mật khẩu

Kiểm tra lại tên user khi đăng nhập:

ssh tên_người_dùng@địa_chỉ_IP_máy_chủ

5.2.2 Khóa công khai chưa đúng

Kiểm tra file ~/.ssh/authorized_keys trên server:

cat ~/.ssh/authorized_keys

So khớp nội dung với ~/.ssh/id_rsa.pub trên máy cá nhân.

5.2.3 Sai quyền thư mục .ssh

Quyền file và thư mục SSH phải chặt chẽ:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Và thư mục home của user:

chmod 755 /home/tên_người_dùng

5.3 Kết nối SSH chập chờn, tự động ngắt

Nguyên nhân thường do cấu hình timeout.

5.3.1 Chỉnh ClientAliveInterval trên server

Thêm/đổi trong /etc/ssh/sshd_config:

ClientAliveInterval 60
ClientAliveCountMax 3

Khởi động lại SSH:

sudo systemctl restart ssh

5.3.2 Chỉnh trên client

Thêm vào ~/.ssh/config:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

5.4 Kiểm tra log SSH

5.4.1 Xem log thời gian thực

sudo journalctl -u ssh -f

5.4.2 Xem log lịch sử

sudo cat /var/log/auth.log | grep ssh

Tìm lỗi xác thực:

sudo grep "Failed password" /var/log/auth.log

Tổng kết

Phần này bạn đã biết cách xử lý các lỗi SSH thường gặp:

  • Kiểm tra dịch vụ SSH đang chạy
  • Kiểm tra cổng và firewall
  • Kiểm tra xác thực, SSH key và quyền file
  • Khắc phục lỗi timeout, log lỗi

Hãy sử dụng các hướng dẫn này để nhanh chóng xử lý sự cố SSH khi vận hành server Ubuntu!

6. Câu hỏi thường gặp (FAQ)

Tổng hợp những câu hỏi và giải đáp phổ biến nhất liên quan đến cấu hình và sử dụng SSH trên Ubuntu. Giúp bạn sử dụng SSH tiện lợi và an toàn hơn.

6.1 Làm gì khi SSH thường xuyên bị timeout?

Nếu SSH tự động ngắt sau một thời gian, hãy thử điều chỉnh các thiết lập sau.

6.1.1 Thiết lập trên server

Mở /etc/ssh/sshd_config và thêm:

ClientAliveInterval 60
ClientAliveCountMax 3

Khởi động lại SSH:

sudo systemctl restart ssh

6.1.2 Thiết lập trên máy client

Thêm vào ~/.ssh/config:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

6.2 Quên mật khẩu, không thể SSH?

6.2.1 Nếu có thể truy cập vật lý server

  1. Khởi động server ở chế độ single user (chọn recovery mode từ GRUB)
  2. Đổi mật khẩu bằng lệnh:
passwd tên_người_dùng
  1. Khởi động lại máy

6.2.2 Nếu không thể truy cập vật lý (VPS, cloud)

  • Sử dụng tính năng console của nhà cung cấp VPS để truy cập
  • Sử dụng xác thực bằng SSH key thay cho mật khẩu

6.3 Làm sao dùng SSH trên Windows?

6.3.1 Sử dụng PowerShell

Từ Windows 10 trở đi, PowerShell đã có SSH client. Kết nối bằng:

ssh tên_người_dùng@địa_chỉ_IP_máy_chủ

6.3.2 Sử dụng PuTTY

  1. Tải PuTTY và cài đặt
  2. Nhập địa chỉ IP máy chủ vào Host Name (or IP address)
  3. Chọn Connection typeSSH, nhấn Open
  4. Đăng nhập với tên người dùng và mật khẩu

6.4 Thiết lập SSH server trên Ubuntu WSL (Windows Subsystem for Linux)?

Thực hiện các bước sau trên Ubuntu WSL:

6.4.1 Cài đặt SSH server

sudo apt update && sudo apt install openssh-server

6.4.2 Chỉnh cấu hình

Trong /etc/ssh/sshd_config bật dòng:

PasswordAuthentication yes

Khởi động SSH (WSL không dùng systemd mặc định):

sudo service ssh start

6.5 Sau khi thiết lập SSH nên làm thêm gì để bảo mật?

6.5.1 Cài Fail2Ban

sudo apt install fail2ban -y

Chỉnh /etc/fail2ban/jail.local để bảo vệ SSH:

[sshd]
enabled = true
port = 22
maxretry = 3
findtime = 600
bantime = 3600

Khởi động lại Fail2Ban:

sudo systemctl restart fail2ban

6.5.2 Đổi cổng SSH

Sửa /etc/ssh/sshd_config:

Port 2200

Mở cổng mới với UFW:

sudo ufw allow 2200/tcp

6.6 Làm sao xem log SSH thời gian thực trên Ubuntu?

Theo dõi log SSH trực tiếp:

sudo journalctl -u ssh -f

Xem log cũ:

sudo cat /var/log/auth.log | grep ssh

6.7 Mẹo sử dụng SSH hiệu quả?

6.7.1 Đơn giản hóa đăng nhập với .ssh/config

Lưu cấu hình vào ~/.ssh/config:

Host myserver
    HostName 192.168.1.100
    User user
    Port 2200
    IdentityFile ~/.ssh/id_rsa

Sau đó chỉ cần:

ssh myserver

6.7.2 Dùng ssh-agent để quản lý khóa

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

Tổng kết

Phần này tổng hợp các câu hỏi thường gặp về SSH trên Ubuntu:

  • Xử lý lỗi timeout
  • Khôi phục khi quên mật khẩu
  • Cách dùng SSH trên Windows và WSL
  • Các biện pháp bảo mật bổ sung
  • Cách kiểm tra log
  • Mẹo sử dụng SSH hiệu quả hơn

Hy vọng các hướng dẫn này sẽ giúp bạn xây dựng và quản lý hệ thống SSH trên Ubuntu một cách an toàn, hiệu quả!

Bài viết liên quan

Bài

1. Giới thiệu Bằng cách sử dụng SSH trên Ubuntu, bạn có thể truy cập và vận hành máy chủ hoặc PC từ xa một cách an toàn[…]

年収訴求