SSH Key là gì? Hướng dẫn 5 bước tạo & quản lý SSH Key chi tiết

  • Home
  • Blog
  • SSH Key là gì? Hướng dẫn 5 bước tạo & quản lý SSH Key chi tiết
DateTh10 9, 2025

Rate this post

Mỗi ngày, hàng triệu lập trình viên, quản trị viên hệ thống hay kỹ thuật viên Dev Ops phải truy cập các máy chủ, hệ thống đám mây hoặc kho mã nguồn từ xa. Phương thức xác thực truyền thống bằng mật khẩu đang dần trở nên lỗi thời vì những rủi ro bảo mật tiềm ẩn và sự bất tiện. SSH Key là giải pháp tối ưu giúp bảo mật cao và thao tác nhanh chóng. Bài viết này Thuê Máy Chủ Giá Rẻ sẽ cung cấp hướng dẫn toàn diện nhất về SSH Key là gì, cách tạo, sử dụng, quản lý key, và xử lý các lỗi thường gặp một cách chi tiết và dễ hiểu.

SSH Key là gì?

SSH Key (hay còn gọi là khóa SSH) là một cặp khóa mật mã (cryptographic key pair) dùng để xác thực và bảo mật kết nối giữa máy khách (Client – máy tính của bạn) và máy chủ (Server) qua giao thức SSH. Đây là phương pháp tối ưu thay thế cho mật khẩu truyền thống, giúp bạn đăng nhập GitHub, GitLab hay máy chủ nhanh chóng và an toàn hơn.

Một cặp khóa SSH bao gồm hai thành phần:

  1. Private Key (Khóa riêng tư): Phải được bảo vệ nghiêm ngặt và lưu trữ trên máy Client của bạn.
  2. Public Key (Khóa công khai): Có thể chia sẻ tự do và được đặt trên máy chủ hoặc dịch vụ bạn muốn kết nối.
SSH Key là gì?

SSH Key là gì?

Vai trò của SSH Key trong xác thực và bảo mật kết nối

SSH Key mang lại tính bảo mật vượt trội hơn mật khẩu truyền thống nhờ cơ chế mã hóa bất đối xứng:

  • Xác thực không cần mật khẩu: Khi bạn yêu cầu kết nối, Server sẽ gửi một thông điệp thử thách (challenge) ngẫu nhiên. Client sử dụng Private Key để mã hóa thông điệp đó. Server sau đó dùng Public Key tương ứng để giải mã và kiểm tra tính hợp lệ. Quá trình này giúp Server xác minh danh tính Client mà không cần truyền tải bất kỳ mật khẩu nào.
  • Chống Brute-force: Khóa SSH thường là một chuỗi ký tự rất dài, ngẫu nhiên (ví dụ: 256-bit với Ed25519 hoặc 4096-bit với RSA). Điều này khiến các cuộc tấn công Brute-force (dò mật khẩu) trở nên gần như bất khả thi.
Vai trò trong xác thực và bảo mật kết nối

Vai trò trong xác thực và bảo mật kết nối

Phân loại SSH Key theo mục đích sử dụng

Trong giao thức SSH, có ba loại Key chính phục vụ các mục đích khác nhau:

  • User Key: Thuộc sở hữu của người dùng cá nhân (ví dụ: Lập trình viên, SysAdmin). Dùng để đăng nhập server hoặc xác thực với các dịch vụ như Git. Đây là loại key chúng ta thường tạo bằng lệnh ssh-keygen.
  • Host Key: Được tạo và lưu trữ trên chính máy chủ. Mục đích là để xác thực Server với Client, đảm bảo rằng bạn đang kết nối đúng máy chủ và không bị tấn công Man-in-the-Middle (MITM).
  • Session Key: Là khóa mã hóa tạm thời, được tạo ra trong quá trình bắt tay (handshake) và chỉ tồn tại trong suốt phiên làm việc. Nó dùng để mã hóa toàn bộ dữ liệu truyền tải qua lại, đảm bảo tốc độ và bảo mật.

