Hướng Dẫn Thiết Lập SSH Hoàn Chỉnh Trên Ubuntu: Cài Đặt, Tăng Cường Bảo Mật, Cấu Hình Nâng Cao và Khắc Phục Sự Cố

目次

1. Giới thiệu

Cấu hình SSH trên Ubuntu là điều cần thiết để quản lý các máy chủ từ xa. SSH (Secure Shell) là một giao thức cung cấp giao tiếp được mã hoá an toàn, cho phép người dùng truy cập máy chủ từ xa, thực thi lệnh và truyền tệp.

Bài viết này giải thích cách cấu hình SSH trên Ubuntu, từ các bước cài đặt cơ bản đến các biện pháp bảo mật nâng cao.

1.1 Tại sao cần cấu hình SSH trên Ubuntu?

1.1.1 SSH là gì?

SSH (Secure Shell) là một giao thức cho phép giao tiếp an toàn qua mạng. Nó thường được sử dụng để đăng nhập vào các máy chủ từ xa, truyền tệp và tạo kênh (port forwarding). Khác với Telnet hoặc FTP truyền thống, SSH mã hoá toàn bộ giao tiếp, cung cấp bảo mật mạnh.

1.1.2 Khi nào cần SSH trên Ubuntu

Các kịch bản phổ biến mà SSH được sử dụng để quản lý Ubuntu từ xa bao gồm:

  • Quản trị máy chủ đám mây : Các máy chủ Linux trên AWS, GCP, Vultr và các nền tảng khác thường được truy cập qua SSH.
  • Hoạt động từ xa trong môi trường LAN : Truy cập các máy chủ nội bộ hoặc máy phát triển từ xa.
  • Quản lý thiết bị IoT : Điều khiển các hệ thống nhúng như Raspberry Pi từ xa.

Mặc định, máy chủ SSH bị tắt trên Ubuntu, vì vậy cần phải cài đặt và cấu hình thủ công để bật truy cập SSH.

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

Để sử dụng SSH trên Ubuntu, bạn phải cài đặt máy chủ SSH (OpenSSH) và cấu hình nó đúng cách. Phần này giải thích cách cài đặt SSH, điều chỉnh các thiết lập cơ bản, cấu hình tường lửa và kết nối tới máy chủ.

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

2.1.1 OpenSSH là gì?

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

2.1.2 Cài đặt OpenSSH

Ubuntu không bao gồm máy chủ SSH theo mặc định, vì vậy hãy cài đặt nó bằng lệnh dưới đây:

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 máy chủ OpenSSH.

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

Sau khi cài đặt, khởi động máy chủ SSH và bật khởi động tự động:

sudo systemctl enable --now ssh

Tùy chọn enable đảm bảo SSH tự động khởi động khi hệ điều hành khởi động.

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

Xác minh rằng SSH đang chạy:

systemctl status ssh

Nếu đầu ra hiển thị active (running), SSH đang 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 nó hiển thị inactive (dead) hoặc failed, hãy khởi động SSH thủ công:

sudo systemctl start ssh

2.2 Cấu hình tường lửa (UFW)

Ubuntu bao gồm một tường lửa đơn giản gọi là ufw (Uncomplicated Firewall). Bạn phải cho phép các kết nối SSH qua nó.

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

sudo ufw status

Ví dụ đầu ra (inactive):

Status: inactive

Ví dụ đầu ra (active):

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

2.2.2 Cho phép SSH

sudo ufw allow ssh

Hoặc một cách rõ ràng:

sudo ufw allow 22/tcp

2.2.3 Bật UFW

sudo ufw enable

2.2.4 Xác minh các quy tắc UFW

sudo ufw status verbose

Ví dụ:

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

2.3 Các phương pháp kết nối SSH cơ bản

Khi SSH đã chạy, kết nối từ máy khách.

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

ssh username@server-ip-address

Ví dụ:

ssh user@192.168.1.100

Bạn có thể thấy cảnh báo bảo mật khi kết nối lần đầu:

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.

2.3.2 Kết nối từ Windows

Bạn có thể sử dụng PowerShell hoặc PuTTY.

Sử dụng PowerShell (Windows 10+ bao gồm SSH):

ssh username@server-ip-address

Sử dụng PuTTY:

  1. Tải PuTTY từ trang web chính thức
  2. Mở PuTTY và nhập IP máy chủ vào Host Name (or IP address)
  3. Chọn SSH làm loại kết nối
  4. Nhấp Open và đăng nhập

Kết luận

Phần này đã bao quát các cơ bản về thiết lập SSH trên Ubuntu:

  • Cách cài đặt và khởi động OpenSSH
  • Cách cho phép kết nối SSH với UFW
  • Cách kết nối từ Linux/macOS và Windows

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

