Diendantinhoc.vn
Mạng

Hướng dẫn tạo và sử dụng SSH Keygen bảo mật

SSH Keygen là gì?

Trong thế giới công nghệ thông tin hiện đại, việc bảo mật thông tin và quyền truy cập vào các hệ thống máy chủ là vô cùng quan trọng. SSH (Secure Shell) là một giao thức mạng phổ biến cung cấp một phương thức truyền dữ liệu được mã hóa giữa hai máy tính qua một mạng không an toàn. Để tăng cường lớp bảo mật này, SSH Keygen đã ra đời như một giải pháp thay thế hiệu quả cho việc xác thực bằng mật khẩu truyền thống.

SSH Keygen, về bản chất, là một công cụ tạo ra một cặp khóa mã hóa: Public Key (khóa công khai)Private Key (khóa cá nhân). Public Key được chia sẻ công khai và lưu trữ trên máy chủ đích, trong khi Private Key phải được người dùng bảo mật tuyệt đối trên thiết bị cá nhân của mình. Sự kết hợp này cho phép xác thực danh tính người dùng một cách an toàn mà không cần phải nhập mật khẩu mỗi lần kết nối, giảm thiểu rủi ro bị tấn công dò mật khẩu (brute-force).

Cặp khóa SSH Keygen gồm Public Key và Private Key đóng vai trò quan trọng trong việc xác thực bảo mật.

Cơ chế hoạt động của xác thực SSH Keygen

Cơ chế xác thực bằng SSH Keygen dựa trên nguyên lý của mật mã hóa khóa công khai. Khi bạn cố gắng kết nối đến một máy chủ SSH đã được cấu hình để sử dụng khóa SSH, quy trình diễn ra như sau:

  • Khởi tạo kết nối: Máy khách (thiết bị của bạn) gửi yêu cầu kết nối đến máy chủ SSH.
  • Yêu cầu thách thức: Máy chủ SSH, sau khi nhận được Public Key của bạn (đã được cài đặt trước đó trên server), sẽ tạo ra một 'thách thức' (challenge) ngẫu nhiên và gửi nó về cho máy khách.
  • Ký thách thức: Máy khách sử dụng Private Key cá nhân của mình để mã hóa (ký) 'thách thức' này.
  • Xác minh: Máy khách gửi lại 'thách thức' đã được ký về cho máy chủ. Máy chủ sử dụng Public Key tương ứng để giải mã 'thách thức' này. Nếu giải mã thành công và nội dung khớp với 'thách thức' ban đầu, máy chủ sẽ xác nhận danh tính của người dùng và cho phép truy cập.

Quá trình này đảm bảo rằng chỉ người sở hữu Private Key tương ứng với Public Key trên máy chủ mới có thể xác thực thành công. Điều này mang lại mức độ bảo mật cao hơn hẳn so với việc chỉ sử dụng mật khẩu, vốn có thể bị đánh cắp hoặc dò ra.

Xác thực bằng SSH Key giúp giảm nguy cơ bị tấn công và tăng tốc độ đăng nhập.

Hướng dẫn tạo SSH Key (Public/Private) chi tiết

Việc tạo một cặp SSH Key là một quy trình tương đối đơn giản, có thể thực hiện dễ dàng trên hầu hết các hệ điều hành như Linux, macOS và Windows. Công cụ chính được sử dụng là ssh-keygen.

Các bước tạo SSH Key trên Terminal

Mở ứng dụng Terminal (hoặc Command Prompt/PowerShell trên Windows) và thực hiện lệnh sau:

ssh-keygen -t ed25519 -C "your_email@example.com"

Trong đó:

  • ssh-keygen: Lệnh gọi công cụ tạo khóa.
  • -t ed25519: Chỉ định thuật toán tạo khóa. Ed25519 được khuyến nghị sử dụng vì cung cấp hiệu năng và bảo mật tốt hơn so với RSA. Tuy nhiên, RSA vẫn là một lựa chọn phổ biến nhờ tính tương thích cao. Bạn có thể thay thế bằng -t rsa -b 4096 nếu cần.
  • -C "your_email@example.com": Thêm một dòng chú thích vào khóa của bạn, thường là địa chỉ email liên kết với tài khoản của bạn trên các dịch vụ như GitHub, GitLab.

