- 1 1. Giới thiệu
- 2 2. Cấu hình SSH cơ bản
- 3 Kết luận
- 4 3. Tăng cường Bảo mật SSH
- 5 Kết luận
- 6 4. Cấu hình SSH Nâng cao
- 7 Kết luận
- 8 5. Khắc phục Sự cố SSH
- 9 Kết luận
- 10 6. Câu hỏi Thường Gặp (FAQ)
- 10.1 6.1 Làm thế nào để Khắc phục Vấn đề Hết hạn SSH?
- 10.2 6.2 Phải Làm gì Nếu Bạn Quên Mật khẩu SSH?
- 10.3 6.3 Làm thế nào để Sử dụng SSH trên Windows?
- 10.4 6.4 Làm thế nào để Cấu hình SSH trên Ubuntu WSL?
- 10.5 6.5 Các Thực hành Bảo mật Tốt nhất Bổ sung
- 10.6 6.6 Làm thế nào để Giám sát Nhật ký SSH Thời gian Thực?
- 10.7 6.7 Mẹo để Sử dụng SSH Tiện lợi Hơn
- 11 Kết luận
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:
- Tải PuTTY từ trang web chính thức
- Mở PuTTY và nhập IP máy chủ vào
Host Name (or IP address) - Chọn
SSHlàm loại kết nối - 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
- Chỉnh sửa tệp cấu hình SSH:
sudo nano /etc/ssh/sshd_config
- Thay đổi dòng thành:
PermitRootLogin no
- Khởi động lại SSH:
sudo systemctl restart ssh
- 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
- Mở tệp cấu hình SSH
/etc/ssh/sshd_config:sudo nano /etc/ssh/sshd_config
- Thêm người dùng được phép truy cập qua SSH:
AllowUsers username1 username2
- 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
- Mở tệp cấu hình SSH:
sudo nano /etc/ssh/sshd_config
- Sửa đổi cài đặt cổng, ví dụ:
Port 2200
- 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
- Chỉnh sửa
/etc/ssh/sshd_config:sudo nano /etc/ssh/sshd_config
- Thêm nhiều dòng
Port:Port 22 Port 2200
- Khởi động lại SSH:
sudo systemctl restart ssh
- 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.sockettrong 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
inactivehoặcfailed, 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ý
- Khởi động vào chế độ người dùng đơn (chọn
recovery modetừ GRUB) - Đặt lại mật khẩu:
passwd username
- 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
- Tải xuống & cài đặt PuTTY
- Nhập địa chỉ IP máy chủ vào
Host Name - Chọn
SSHlàm loại kết nối - Đă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ẻ.