Trước khi SSH xuất hiện vào năm 1995, các giao thức như Telnet, rlogin và rsh được sử dụng để điều khiển hệ thống từ xa. Vấn đề cốt lõi của chúng là toàn bộ dữ liệu (bao gồm cả mật khẩu) đều được gửi dưới dạng văn bản thuần túy (unencrypted plain text), cực kỳ dễ bị tin tặc đánh cắp.

Sự ra đời của SSH giải quyết triệt để vấn đề này bằng cách mã hóa hoàn toàn kết nối.

Lịch sử và các phiên bản SSH

  • SSH1 (1995): Là phiên bản đầu tiên, đặt nền móng cho giao thức bảo mật. Tuy nhiên, các lỗ hổng bảo mật sớm được phát hiện (như lỗi tái tạo Session ID).
  • SSH2 (1998): Đây là phiên bản được cải tiến và là tiêu chuẩn hiện tại. SSH2 tăng cường mạnh mẽ về cơ chế mã hóa, xác thực, và hỗ trợ các tính năng hiện đại như Tunneling. Các máy chủ và công cụ hiện nay đều mặc định sử dụng SSH2.

Mô hình Client-Server của SSH

SSH hoạt động theo kiến trúc Client-Server đơn giản và rõ ràng:

  1. SSH Server (sshd): Chạy nền trên máy chủ (hoặc VPS), lắng nghe kết nối tại Port 22 (mặc định) và quản lý việc xác thực SSH Key.
  2. SSH Client: Chạy trên máy tính người dùng, gửi yêu cầu kết nối và thực hiện quá trình mã hóa/giải mã bằng Private Key.

Sau khi xác thực thành công, kênh bảo mật (secure channel) sẽ được thiết lập để trao đổi dữ liệu.

SSH hỗ trợ Tunneling / Port Forwarding

Một trong những ứng dụng nâng cao mạnh mẽ của SSH là khả năng Tunneling (tạo đường hầm) hay Port Forwarding. Tính năng này cho phép bạn chuyển tiếp các cổng mạng (port) một cách an toàn qua kết nối SSH đã được mã hóa.

Ví dụ: Bạn có thể tạo Local Port Forwarding để truy cập một dịch vụ nội bộ (như Database chỉ chạy trên localhost của Server) từ máy tính cá nhân của bạn, thông qua một cổng bảo mật của SSH. Tính năng này rất hữu ích cho các tác vụ quản trị và bảo mật ứng dụng.

Các loại SSH Key phổ biến

Khi bạn sử dụng lệnh ssh-keygen để tạo SSH Key, bạn phải chỉ định thuật toán mã hóa. Việc lựa chọn thuật toán này sẽ quyết định độ dài khóa, tốc độ xử lý và mức độ bảo mật tổng thể của Key. Dưới đây là phân tích chi tiết về các loại thuật toán SSH Key chính đang được sử dụng:

Thuật toán Mô tả Ưu điểm Hạn chế / Khuyến nghị Ứng dụng thực tế
RSA Rivest–Shamir–Adleman, thuật toán bất đối xứng lâu đời và phổ biến trong SSH Tương thích rộng rãi, hoạt động tốt trên hầu hết máy chủ và hệ điều hành cũ Khóa nên từ 2048 bit trở lên, tốt nhất 4096 bit; khóa dài có thể làm chậm xác thực Dùng phổ biến cho SSH trên server, máy chủ cũ
Ed25519 Thuật toán dựa trên Elliptic Curve Cryptography (ECC), được khuyến nghị hàng đầu Khóa ngắn (256 bit) nhưng bảo mật tương đương RSA 3072 bit, tốc độ xác thực nhanh, ít rủi ro ngẫu nhiên Cần hỗ trợ từ hệ thống; tương thích thấp với các hệ thống quá cũ Git, GitHub, CI/CD, tự động hóa xác thực liên tục
ECDSA Elliptic Curve Digital Signature Algorithm, dựa trên ECC Tốc độ xác thực nhanh, mức độ bảo mật tốt Tương thích thấp với hệ thống cũ; e ngại về cách tạo số ngẫu nhiên Các hệ thống hiện đại cần tốc độ xác thực nhanh
DSA Digital Signature Algorithm, cũ và chỉ hỗ trợ khóa 1024 bit Bảo mật yếu, không còn khuyến nghị sử dụng Nên tránh triển khai mới; có thể gặp trên hệ thống cũ