SSH rất mạnh mẽ, nhưng để nó với cài đặt mặc định sẽ tăng rủi ro bảo mật. Kẻ tấn công thường cố gắng đăng nhập brute-force hoặc quét cổng. Tăng cường bảo mật SSH là thiết yếu.

3.1 Vô hiệu hóa Đăng nhập Root

Đăng nhập Root cung cấp quyền kiểm soát hệ thống đầy đủ và là mục tiêu chính của kẻ tấn công. Vô hiệu hóa nó cải thiện bảo mật.

3.1.1 Các Bước

  1. Chỉnh sửa tệp cấu hình SSH:
    sudo nano /etc/ssh/sshd_config
    
  1. Thay đổi dòng thành:
    PermitRootLogin no
    
  1. Khởi động lại SSH:
    sudo systemctl restart ssh
    
  1. Xác nhận thay đổi:
    sudo grep PermitRootLogin /etc/ssh/sshd_config
    

Nếu đầu ra là PermitRootLogin no, cài đặt đã được áp dụng.

3.2 Vô hiệu hóa Xác thực Mật khẩu và Sử dụng Xác thực Khóa

Xác thực khóa công khai an toàn hơn mật khẩu và giảm rủi ro tấn công brute-force.

3.2.1 Tạo Khóa SSH

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

Điều này tạo ra hai tệp:

  • id_rsa (khóa riêng) — giữ cục bộ, không bao giờ chia sẻ
  • id_rsa.pub (khóa công khai) — tải lên máy chủ

3.2.2 Tải lên Khóa Công khai

ssh-copy-id username@server-ip-address

3.2.3 Vô hiệu hóa Xác thực Mật khẩu

sudo nano /etc/ssh/sshd_config

Chỉnh sửa:

PasswordAuthentication no

Khởi động lại SSH:

sudo systemctl restart ssh

3.3 Chỉ Cho Phép Truy cập SSH Chỉ Đối Với Người Dùng Cụ Thể

Để tăng cường bảo mật SSH, bạn có thể hạn chế truy cập để chỉ một số người dùng nhất định được phép đăng nhập.

3.3.1 Các Bước Cấu hình

  1. Mở tệp cấu hình SSH /etc/ssh/sshd_config :
    sudo nano /etc/ssh/sshd_config
    
  1. Thêm người dùng được phép truy cập qua SSH:
    AllowUsers username1 username2
    
  1. Khởi động lại SSH để áp dụng cài đặt:
    sudo systemctl restart ssh
    

3.4 Thay Đổi Cổng SSH

Vì cổng 22 thường bị kẻ tấn công nhắm đến, thay đổi cổng mặc định có thể cải thiện bảo mật.

3.4.1 Các Bước Cấu hình

  1. Mở tệp cấu hình SSH:
    sudo nano /etc/ssh/sshd_config
    
  1. Sửa đổi cài đặt cổng, ví dụ:
    Port 2200
    
  1. Khởi động lại SSH:
    sudo systemctl restart ssh
    

3.4.2 Cập Nhật Cài Đặt Tường Lửa

Nếu bạn thay đổi cổng, cập nhật UFW:

sudo ufw allow 2200/tcp

Kiểm tra quy tắc mới:

sudo ufw status

3.5 Ngăn Chặn Tấn Công Brute-Force Với Fail2Ban

Fail2Ban phát hiện các lần đăng nhập thất bại và chặn IP tấn công trong một khoảng thời gian nhất định.

3.5.1 Cài Đặt Fail2Ban

sudo apt install fail2ban -y

3.5.2 Tạo Tệp Cấu Hình

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

Mở tệp:

sudo nano /etc/fail2ban/jail.local

Sửa đổi cài đặt:

