- 1 1. Giới thiệu
- 2 2. Cấu hình cơ bản SSH
- 3 Tổng kết
- 4 3. Tăng cường bảo mật cho SSH
- 5 Tổng kết
- 6 4. Cấu hình nâng cao cho SSH
- 7 Tổng kết
- 8 5. Xử lý sự cố SSH (Troubleshooting)
- 9 Tổng kết
- 10 6. Câu hỏi thường gặp (FAQ)
- 10.1 6.1 Làm gì khi SSH thường xuyên bị timeout?
- 10.2 6.2 Quên mật khẩu, không thể SSH?
- 10.3 6.3 Làm sao dùng SSH trên Windows?
- 10.4 6.4 Thiết lập SSH server trên Ubuntu WSL (Windows Subsystem for Linux)?
- 10.5 6.5 Sau khi thiết lập SSH nên làm thêm gì để bảo mật?
- 10.6 6.6 Làm sao xem log SSH thời gian thực trên Ubuntu?
- 10.7 6.7 Mẹo sử dụng SSH hiệu quả?
- 11 Tổng kết
- 12 Bài viết liên quan
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
- Tải và cài đặt PuTTY từ trang chủ
- Mở PuTTY, nhập địa chỉ IP máy chủ vào
Host Name (or IP address)
- Chọn
Connection type
làSSH
, nhấnOpen
- 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
- Chỉnh sửa file cấu hình SSH:
/etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
- Tìm dòng
PermitRootLogin
và chuyển thànhPermitRootLogin no
PermitRootLogin no
- Lưu file và khởi động lại dịch vụ SSH
sudo systemctl restart ssh
- 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
- Mở file
/etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
- Thêm dòng:
AllowUsers user1 user2
- 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
- Mở file cấu hình SSH
sudo nano /etc/ssh/sshd_config
- Tìm dòng
Port 22
và sửa thành ví dụPort 2200
Port 2200
- 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
- Mở file cấu hình
/etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
- Thêm nhiều dòng
Port
(ví dụ):
Port 22
Port 2200
- Khởi động lại SSH
sudo systemctl restart ssh
- 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ặcfailed
, 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
- Khởi động server ở chế độ single user (chọn
recovery mode
từ GRUB) - Đổi mật khẩu bằng lệnh:
passwd tên_người_dùng
- 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
- Tải PuTTY và cài đặt
- Nhập địa chỉ IP máy chủ vào
Host Name (or IP address)
- Chọn
Connection type
làSSH
, nhấnOpen
- Đă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
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[…]