Cấu tạo của SSH Key

Để một kết nối SSH hoạt động an toàn, bạn cần hiểu rõ cấu trúc vật lý của một cặp SSH Key. Cấu tạo này tuân thủ nguyên tắc mã hóa bất đối xứng, một nguyên lý cốt lõi giúp phân biệt rõ ràng giữa hai thành phần chính: Khóa riêng tư và Khóa công khai.

Private Key & Public Key

Cặp khóa SSH Key được tạo ra đồng thời và có mối liên hệ mật thiết với nhau, nhưng vai trò và yêu cầu bảo mật lại hoàn toàn khác biệt:

Loại Key Tên file thường gặp Vai trò Yêu cầu bảo mật
Private Key (Khóa riêng tư) id_rsa, id_ed25519 (không có đuôi) Dùng để ký số và giải mã dữ liệu thử thách từ máy chủ. Đây là bằng chứng xác thực danh tính duy nhất của bạn Phải được giữ bí mật tuyệt đối. Nên được bảo vệ thêm bằng Passphrase và có quyền truy cập hạn chế (chmod 600)
Public Key (Khóa công khai) id_rsa.pub, id_ed25519.pub Dùng để mã hóa dữ liệu thử thách và xác thực (kiểm tra) chữ ký số được tạo ra bởi Private Key tương ứng Có thể chia sẻ tự do. Được đặt trên các máy chủ (trong file authorized_keys) hoặc các dịch vụ như GitHub

Fingerprint & Randomart

Trong quá trình thiết lập kết nối, SSH còn sử dụng hai khái niệm phụ giúp nhận diện và xác minh Key:

  • Fingerprint (Dấu vân tay): Đây là một giá trị hash (băm) ngắn gọn của Public Key (thường là SHA256). Fingerprint đóng vai trò là “chữ ký” duy nhất, giúp bạn:
    • Nhận diện Key: Xác nhận Public Key bạn vừa tải lên máy chủ có chính xác không.
    • Xác minh Server: Khi bạn kết nối tới một máy chủ lần đầu, SSH Client sẽ hiển thị Fingerprint của Host Key Server. Bạn cần kiểm tra xem giá trị này có trùng khớp với giá trị công khai của Server không để ngăn chặn tấn công MITM (Man-in-the-Middle).
  • Visual Randomart: Là một hình ảnh trực quan (thường là dạng hình học) được tạo ra từ Fingerprint. Mặc dù ít được sử dụng trong các hệ thống hiện đại, Visual Randomart cung cấp một cách nhận diện Key nhanh chóng và dễ nhớ hơn so với việc so sánh một chuỗi ký tự dài ngoằng. Nếu hình ảnh này thay đổi, Key đó đã bị thay đổi.
Fingerprint & Randomart

Fingerprint & Randomart

Hướng dẫn tạo và sử dụng SSH Key trên Windows, Linux/macOS/Ubuntu

1. Tạo SSH Key trên Windows

Trên Windows, bạn cần PuTTY-Gen để tạo SSH Key. Tải và mở PuTTY-Gen, chọn các tùy chọn như hướng dẫn và nhấn Generate. Trong khi tạo key, di chuyển chuột xung quanh màn hình để quá trình hoàn tất.

Sau khi tạo xong, hãy nhập keypharse cho Private Key. Nhấn Save Private Key và lưu vào nơi an toàn, có thể lưu một bản trên Dropbox nếu cần.

2. Tạo SSH Key trên Linux/macOS/Ubuntu

Trên Linux/macOS, mở Terminal và gõ:

ssh-keygen -t rsa

