SSH (Secure Shell) là giao thức cho phép bạn đăng nhập và gõ lệnh trên một máy tính khác qua mạng, toàn bộ dữ liệu được mã hóa, mặc định dùng port 22. Với SSH, bạn quản lý VPS thuê theo tháng, máy chủ Linux ở công ty hay Raspberry Pi trong nhà ngay từ laptop. Để kết nối, bạn cần 3 thứ: địa chỉ IP hoặc tên miền của máy chủ, một tài khoản trên máy đó và phần mềm SSH client. Windows 10, Windows 11 và macOS đều có sẵn SSH client.
SSH là gì trong Linux? SSH client và SSH server
SSH là gì trong Linux: đó là cách chuẩn để điều khiển máy Linux từ xa bằng dòng lệnh, gồm hai phần chạy ở hai đầu. SSH client trên máy bạn giống chiếc điện thoại (lệnh ssh). SSH server trên máy chủ giống tổng đài luôn trực máy, chờ cuộc gọi ở port 22.
SSH server là gì? Đó là phần mềm chạy trên máy được điều khiển, tên tiến trình là sshd, phổ biến nhất là OpenSSH. VPS Linux thường cài sẵn SSH server, còn Ubuntu desktop trên máy ở nhà thì chưa có, bạn phải tự cài.
SSH ra đời năm 1995. Tatu Ylönen, khi đó ở Đại học Công nghệ Helsinki (Phần Lan), viết bản đầu tiên để thay Telnet và rlogin, hai giao thức gửi cả mật khẩu dạng chữ đọc được. Bản dùng hiện nay là SSH-2, được IETF chuẩn hóa trong bộ RFC 4251 đến RFC 4254, công bố tháng 1/2006. Lệnh telnet giờ chủ yếu để thử một port có trả lời hay không, cách làm có trong bài kiểm tra port đang mở trên máy tính. Đăng nhập máy chủ thì không dùng Telnet nữa.
SSH hoạt động như thế nào?
SSH hoạt động theo 3 bước mỗi lần kết nối: máy chủ chứng minh nó đúng là máy bạn muốn vào, hai bên thỏa thuận khóa mã hóa cho phiên làm việc, rồi bạn đăng nhập bằng mật khẩu hoặc SSH key.
- Máy chủ gửi khóa máy chủ (host key) kèm dấu vân tay (fingerprint) dạng SHA256. Máy bạn so với bản đã lưu từ lần trước.
- Hai bên trao đổi khóa và chọn thuật toán mã hóa cho phiên.
- Bạn chứng minh danh tính: gõ mật khẩu, hoặc để máy tự ký bằng khóa riêng nếu dùng SSH key.
SSH và SSL/TLS cùng dùng mã hóa khóa công khai nhưng là hai giao thức khác nhau. SSH để điều khiển máy và chuyển file, thường ở port 22. TLS bảo vệ trang web HTTPS, thường ở port 443.
Cách kết nối SSH từ Windows, macOS và điện thoại
Cách kết nối SSH giống nhau trên mọi máy: mở cửa sổ dòng lệnh, gõ ssh, tên người dùng, dấu @ và địa chỉ máy chủ. Nếu máy chủ dùng port khác 22, thêm -p và số port:
ssh [email protected]
ssh -p 2222 [email protected]
Trên Windows 10, Windows 11: mở PowerShell hoặc Windows Terminal rồi gõ lệnh trên. Theo Microsoft Learn, OpenSSH chạy trên Windows 10 bản 1809 trở lên và Windows Server 2019 trở lên. Nếu PowerShell báo không nhận ra lệnh ssh, mở Start, gõ "Tính năng tùy chọn" (Optional features), chọn thêm tính năng, tìm OpenSSH Client và bấm cài. PuTTY là phần mềm miễn phí lâu đời, vẫn dùng được nhưng không bắt buộc.
Trên macOS và Linux: mở Terminal, gõ đúng lệnh như trên. Trên điện thoại: Android và iOS đều có app SSH client, bạn nhập địa chỉ, port, tên người dùng và mật khẩu hoặc key.
Lần đầu kết nối tới một máy chủ, màn hình hiện:
The authenticity of host '203.0.113.10 (203.0.113.10)' can't be established.
ED25519 key fingerprint is SHA256:...
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Gõ yes khi fingerprint khớp với thông tin nhà cung cấp VPS hoặc người quản trị gửi. Máy lưu khóa này vào file ~/.ssh/known_hosts và tự so ở các lần sau. Khi gõ mật khẩu, màn hình không hiện ký tự hay dấu sao nào. Đó là bình thường, không phải lỗi bàn phím. Chỉ SSH vào máy của bạn hoặc máy bạn được cấp tài khoản.
Cài SSH server và mở port SSH trên Ubuntu
Muốn mở port SSH trên Ubuntu, bạn cài gói openssh-server, kiểm tra dịch vụ ssh đang chạy, rồi cho phép port 22 qua tường lửa UFW. Các lệnh dưới đây dùng cho Ubuntu Server và Ubuntu desktop, theo tài liệu OpenSSH của Ubuntu Server.
- Cài SSH server:
sudo apt update && sudo apt install openssh-server. - Kiểm tra dịch vụ:
sudo systemctl status ssh. Trên Ubuntu bản mới, dịch vụ có thể báo inactive kèm dòng TriggeredBy: ssh.socket. Khi đó SSH vẫn nhận kết nối, dịch vụ tự chạy lúc có người kết nối đầu tiên. - Mở port 22 Ubuntu trên UFW:
sudo ufw allow OpenSSHhoặcsudo ufw allow 22/tcp. Trên VPS, chạy lệnh cho phép SSH trước khi gõsudo ufw enable. Bật UFW trước thì bạn tự khóa mình ở ngoài, phải vào console của nhà cung cấp để gỡ. - Xem IP LAN của máy Ubuntu:
ip a, tìm dòng inet dạng 192.168.1.x ở card mạng đang dùng.
Đổi port SSH: sửa dòng Port 22 trong file /etc/ssh/sshd_config thành số mới (vd 2222), chạy sudo sshd -t để kiểm tra file không lỗi, mở port mới trên UFW (sudo ufw allow 2222/tcp), rồi mới khởi động lại. Ubuntu 24.04 lấy port từ sshd_config cho ssh.socket, nên lệnh khởi động lại là sudo systemctl daemon-reload rồi sudo systemctl restart ssh.socket. Máy không dùng ssh.socket thì chạy sudo systemctl restart ssh. Giữ phiên SSH đang mở tới khi đăng nhập được ở port mới. Đổi port chỉ bớt bot dò ở port 22, không thay được SSH key.
SSH từ ngoài vào máy ở nhà: cần những gì?
Trong cùng mạng wifi, bạn SSH bằng IP LAN dạng 192.168.1.x là đủ. Từ công ty hay quán cà phê vào máy ở nhà, bạn cần IP public của nhà, một quy tắc mở port trên modem trỏ về máy đó, và mạng nhà không nằm sau CGNAT.
IP public xem ở trang chủ CheckIP. Cách tạo quy tắc mở port trên modem Viettel, VNPT, FPT có từng bước trong bài mở port trên modem. IP public gia đình thường là IP động, có thể đổi sau khi khởi động lại modem.
Mở port xong vẫn không vào được thì so IP WAN trên trang quản lý modem với IP public CheckIP báo. Hai số khác nhau nghĩa là modem chưa nhận IP public riêng, có thể do nhà mạng dùng CGNAT; bài IP public và IP private giải thích cách nhận ra. Khi đó bạn gọi tổng đài để hỏi có cấp IP public riêng được không: Viettel 18008119, VNPT 18001166, FPT 1900 6600.
Muốn chắc port đã mở, dùng công cụ kiểm tra port 22 từ ngoài với IP public của chính bạn, không quét IP của người khác. Cách an toàn hơn là không mở port 22 ra Internet: dựng VPN về mạng nhà, kết nối VPN trước rồi SSH bằng IP LAN.
SSH key là gì? Cách tạo và dùng SSH key
SSH key là gì: đó là một cặp khóa thay cho mật khẩu. Khóa riêng (private key) nằm trên máy bạn như chiếc chìa, khóa công khai (public key) đặt lên server như ổ khóa. Server chỉ mở cửa khi máy bạn ký đúng bằng khóa riêng, nên bot đoán mật khẩu không làm gì được.
- Tạo cặp khóa:
ssh-keygen -t ed25519, chạy được trong PowerShell, Terminal của macOS và Linux. Nhấn Enter để lưu ở chỗ mặc định, rồi đặt passphrase. Máy tạo 2 file:id_ed25519(khóa riêng) vàid_ed25519.pub(khóa công khai). - Đưa khóa công khai lên server. Trên Linux, macOS:
ssh-copy-id [email protected]. Windows không có ssh-copy-id, bạn chạy trong PowerShell:type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys". - Đăng nhập lại để thử. Vào được bằng key rồi mới tắt đăng nhập mật khẩu.
Nhiều nhà cung cấp VPS cho dán public key ngay lúc tạo máy. Trang hướng dẫn ssh-keygen của OpenSSH ghi ed25519 là loại khóa mặc định; nếu hệ thống cũ chỉ nhận RSA, độ dài mặc định là 3072 bit. Không bao giờ gửi file khóa riêng (file không có đuôi .pub) cho ai, kể cả người tự xưng là kỹ thuật hỗ trợ.
Lỗi kết nối SSH thường gặp và cách xử lý
Bảng dưới gom 6 thông báo lỗi kết nối SSH người mới hay gặp. Đọc dòng lỗi cuối cùng rồi tra bảng. Thêm -v vào lệnh (ssh -v [email protected]) để xem chi tiết kết nối dừng ở bước nào.
| Thông báo lỗi | Nghĩa là gì | Cách xử lý |
|---|---|---|
| Connection refused | Gói tin tới được máy chủ, nhưng không có dịch vụ SSH nghe ở port đó | Kiểm tra SSH server đã cài và đang chạy; nếu đã đổi port, thêm -p đúng số port |
| Connection timed out | Gói tin không tới nơi: sai IP, tường lửa chặn, chưa mở port trên modem, hoặc mạng sau CGNAT | Ping thử IP, kiểm tra port từ ngoài, xem lại quy tắc mở port và UFW |
| Permission denied (publickey) | Server chỉ nhận SSH key, key của bạn chưa được thêm hoặc sai tên người dùng | Kiểm tra file authorized_keys trên server và tên user |
| Permission denied, please try again | Sai mật khẩu | Gõ lại, kiểm tra Caps Lock, tắt bộ gõ tiếng Việt như Unikey vì nó có thể đổi ký tự khi gõ |
| REMOTE HOST IDENTIFICATION HAS CHANGED, Host key verification failed | Dấu vân tay máy chủ khác lần trước | Hỏi người quản trị; nếu do cài lại VPS thì xóa khóa cũ bằng ssh-keygen -R 203.0.113.10 |
| ssh: command not found, hoặc 'ssh' is not recognized | Máy chưa có OpenSSH Client | Cài OpenSSH Client theo mục Windows ở trên; Linux cài gói openssh-client |
Lỗi đổi host key cần dừng lại nếu không ai giải thích được lý do, nhất là khi đang dùng wifi công cộng. Đó có thể là dấu hiệu của tấn công man in the middle.
Giữ SSH server an toàn
SSH server an toàn khi chỉ nhận SSH key, không cho root đăng nhập thẳng, chỉ mở port cho IP tin cậy và luôn được cập nhật. Phần lớn thiết lập nằm trong file /etc/ssh/sshd_config; sửa xong chạy sudo sshd -t trước khi khởi động lại dịch vụ.
- Tắt đăng nhập bằng mật khẩu:
PasswordAuthentication no, chỉ làm sau khi đã vào được bằng key. - Không cho root đăng nhập trực tiếp:
PermitRootLogin no, dùng user thường rồi sudo. - Chỉ cho IP tin cậy vào port SSH, trên UFW hoặc tường lửa trong trang quản lý VPS.
- Chặn IP đăng nhập sai nhiều lần bằng công cụ như Fail2Ban. IP lạ lặp lại trong log thì tra nhà mạng và quốc gia của nó trước khi chặn.
- Cập nhật hệ điều hành và OpenSSH thường xuyên bằng
sudo apt update && sudo apt upgrade.
Câu hỏi thường gặp
SFTP là gì, khác SSH thế nào?
SFTP là giao thức truyền file chạy bên trong kết nối SSH, dùng chung tài khoản, chung mã hóa và chung port 22. SSH để gõ lệnh, SFTP để tải file lên và tải về. SFTP khác FTP: FTP ở port 21 và không mã hóa. Bạn dùng SFTP bằng lệnh sftp hoặc phần mềm miễn phí như FileZilla, WinSCP.
SSH có phải là VPN không?
Không. SSH tunnel chỉ chuyển một vài port cho vài ứng dụng qua phiên SSH, ví dụ để vào cơ sở dữ liệu chỉ nghe trên máy chủ. VPN chuyển toàn bộ lưu lượng của thiết bị qua đường hầm mã hóa và cho bạn một địa chỉ trong mạng ở đầu kia.
"Tài khoản SSH" bán trên mạng để fake IP là gì?
Đó là tài khoản đăng nhập vào máy chủ SSH của người khác, được bán để làm đường hầm đổi IP. Bạn không biết ai là chủ máy chủ và ai đọc được lưu lượng đi qua, kể cả dữ liệu gửi qua kết nối không mã hóa. CheckIP không hướng dẫn dùng cách này để vượt chặn.
Port 22 mở có nguy hiểm không?
Port 22 mở ra Internet sẽ bị bot dò mật khẩu gần như liên tục. Bản thân port mở không làm lộ máy nếu bạn dùng SSH key, tắt mật khẩu và giới hạn IP. Bài port là gì có mục riêng về rủi ro khi mở port.
SSH dùng TCP hay UDP?
SSH dùng TCP. Giao thức cần mọi gói tin tới đủ và đúng thứ tự, nên tầng truyền tải của SSH chạy trên TCP theo RFC 4253, và IANA đăng ký ssh ở port 22/tcp. Mở port cho SSH chỉ cần chọn TCP.