Sau khi chạy lệnh, bạn sẽ được hỏi:

  1. Enter file in which to save the key (/home/user/.ssh/id_ed25519): Nhấn Enter để chấp nhận đường dẫn mặc định, hoặc nhập đường dẫn tùy chỉnh nếu muốn.
  2. Enter passphrase (empty for no passphrase): Nhập một mật khẩu mạnh để bảo vệ Private Key của bạn. Đây là một lớp bảo mật bổ sung quan trọng. Nếu có ai đó lấy được Private Key của bạn, họ vẫn cần mật khẩu này để sử dụng nó.
  3. Enter same passphrase again: Nhập lại mật khẩu để xác nhận.

Sau khi hoàn tất, hai tệp sẽ được tạo trong thư mục .ssh của bạn: id_ed25519 (Private Key) và id_ed25519.pub (Public Key).

Quá trình tạo SSH Key có thể được thực hiện dễ dàng trên nhiều nền tảng.

Cấu hình Public SSH Keygen lên máy chủ

Sau khi tạo cặp khóa, bạn cần đưa Public Key lên máy chủ mà bạn muốn truy cập. Các bước thực hiện sẽ khác nhau tùy thuộc vào máy chủ và dịch vụ bạn đang sử dụng (ví dụ: máy chủ Linux, GitHub, GitLab).

Cấu hình cho máy chủ Linux

  1. Sao chép Public Key: Sử dụng lệnh ssh-copy-id (khuyến nghị) hoặc sao chép thủ công nội dung tệp .pub của bạn.
  2. Sử dụng ssh-copy-id:
    ssh-copy-id user@your_server_ip
    Lệnh này sẽ tự động thêm Public Key của bạn vào tệp ~/.ssh/authorized_keys trên máy chủ. Bạn sẽ cần nhập mật khẩu SSH của máy chủ một lần.
  3. Sao chép thủ công:

    Mở tệp Public Key của bạn (ví dụ: ~/.ssh/id_ed25519.pub) và sao chép toàn bộ nội dung.

    Sau đó, kết nối SSH đến máy chủ bằng mật khẩu, và chỉnh sửa/tạo tệp ~/.ssh/authorized_keys, dán nội dung Public Key vào đó.

Cấu hình cho GitHub/GitLab

Bạn cần thêm Public Key vào cài đặt tài khoản GitHub hoặc GitLab của mình:

  1. Truy cập vào Settings của tài khoản.
  2. Tìm mục SSH and GPG keys hoặc tương tự.
  3. Nhấp vào New SSH key hoặc Add SSH key.
  4. Dán nội dung Public Key (tệp .pub) vào ô tương ứng.
  5. Đặt một tiêu đề (title) cho khóa để dễ nhận diện.
Việc thêm Public Key vào các dịch vụ hosting code giúp bạn xác thực dễ dàng hơn.

Cấu hình Private Key cho SSH Client

Private Key của bạn phải được bảo mật tuyệt đối. Hầu hết các SSH Client (như OpenSSH, PuTTY) sẽ tự động tìm kiếm các tệp khóa riêng trong thư mục mặc định (ví dụ: ~/.ssh/). Nếu bạn lưu Private Key ở một vị trí khác, bạn có thể cần chỉ định đường dẫn khi kết nối hoặc cấu hình trong file ~/.ssh/config.

Ví dụ cấu hình trong ~/.ssh/config:

Host github.com HostName github.com User git IdentityFile ~/.ssh/my_custom_private_key

Luôn đảm bảo rằng quyền truy cập vào tệp Private Key chỉ thuộc về người dùng của bạn (thường là chmod 600 ~/.ssh/id_ed25519 trên Linux/macOS).

So sánh thuật toán tạo SSH Key: Ed25519 và RSA

Việc lựa chọn thuật toán tạo khóa phù hợp ảnh hưởng đến hiệu suất và mức độ bảo mật của bạn. Dưới đây là so sánh chi tiết:

Tiêu chí Ed25519 RSA
Bảo mật Cung cấp mức độ bảo mật tương đương với khóa RSA có độ dài lớn hơn (ví dụ: 3072-bit hoặc 4096-bit), nhưng với kích thước khóa nhỏ hơn. Được đánh giá là an toàn hơn trước các tấn công giả định trong tương lai. Đã được kiểm chứng qua thời gian, nhưng yêu cầu độ dài khóa lớn hơn (khuyến nghị 4096-bit) để đạt mức độ bảo mật tương đương Ed25519. Các phiên bản cũ hơn hoặc độ dài ngắn có thể không an toàn.
Hiệu năng Tạo khóa và xác thực nhanh hơn đáng kể so với RSA. Kích thước khóa nhỏ hơn giúp truyền tải dữ liệu nhanh hơn. Chậm hơn, đặc biệt với các khóa có độ dài lớn.
Kích thước khóa Nhỏ hơn (ví dụ: 256-bit). Lớn hơn, yêu cầu độ dài lớn để đảm bảo an toàn (ví dụ: 2048-bit, 4096-bit).
Tương thích Ngày càng phổ biến, nhưng có thể chưa được hỗ trợ bởi các hệ thống hoặc phần mềm cũ. Rất cao, được hỗ trợ bởi hầu hết các hệ thống và phần mềm SSH cũ và mới.
Sử dụng khuyến nghị Ưu tiên sử dụng cho các ứng dụng mới, nơi hiệu năng và bảo mật là yếu tố then chốt. Phù hợp cho ssh keygen github và các dịch vụ hiện đại. Vẫn là lựa chọn tốt nếu cần sự tương thích rộng rãi hoặc khi làm việc với các hệ thống legacy. Dùng cho ssh keygen rsa nếu yêu cầu cụ thể.

Các phần mềm SSH Client phổ biến

Ngoài OpenSSH tích hợp sẵn trên Linux/macOS, có nhiều phần mềm SSH Client khác mà bạn có thể sử dụng:

  • PuTTY: Một trình giả lập terminal miễn phí và mã nguồn mở phổ biến cho Windows. Cung cấp công cụ PuTTYgen để tạo khóa SSH.
  • Termius: Một ứng dụng SSH client đa nền tảng (Windows, macOS, Linux, iOS, Android) với giao diện hiện đại và khả năng đồng bộ hóa.
  • Bitvise SSH Client: Một client SSH mạnh mẽ cho Windows, cung cấp nhiều tính năng như SFTP, quản lý khóa.
  • MobaXterm: Một công cụ đa năng cho người dùng Windows, tích hợp SSH client, SFTP, X server và nhiều tiện ích khác.
  • SecureCRT: Một giải pháp thương mại cung cấp nhiều tính năng nâng cao cho quản trị mạng chuyên nghiệp.

Troubleshooting các lỗi SSH phổ biến

Trong quá trình sử dụng SSH Key, bạn có thể gặp phải một số lỗi thường gặp. Dưới đây là một số cách khắc phục:

  • Permission denied (publickey): Lỗi này thường xảy ra do Public Key chưa được cài đặt đúng trên máy chủ, hoặc Private Key trên máy khách không được nhận diện. Hãy kiểm tra lại các bước cấu hình Public Key và quyền truy cập của Private Key.
  • Host key verification failed: Cảnh báo này xuất hiện khi khóa máy chủ (host key) của máy chủ mà bạn đang kết nối đã thay đổi. Điều này có thể do máy chủ được cài đặt lại hoặc bạn đang kết nối đến một máy chủ giả mạo. Hãy xóa khóa cũ khỏi tệp ~/.ssh/known_hosts nếu bạn chắc chắn mình đang kết nối đến đúng máy chủ.
  • Error: Key already in use: Lỗi này có thể xảy ra khi bạn cố gắng thêm một khóa đã tồn tại vào hệ thống quản lý khóa của dịch vụ (ví dụ: GitHub).
  • Host authenticity warning: Tương tự như Host key verification failed, cảnh báo này cho thấy khóa máy chủ đã thay đổi.

Việc hiểu rõ cách tạo và quản lý SSH Keygen sẽ giúp bạn nâng cao đáng kể khả năng bảo mật cho các kết nối máy chủ, đặc biệt khi làm việc với các nền tảng như GitHub, GitLab và môi trường DevOps.