Hệ thống sẽ hỏi nơi lưu Private Key (mặc định /home/user/.ssh) và có muốn thiết lập keypharse không. Sau khi hoàn tất, bạn sẽ thấy thông báo:

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

Bạn có thể xem public key bằng lệnh:

cat /root/.ssh/id_rsa.pub

Public Key này sẽ được thêm vào VPS.

3. Thêm Public Key vào VPS

Đăng nhập vào VPS với user cần thêm key (thường là root). Tạo thư mục .ssh và file authorized_keys với lệnh:

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

Mở file authorized_keys và copy toàn bộ ký tự Public Key vào.

Lưu ý: Nếu VPS bật SELinux, SSH Key sẽ không hoạt động. Tắt SELinux trong /etc/selinux/config (SELINUX=disabled) và reboot server.

4. Kiểm tra và đăng nhập bằng SSH Key

Sau khi thêm key, thử đăng nhập lại vào server. Nếu Linux, hệ thống sẽ hỏi keypharse; nếu Windows, trỏ Private Key trong PuTTY hoặc MobaXterm để xác thực. Nếu đăng nhập thành công, SSH Key đã hoạt động.

5. Tắt đăng nhập bằng mật khẩu

Khi SSH Key đã hoạt động, nên tắt đăng nhập bằng mật khẩu để tránh bị tấn công Brute-force. Mở file /etc/ssh/sshd_config và sửa các tham số:

PasswordAuthentication no
UsePAM no

Các lệnh SSH phổ biến nên biết

Để tận dụng tối đa sức mạnh của SSH Key và giao thức SSH, bạn cần thành thạo các lệnh cơ bản sau đây. Đây là những công cụ thiết yếu đối với mọi kỹ thuật viên:

Lệnh Chức năng chính Cú pháp điển hình Mục đích
ssh Đăng nhập và thực thi lệnh trên Server ssh [user]@[server_ip_hoac_domain] Thiết lập kết nối từ Client đến Server. Nếu đã cài đặt SSH Key, kết nối xác thực ngay lập tức mà không cần mật khẩu
sshd Daemon SSH Server sudo service sshd status Dịch vụ chạy ngầm trên máy chủ, lắng nghe các yêu cầu kết nối. Dùng để kiểm tra trạng thái dịch vụ
ssh-keygen Tạo cặp SSH Key ssh-keygen -t ed25519 -C "[email protected]" Khởi tạo cặp Private Key & Public Key mới. Sử dụng -t ed25519 để bảo mật cao, hiệu suất nhanh
ssh-agent Quản lý phiên SSH Key eval "$(ssh-agent -s)" Chương trình nền quản lý Private Key, lưu Passphrase trong RAM, tránh nhập lại nhiều lần
ssh-add Thêm Key vào Agent ssh-add ~/.ssh/id_ed25519 Thêm Private Key vào ssh-agent. Nhập Passphrase lần đầu sau khi khởi động máy
scp Sao chép file an toàn scp local_file user@ip:/remote/path Truyền file nhanh, sử dụng SSH mã hóa dữ liệu. Thường dùng để copy Public Key lên Server
sftp Truyền file tương tác an toàn sftp user@ip Mở phiên truyền file tương tác, quản lý file trên Server giống FTP nhưng bảo mật bằng SSH

Cách quản lý SSH Key trong doanh nghiệp

Trong môi trường doanh nghiệp lớn hoặc các tổ chức DevOps quản lý hàng trăm máy chủ, số lượng SSH Key có thể lên đến hàng ngàn. Việc quản lý lỏng lẻo các khóa này sẽ trở thành rủi ro bảo mật nghiêm trọng. Quản lý SSH Key hiệu quả là một nhiệm vụ cốt lõi của mọi SysAdmin và Security Team.

Key Rotation: Xoay vòng SSH Key định kỳ

