SSH (Secure Shell) là giao thức mạng cho phép đăng nhập và điều khiển máy chủ từ xa qua một kết nối được mã hoá. Với SSH, bạn gõ lệnh trên máy tính của mình và lệnh chạy trên máy chủ ở xa, như đang ngồi trước máy đó. Mật khẩu, lệnh và kết quả đều được mã hoá, nên người nghe lén trên đường truyền không đọc được.
Theo RFC 4251, SSH là “giao thức để đăng nhập từ xa an toàn và các dịch vụ mạng an toàn khác”. SSH ra đời để thay thế Telnet và rlogin, vốn gửi cả mật khẩu dưới dạng văn bản thường. Ngày nay, SSH là cách tiêu chuẩn để quản trị VPS và máy chủ Linux, chuyển file an toàn (SFTP, SCP) và đẩy mã nguồn lên Git.
- Cổng mặc định: TCP 22 (có thể đổi trong cấu hình máy chủ).
- Phần mềm phổ biến: OpenSSH (có sẵn trên Linux, macOS; Windows 10/11 có OpenSSH Client), PuTTY, Termius.
- Cách đăng nhập: mật khẩu hoặc SSH key; nên dùng SSH key loại ed25519.
SSH hoạt động như thế nào?
SSH hoạt động theo mô hình client – server. Máy chủ chạy dịch vụ sshd lắng nghe ở cổng 22; máy của bạn chạy chương trình client ssh. Một phiên SSH đi qua bốn bước: mở kết nối TCP, xác minh máy chủ bằng host key, trao đổi khoá để mã hoá phiên, và cuối cùng xác thực người dùng bằng key hoặc mật khẩu.