[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 Cấm

sudo fail2ban-client status sshd

Kết luận

Phần này giải thích các phương pháp để tăng cường bảo mật SSH:

  • Vô hiệu hóa đăng nhập root
  • Vô hiệu hóa xác thực mật khẩu và kích hoạt xác thực khóa
  • Hạn chế truy cập SSH cho người dùng cụ thể
  • Thay đổi cổng SSH
  • Sử dụng Fail2Ban để chặn các nỗ lực không được phép

Việc triển khai các thiết lập này giúp tạo ra một môi trường SSH an toàn.

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

Sau khi hoàn thành cấu hình SSH cơ bản và tăng cường bảo mật, bạn có thể chuyển sang các tính năng nâng cao để cải thiện tính linh hoạt và bảo mật. Phần này bao gồm quản lý ssh.socket (Ubuntu 22.10+), đường hầm SSH, lắng nghe trên nhiều cổng, và kiểm soát truy cập dựa trên IP.

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

Trong Ubuntu 22.10+, SSH có thể được quản lý bởi ssh.socket thay vì ssh.service. Kích hoạt dựa trên socket này chỉ khởi động SSH khi cần thiết, tiết kiệm tài nguyên hệ thống.

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

sudo systemctl status ssh.socket

Ví dụ đầu ra (đã kích hoạ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 Kích hoạt hoặc Vô hiệu hóa ssh.socket

Kích hoạt socket:

sudo systemctl enable --now ssh.socket

Chuyển về ssh.service cổ điển:

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

4.2 Đường hầm SSH (Chuyển tiếp Cổng)

Đường hầm SSH thiết lập các kênh giao tiếp an toàn giữa hệ thống cục bộ và từ xa.

4.2.1 Chuyển tiếp Cổng Cục bộ

Hữu ích để kết nối an toàn với cơ sở dữ liệu từ xa hoặc dịch vụ nội bộ.

Ví dụ: Truy cập máy chủ MySQL từ xa trên cổng 3306

ssh -L 3306:localhost:3306 username@server-ip-address

4.2.2 Chuyển tiếp Cổng Ngược

Phơi bày dịch vụ cục bộ qua máy chủ từ xa.

Ví dụ: Xuất bản máy chủ web cục bộ trên cổng 8080 từ xa

ssh -R 8080:localhost:80 username@server-ip-address

4.2.3 Chuyển tiếp Cổng Động (Proxy SOCKS)

Sử dụng SSH như một proxy SOCKS cho duyệt web ẩn danh.

ssh -D 1080 username@server-ip-address

4.3 Lắng nghe trên Nhiều Cổng

SSH có thể lắng nghe trên hơn một cổng để linh hoạt qua các môi trường mạng khác nhau.

4.3.1 Các Bước Cấu hình

  1. Chỉnh sửa /etc/ssh/sshd_config :
    sudo nano /etc/ssh/sshd_config
    
  1. Thêm nhiều dòng Port:
    Port 22
    Port 2200
    
  1. Khởi động lại SSH:
    sudo systemctl restart ssh
    
  1. Cho phép cổng mới với UFW:
    sudo ufw allow 2200/tcp
    

4.4 Chỉ Cho phép SSH từ Các Địa chỉ IP Cụ thể

Hạn chế truy cập SSH theo địa chỉ IP cung cấp kiểm soát bảo mật mạnh mẽ.

4.4.1 Cấu hình /etc/hosts.allow

sudo nano /etc/hosts.allow

Thêm một địa chỉ IP được phép:

sshd: 192.168.1.100

4.4.2 Cấu hình /etc/hosts.deny

sudo nano /etc/hosts.deny

Từ chối tất cả những cái khác:

sshd: ALL

Kết luận

Phần này đã bao gồm các chủ đề cấu hình SSH nâng cao:

  • Quản lý ssh.socket trong Ubuntu 22.10+
  • Sử dụng đường hầm SSH (chuyển tiếp cổng)
  • Lắng nghe trên nhiều cổng SSH
  • Hạn chế truy cập SSH đến các địa chỉ IP cụ thể

Việc áp dụng các cấu hình này nâng cao cả bảo mật và tính khả dụng.

5. Khắc phục Sự cố SSH

Ngay cả với cấu hình đúng, kết nối SSH có thể thỉnh thoảng thất bại. Phần này giải thích các vấn đề SSH phổ biến và giải pháp của chúng.

5.1 Khi SSH Không Thể Kết nối

Nếu SSH trả về Connection refused hoặc hết thời gian chờ, các nguyên nhân có thể bao gồm vấn đề dịch vụ, cấu hình cổng sai, hoặc hạn chế tường lửa.

5.1.1 Dịch vụ SSH Không Đang Chạy

sudo systemctl status ssh

Giải pháp:

  • Nếu inactive hoặc failed , khởi động lại SSH:
    sudo systemctl restart ssh
    
  • Kích hoạt tự động khởi động:
    sudo systemctl enable ssh
    

5.1.2 Cổng SSH Không Mở

ssh -p 2200 username@server-ip-address

Kiểm tra các cổng mở:

sudo netstat -tulnp | grep ssh

Or:

ss -tulnp | grep ssh

5.1.3 Tường lửa (UFW) Chặn SSH

sudo ufw status

Cho phép SSH:

sudo ufw allow 22/tcp

Nếu sử dụng cổng tùy chỉnh:

sudo ufw allow 2200/tcp

5.2 Lỗi Xác thực

5.2.1 Tên người dùng hoặc Mật khẩu Không Đúng

ssh username@server-ip-address

5.2.2 Khóa Công khai Không Được Cài đặt Đúng Cách

cat ~/.ssh/authorized_keys

Xác minh nó khớp với id_rsa.pub cục bộ.

5.2.3 Quyền Truy cập Không Đúng trên Thư mục .ssh

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

Cũng đảm bảo:

chmod 755 /home/username

5.3 Kết nối SSH Không Ổn định hoặc Ngắt kết nối Bất ngờ

5.3.1 Điều chỉnh ClientAliveInterval

ClientAliveInterval 60
ClientAliveCountMax 3
sudo systemctl restart ssh

5.3.2 Điều chỉnh Cài đặt Client Cục bộ

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

5.4 Xem Nhật ký SSH

5.4.1 Xem Nhật ký Thời gian Thực

sudo journalctl -u ssh -f

5.4.2 Xem Nhật ký Quá khứ

sudo cat /var/log/auth.log | grep ssh
sudo grep "Failed password" /var/log/auth.log

Kết luận

Phần này giải thích các vấn đề SSH phổ biến và cách khắc phục chúng:

  • Kiểm tra xem dịch vụ SSH có đang chạy không
  • Xác minh cổng mở
  • Kiểm tra cài đặt tường lửa
  • Đảm bảo xác thực khóa đúng
  • Sửa lỗi hết hạn và ngắt kết nối
  • Phân tích nhật ký SSH

Hầu hết các vấn đề SSH xuất phát từ cấu hình sai hoặc ràng buộc mạng. Sử dụng các bước khắc phục sự cố này để giải quyết vấn đề một cách hiệu quả.

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

Phần này trả lời các câu hỏi phổ biến liên quan đến việc sử dụng và cấu hình SSH.

6.1 Làm thế nào để Khắc phục Vấn đề Hết hạn SSH?

6.1.1 Cài đặt Phía Máy chủ

ClientAliveInterval 60
ClientAliveCountMax 3
sudo systemctl restart ssh

6.1.2 Cài đặt Phía Client

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

6.2 Phải Làm gì Nếu Bạn Quên Mật khẩu SSH?

6.2.1 Nếu Bạn Có Truy cập Vật lý

  1. Khởi động vào chế độ người dùng đơn (chọn recovery mode từ GRUB)
  2. Đặt lại mật khẩu:
    passwd username
    
  1. Khởi động lại hệ thống

6.2.2 Nếu Không Thể Truy cập Vật lý (Cloud VPS)

  • Sử dụng bảng điều khiển VPS được cung cấp bởi dịch vụ lưu trữ
  • Sử dụng xác thực khóa công khai

6.3 Làm thế nào để Sử dụng SSH trên Windows?

6.3.1 Sử dụng PowerShell

ssh username@server-ip-address

6.3.2 Sử dụng PuTTY

  1. Tải xuống & cài đặt PuTTY
  2. Nhập địa chỉ IP máy chủ vào Host Name
  3. Chọn SSH làm loại kết nối
  4. Đăng nhập bằng tên người dùng và mật khẩu

6.4 Làm thế nào để Cấu hình SSH trên Ubuntu WSL?

6.4.1 Cài đặt Máy chủ SSH

sudo apt update && sudo apt install openssh-server

6.4.2 Sửa đổi Cài đặt SSH

PasswordAuthentication yes

Khởi động SSH thủ công (WSL không sử dụng systemd):

sudo service ssh start

6.5 Các Thực hành Bảo mật Tốt nhất Bổ sung

6.5.1 Sử dụng Fail2Ban

sudo apt install fail2ban -y
[sshd]
enabled = true
port = 22
maxretry = 3
findtime = 600
bantime = 3600
sudo systemctl restart fail2ban

6.5.2 Thay đổi Cổng SSH

Port 2200
sudo ufw allow 2200/tcp

6.6 Làm thế nào để Giám sát Nhật ký SSH Thời gian Thực?

sudo journalctl -u ssh -f
sudo cat /var/log/auth.log | grep ssh

6.7 Mẹo để Sử dụng SSH Tiện lợi Hơn

6.7.1 Sử dụng .ssh/config cho Đăng nhập Đơn giản

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

Sau đó kết nối với:

ssh myserver

6.7.2 Sử dụng ssh-agent

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

Kết luận

Phần này tóm tắt các câu hỏi thường gặp liên quan đến SSH:

markdown. Cách khắc phục sự cố timeout SSH * Cách khôi phục mật khẩu bị quên * Cách sử dụng SSH trên Windows và WSL * Các thực hành bảo mật tốt nhất * Cách kiểm tra nhật ký SSH * Mẹo làm cho SSH tiện lợi hơn bằng cách sử dụng .ssh/config*

Bằng cách áp dụng những kỹ thuật này, bạn có thể xây dựng một môi trường SSH an toàn và hiệu quả, đồng thời quản lý các máy chủ từ xa một cách suôn sẻ.

年収訴求