Key Rotation (Xoay vòng khóa) là chính sách bảo mật yêu cầu người dùng thay thế các cặp SSH Key cũ bằng key mới một cách định kỳ (ví dụ: 6 tháng hoặc 1 năm một lần).

  • Mục đích: Giảm thiểu rủi ro nếu một Private Key bị đánh cắp hoặc bị rò rỉ mà không ai biết. Bằng cách giới hạn “tuổi thọ” của Key, bạn giới hạn khoảng thời gian kẻ tấn công có thể sử dụng Key đó để truy cập hệ thống.
  • Thực hành: Trong môi trường doanh nghiệp, quá trình này thường được tự động hóa bằng các công cụ quản lý danh tính (Identity Management) hoặc công cụ quản lý bí mật (Secrets Management).
Xoay vòng SSH Key định kỳ

Xoay vòng SSH Key định kỳ

Ngăn ngừa Key Sprawl: Kiểm soát số lượng Key

Key Sprawl (Khóa phân tán) là một vấn đề phổ biến, xảy ra khi có quá nhiều SSH Key khác nhau được tạo ra, sử dụng, và lưu trữ rải rác trên nhiều máy tính cá nhân và máy chủ mà không có sự kiểm soát tập trung.

  • Hậu quả: Gây khó khăn trong việc kiểm tra ai có quyền truy cập vào Server nào. Khi một nhân viên nghỉ việc, việc đảm bảo tất cả Public Key của họ đã được xóa khỏi mọi máy chủ gần như là bất khả thi, tạo ra “cửa hậu” (backdoor) bảo mật lớn.
  • Giải pháp: Áp dụng các chính sách nghiêm ngặt về việc lưu trữ Key và sử dụng các hệ thống như SSH Certificates hoặc các công cụ quản lý truy cập (Access Management tools) để kiểm soát Key tập trung.
Kiểm soát số lượng Key

Kiểm soát số lượng Key

Best Practices khi quản lý nhiều Key

Để đảm bảo an toàn và tính minh bạch, các tổ chức nên tuân thủ các nguyên tắc sau:

  1. Sử dụng Passphrase: Bắt buộc Private Key phải được bảo vệ bằng Passphrase (một mật khẩu dài hơn).
  2. Giới hạn quyền truy cập: Đảm bảo chỉ những người cần thiết mới có Public Key được đặt trên máy chủ và chỉ những người được ủy quyền mới sở hữu Private Key.
  3. Tách biệt Key: Không sử dụng cùng một SSH Key cho cả môi trường phát triển (Dev), thử nghiệm (Staging) và sản xuất (Production). Mỗi môi trường nên có một cặp Key riêng biệt để giảm thiểu phạm vi ảnh hưởng nếu Key bị lộ.
  4. Kiểm tra và Audit: Thường xuyên kiểm tra file authorized_keys trên tất cả máy chủ để đảm bảo không có Public Key cũ, không còn sử dụng hoặc không được ủy quyền tồn tại.
Best Practices khi quản lý nhiều Key

Best Practices khi quản lý nhiều Key

So sánh SSH với các giao thức khác

Để thấy rõ tầm quan trọng của SSH, đặc biệt là khi sử dụng SSH Key để xác thực, chúng ta cần đặt nó bên cạnh các giao thức mạng phổ biến khác dùng để truy cập hoặc quản lý hệ thống từ xa.

Giao thức Mã hóa dữ liệu? Mục đích chính Phương thức xác thực phổ biến Điểm yếu lớn nhất
SSH (Secure Shell) Có (Mã hóa mạnh) Truy cập Command Line, quản lý hệ thống, Tunneling SSH Key hoặc mật khẩu Phụ thuộc vào quản lý Private Key của người dùng
Telnet Không Truy cập Command Line cũ Mật khẩu Dữ liệu gửi không mã hóa (Plain Text), dễ bị nghe lén
RDP (Remote Desktop Protocol) Có (TLS/SSL) Truy cập giao diện đồ họa (GUI) Mật khẩu Thường chỉ dùng cho hệ thống Windows
SFTP / SCP Có (Dựa trên SSH) Truyền file an toàn SSH Key hoặc mật khẩu Chỉ tập trung vào truyền file, không dùng để quản lý Command Line