Khi kết nối không thành, thông báo của ssh cho biết phiên dừng ở bước nào:
- Không tới được máy chủ:
Connection timed outthường do sai IP hoặc tường lửa chặn;Connection refusednghĩa là máy chủ trả lời nhưng không có dịch vụ SSH ở cổng đó (sshd chưa chạy hoặc đã đổi cổng). - Hỏi vân tay lần đầu: dòng
The authenticity of host ... can't be establishedlà bình thường ở lần đầu. Trước khi gõyes, so vân tay với thông tin nhà cung cấp hoặc chạyssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pubqua console của máy chủ. - Không chọn được thuật toán chung:
no matching key exchange method foundhoặcno matching host key type foundhay gặp khi một bên là OpenSSH đời cũ, ví dụ thiết bị mạng. Nên nâng cấp phía cũ; nếu buộc phải bật thuật toán cũ, chỉ bật cho đúng máy đó trong~/.ssh/config. - Bị từ chối đăng nhập:
Permission denied (publickey)nghĩa là máy chủ không nhận key bạn gửi hoặc đã tắt đăng nhập bằng mật khẩu. Kiểm tra đúng user, đúng file key (-i), quyền thư mục~/.sshlà 700 và fileauthorized_keyslà 600 trên máy chủ.
Sau khi đăng nhập, SFTP, SCP và chuyển tiếp cổng ở các phần dưới đều chạy trong cùng kết nối đã mã hoá, dùng lại cách xác thực bạn vừa qua.
3 kỹ thuật mã hoá SSH sử dụng
SSH kết hợp ba kỹ thuật mật mã, mỗi kỹ thuật làm một việc. Mã hoá đối xứng bảo vệ toàn bộ dữ liệu của phiên; mật mã bất đối xứng dùng để trao đổi khoá và xác thực; hàm băm (qua HMAC hoặc chế độ mã hoá có xác thực) bảo đảm dữ liệu không bị sửa trên đường truyền.
Kỹ thuật Dùng để Ví dụ thuật toán Mã hoá đối xứng (symmetric) Mã hoá mọi dữ liệu trong phiên bằng một khoá phiên chung, tạo ra ở bước trao đổi khoá. Nhanh, phù hợp mã hoá lượng dữ liệu lớn. AES, ChaCha20 Mật mã bất đối xứng (asymmetric) Trao đổi khoá phiên, xác minh host key của máy chủ và xác thực người dùng bằng SSH key. Dùng cặp public key / private key; private key không bao giờ rời máy chủ sở hữu. Ed25519, ECDSA, RSA; trao đổi khoá Curve25519 Hàm băm, HMAC Gắn mã xác thực cho từng gói tin để phát hiện gói tin bị sửa hoặc phát lại. Hàm băm là một chiều, không giải ngược được. HMAC-SHA2; hoặc chế độ có xác thực như AES-GCM, ChaCha20-Poly1305
Bài cũ có một chỗ dễ hiểu nhầm cần sửa: SSH không dùng mật mã bất đối xứng để mã hoá toàn bộ phiên, mà chỉ dùng ở bước trao đổi khoá và xác thực. Phần còn lại của phiên dùng mã hoá đối xứng vì nhanh hơn. Xem thêm khái niệm cơ bản tại mã hoá là gì.
Xác thực SSH bằng mật khẩu hay SSH key?
Nên dùng SSH key. Mật khẩu vẫn được mã hoá khi gửi, nhưng có thể bị dò nếu yếu hoặc dùng lại, vì máy chủ mở cổng 22 thường xuyên bị quét tự động. SSH key dùng cặp khoá: public key đặt trên máy chủ, private key giữ trên máy bạn và không bao giờ gửi qua mạng.
Theo tài liệu ssh-keygen, OpenSSH hiện tạo khoá Ed25519 khi bạn không chỉ định loại khoá. Tạo và cài SSH key như sau:
# Trên máy của bạn: tạo cặp khoá (đặt passphrase khi được hỏi)
ssh-keygen -t ed25519 -C "email-cua-ban@example.com"
# -> ~/.ssh/id_ed25519 (private key, giữ bí mật) và ~/.ssh/id_ed25519.pub (public key)
# Chép public key lên máy chủ (cần đăng nhập bằng mật khẩu lần này)
ssh-copy-id user@203.0.113.10
# Đăng nhập thử bằng key trong một cửa sổ MỚI, giữ phiên cũ mở
ssh user@203.0.113.10
Chỉ khi đăng nhập bằng key thành công mới tắt đăng nhập bằng mật khẩu. Sửa /etc/ssh/sshd_config (hoặc file trong /etc/ssh/sshd_config.d/):
PasswordAuthentication no
PermitRootLogin prohibit-password
# Kiểm tra cú pháp rồi nạp lại dịch vụ (Ubuntu 24.04)
sudo sshd -t
sudo systemctl reload ssh
Theo tài liệu sshd_config, mặc định của OpenSSH là cổng 22, PasswordAuthentication yes và PermitRootLogin prohibit-password; bản cài của từng hệ điều hành hoặc nhà cung cấp VPS có thể ghi đè các giá trị này, nên hãy kiểm tra cấu hình thực tế. Tìm hiểu kỹ hơn về cặp khoá tại SSH key là gì. Người dùng VPS Tino có thể thêm key qua bảng điều khiển theo hướng dẫn thêm SSH key vào VPS qua Tino Panel.
Các lệnh SSH thường dùng
Lệnh SSH cơ bản có dạng ssh user@host: user là tài khoản trên máy chủ, host là địa chỉ IP hoặc tên miền. Từ lệnh này, bạn thêm tuỳ chọn để đổi cổng, chọn file khoá, chạy một lệnh duy nhất, chuyển file hoặc chuyển tiếp cổng. Các lệnh dưới đây dùng được trên Linux, macOS và Windows 10/11 có OpenSSH Client.
Mục đích Lệnh Ghi chú Đăng nhập máy chủ ssh user@203.0.113.10Lần đầu sẽ hỏi xác nhận vân tay host key Đăng nhập cổng khác 22 ssh -p 2222 user@203.0.113.10-p: cổng trên máy chủChỉ định file khoá ssh -i ~/.ssh/id_ed25519 user@host-i: private key dùng để xác thựcChạy một lệnh rồi thoát ssh user@host "df -h"Lệnh chạy trên máy chủ thay cho shell tương tác Tạo SSH key ssh-keygen -t ed25519Tạo cặp khoá trong ~/.ssh/Chép public key lên máy chủ ssh-copy-id user@hostThêm key vào ~/.ssh/authorized_keysChép file lên máy chủ scp file.zip user@host:/home/user/Đi qua kết nối SSH; sftp user@host cho phiên chuyển file tương tácChuyển tiếp cổng về máy bạn ssh -L 8080:localhost:80 user@hostMở localhost:8080 trên máy bạn để vào cổng 80 của máy chủĐi qua máy chủ trung gian ssh -J user@bastion user@may-noi-bo-J: jump hostXem chi tiết khi lỗi ssh -v user@hostIn từng bước kết nối để tìm nguyên nhân
Có thể lưu sẵn thông tin máy chủ trong file ~/.ssh/config để chỉ cần gõ ssh vps:
Host vps
HostName 203.0.113.10
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519
Nếu thích giao diện đồ hoạ, bạn có thể dùng Termius (hướng dẫn kết nối SSH bằng Termius) hoặc WinSCP để chuyển file qua SFTP trên Windows.
Cách dùng SSH kết nối máy chủ, VPS
Để kết nối VPS bằng SSH, bạn cần ba thông tin: địa chỉ IP, tên người dùng và mật khẩu hoặc SSH key, thường có trong email kích hoạt của nhà cung cấp. Mở Terminal (macOS, Linux) hoặc PowerShell (Windows 10/11), gõ ssh user@IP, xác nhận vân tay ở lần đầu rồi nhập mật khẩu hoặc dùng key.
- macOS, Linux: mở Terminal, gõ
ssh root@IP-VPShoặcssh user@IP-VPS. - Windows 10/11: theo Microsoft Learn, OpenSSH có trên Windows từ Windows 10 bản 1809 dưới dạng tính năng tuỳ chọn. Gõ
sshtrong PowerShell để kiểm tra; nếu chưa có, bật “OpenSSH Client” trong Optional features. Cũng có thể dùng PuTTY. - Khi gõ mật khẩu: màn hình không hiện ký tự nào, đây là bình thường. Gõ xong nhấn Enter.
- Sau lần đăng nhập đầu: tạo user thường có quyền sudo, cài SSH key, rồi mới tắt đăng nhập bằng mật khẩu.
Hướng dẫn chi tiết theo từng hệ điều hành, kèm cách xử lý lỗi thường gặp như “Connection refused”, “Permission denied (publickey)”, có trong bài cách kết nối VPS. Nếu dùng hosting, xem truy cập SSH vào hosting bằng PuTTY.
Cổng 22 và bảo mật SSH
Cổng 22 là cổng mặc định của SSH, nên cũng là cổng bị các bot quét và dò mật khẩu thường xuyên. Đổi sang cổng khác chỉ giảm bớt log rác, không thay được các biện pháp chính: đăng nhập bằng key, tắt mật khẩu, giới hạn người dùng và bật tường lửa.
- Dùng SSH key ed25519 có passphrase; tắt
PasswordAuthenticationkhi key đã chạy. - Không đăng nhập root bằng mật khẩu: dùng user thường với sudo; giữ
PermitRootLogin prohibit-passwordhoặcno. - Bật tường lửa đúng thứ tự:
sudo ufw allow OpenSSH(hoặc cổng SSH mới) trước, rồi mớisudo ufw enable, để không tự khoá mình ngoài máy chủ. - Nếu đổi cổng SSH: mở cổng mới trên tường lửa, thử đăng nhập bằng cổng mới trong cửa sổ khác, rồi mới đóng cổng 22.
- Chống dò mật khẩu: cài Fail2ban để chặn IP đăng nhập sai nhiều lần; cập nhật OpenSSH thường xuyên.
- Chuẩn bị đường lui: dùng console của nhà cung cấp (ví dụ Web Console noVNC trên VPS Tino) khi lỡ cấu hình sai SSH.
Danh sách kiểm tra đầy đủ có trong bài bảo mật VPS. Nếu bạn cần một máy chủ Linux để thực hành, các gói VPS NVMe tại Tino có Full Root Access và Web Console noVNC (thông tin trang sản phẩm, kiểm tra 20/10/2026). Kiến thức nền về máy chủ ảo có tại VPS là gì.
Câu hỏi thường gặp về SSH
SSH key là gì?
SSH key là cặp khoá dùng để đăng nhập SSH thay cho mật khẩu: public key đặt trên máy chủ, private key giữ trên máy của bạn. Khi đăng nhập, máy chủ kiểm tra bạn có private key tương ứng mà không cần bạn gửi khoá đó đi. Nên tạo khoá loại ed25519 và đặt passphrase để bảo vệ private key.
SSH và SSL/TLS khác nhau thế nào?
Cả hai đều mã hoá dữ liệu trên mạng nhưng dùng cho việc khác nhau. SSH dùng để đăng nhập và quản trị máy chủ từ xa, chuyển file; SSL/TLS dùng để mã hoá kết nối giữa trình duyệt và website (HTTPS), email và nhiều ứng dụng khác. SSH xác thực máy chủ bằng host key lưu trong known_hosts, còn TLS dùng chứng chỉ do tổ chức chứng thực cấp.
SFTP có phải là SSH không?
SFTP (SSH File Transfer Protocol) là giao thức chuyển file chạy bên trong kết nối SSH, nên dùng chung cổng 22 và cách xác thực của SSH. SFTP khác với FTPS (FTP chạy trên TLS) và an toàn hơn FTP thường, vốn gửi mật khẩu không mã hoá.
Vì sao SSH báo "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED"?
Cảnh báo này xuất hiện khi host key của máy chủ khác với khoá đã lưu trong ~/.ssh/known_hosts. Lý do phổ biến là bạn vừa cài lại hệ điều hành VPS. Nếu chắc chắn như vậy, xoá khoá cũ bằng ssh-keygen -R IP-may-chu rồi kết nối lại; nếu không rõ lý do, đừng tiếp tục vì có thể có máy chủ giả mạo.
Làm sao biết máy chủ có đang chạy SSH không?
Trên máy chủ, chạy sudo systemctl status ssh (Ubuntu) để xem dịch vụ, và sudo ss -tlnp | grep ssh để xem cổng đang lắng nghe. Từ máy của bạn, ssh -v user@host cho biết kết nối dừng ở bước nào.
Nguồn tham khảo
- IETF RFC 4251: The Secure Shell (SSH) Protocol Architecture (truy cập 20/10/2026)
- OpenSSH manual: ssh(1) (truy cập 20/10/2026)
- OpenSSH manual: ssh-keygen(1) (truy cập 20/10/2026)
- OpenSSH manual: sshd_config(5) (truy cập 20/10/2026)
- Microsoft Learn: OpenSSH for Windows overview (truy cập 20/10/2026)