Các lỗi thường gặp về SSH Key và cách khắc phục

1. Lỗi Permission (Permission denied (publickey))

Đây là lỗi phổ biến nhất khi cố gắng đăng nhập bằng SSH Key. Nó có nghĩa là Server đã nhận được yêu cầu kết nối của bạn, nhưng từ chối chấp nhận Public Key của bạn để xác thực.

Nguyên nhân thường gặp Cách khắc phục chi tiết
Public Key chưa được cài đặt Kiểm tra file ~/.ssh/authorized_keys trên máy chủ (Server) để đảm bảo Public Key của bạn đã được dán chính xác và đầy đủ. Đảm bảo file này chỉ có quyền truy cập 600
Private Key chưa được thêm vào Agent Dùng lệnh ssh-add -l trên máy Client để xem Key của bạn đã được thêm vào ssh-agent chưa. Nếu chưa, thêm bằng lệnh ssh-add [đường_dẫn_key] (nếu có Passphrase, bạn sẽ nhập tại bước này)
Lỗi quyền truy cập file Key (Lỗi Quyền Truy Cập) Lỗi phổ biến trên Linux/macOS. Hệ thống yêu cầu Private Key và thư mục chứa nó phải có quyền truy cập hạn chế (chỉ dành cho chủ sở hữu). Sửa bằng lệnh: chmod 600 ~/.ssh/id_rsachmod 700 ~/.ssh

2. Lỗi kết nối (Connection refused hoặc Connection timed out)

Lỗi này xảy ra trước cả quá trình xác thực SSH Key, thường là do vấn đề về mạng hoặc máy chủ (Server) không phản hồi.

Lỗi Ý nghĩa Cách khắc phục nhanh
Connection timed out Không thể kết nối tới Server trong khoảng thời gian cho phép. Kiểm tra Firewall (Tường lửa) của Server: đảm bảo Port SSH (mặc định 22) đã mở và không bị chặn. Kiểm tra kết nối mạng của bạn
Connection refused Server nhận được yêu cầu nhưng từ chối kết nối. Kiểm tra dịch vụ sshd trên máy chủ (dùng sudo service sshd status): đảm bảo SSH đang chạy. Kiểm tra Port kết nối nếu đã thay đổi mặc định

3. Cách Debug: Kiểm tra File Quyền, Agent, Log SSH

Khi các giải pháp trên không hiệu quả, bạn cần xem chi tiết quá trình kết nối SSH đang diễn ra như thế nào bằng cách thêm tùy chọn verbose (chi tiết) vào lệnh ssh:

ssh -v username@server_ip
  • Tác dụng của -v: Lệnh này sẽ in ra màn hình từng bước của quá trình bắt tay SSH, bao gồm việc Client tìm kiếm Private Key, thử các thuật toán mã hóa, và quá trình xác thực.
  • Phân tích Log SSH:
    • Nếu lỗi nằm ở Key, bạn sẽ thấy thông báo “Trying private key…” sau đó là “Authentication failed” hoặc “Permission denied”.
    • Nếu lỗi nằm ở Server, bạn sẽ thấy quá trình bị dừng lại ở bước “Connecting…” hoặc “Exchanging keys”.

Việc đọc log SSH chi tiết này là công cụ mạnh mẽ nhất để SysAdmin xác định chính xác Key nào đang được thử, thuật toán nào đang thất bại, hoặc quyền truy cập file nào đang bị vi phạm.

Tổng kết

Việc chuyển đổi từ mật khẩu truyền thống sang SSH Key không chỉ là một xu hướng mà là một yêu cầu bảo mật cơ bản trong ngành công nghệ hiện đại. Bài viết này đã cung cấp cái nhìn toàn diện về SSH Key là gì và cách thức hoạt động của nó, từ cấu tạo cơ bản đến các ứng dụng nâng cao. Hãy bắt đầu sử dụng SSH Key ngay hôm nay để đưa quy trình làm việc của bạn lên một tầm cao mới về bảo mật và hiệu quả!

Để lại một bình luận