Chuyển đến nội dung chính

Giải thích SSH Keys: Hướng dẫn truy cập từ xa nhanh và an toàn

Hướng dẫn đầy đủ này chỉ cho bạn cách thiết lập, sử dụng và quản lý SSH key để truy cập từ xa nhanh hơn và an toàn hơn tới mọi hệ thống.
· 15 phút đọc

Khám phá cùng AI

Bạn mệt mỏi vì phải gõ mật khẩu mỗi lần kết nối tới máy chủ từ xa hoặc kho GitHub?

SSH key chính là thứ bạn cần. Đây là lựa chọn thay thế an toàn và tiện lợi cho xác thực bằng mật khẩu khi bạn muốn truy cập hệ thống từ xa. SSH key cũng cung cấp mức bảo mật mạnh hơn vì gần như không thể bị bẻ khóa bằng tấn công vét cạn.

Theo thời gian, chúng đã trở thành tiêu chuẩn cho kết nối từ xa an toàn trong môi trường chuyên nghiệp. Chúng là công cụ thiết yếu cho bất kỳ ai làm việc với máy chủ từ xa, dịch vụ đám mây hoặc hệ thống quản lý phiên bản như Git.

Trong bài viết này, bạn sẽ học cách tạo SSH key, thêm chúng vào các hệ thống từ xa và áp dụng các thực tiễn tốt nhất để quản lý chúng một cách an toàn.

SSH Keys là gì?

SSH key là thông tin xác thực mật mã cho phép bạn truy cập hệ thống từ xa một cách an toàn mà không cần gõ mật khẩu. Thay vì phải ghi nhớ mật khẩu phức tạp với số, chữ in hoa và ký tự đặc biệt, bạn tạo một cặp khóa – một khóa công khai và một khóa riêng.

Hãy hình dung khóa công khai như một ổ khóa bạn có thể tự do phân phối cho bất kỳ máy chủ nào muốn truy cập. Khóa riêng hoạt động như chiếc chìa duy nhất để mở những ổ khóa đó. Khi bạn kết nối tới hệ thống từ xa, hệ thống sẽ kiểm tra xem khóa riêng của bạn có khớp với khóa công khai đã lưu hay không. Nếu khớp, bạn được truy cập ngay mà không cần nhập mật khẩu.

Không thể dùng khóa công khai để suy ra khóa riêng, điều này làm cho hệ thống cực kỳ an toàn. Khóa riêng của bạn phải được giữ bí mật và lưu trên máy tính của bạn, vì vậy đừng bao giờ chia sẻ nó với ai.

> Để hiểu sâu hơn cách các kết nối an toàn nằm trong bức tranh tổng thể về an ninh mạng, hãy khám phá khóa Introduction to Data Security.

Về lợi ích so với xác thực bằng mật khẩu truyền thống, đây là những điểm bạn nên biết:

  • Bảo mật tăng cường – Không giống mật khẩu, SSH key không thể đoán hay vét cạn do độ dài và độ phức tạp (thường từ 2048 bit trở lên).
  • Tiện lợi hơn – Sau khi thiết lập, bạn có thể kết nối máy chủ mà không cần gõ mật khẩu mỗi lần.
  • Thân thiện với tự động hóa – Lý tưởng cho script và quy trình tự động cần xác thực an toàn.
  • Quản lý truy cập tập trung – Thêm hoặc thu hồi quyền truy cập chỉ bằng cách quản lý khóa công khai trên máy chủ.
  • Không còn mệt mỏi vì mật khẩu – Bạn không cần tạo, ghi nhớ hay định kỳ thay đổi mật khẩu phức tạp.

SSH key hoạt động với hầu như mọi hệ thống hỗ trợ SSH, bao gồm máy chủ Linux, nền tảng đám mây và kho mã như GitHub, GitLab. Chúng đã trở thành tiêu chuẩn cho truy cập từ xa an toàn trong môi trường chuyên nghiệp.

> Với các chuyên gia đám mây, làm chủ cả bảo mật và hiệu quả chi phí là then chốt—tìm hiểu thêm trong khóa AWS Security and Cost Management.

Giờ bạn đã biết SSH key là gì, tiếp theo bạn sẽ học cách tạo chúng.

Cách tạo SSH Keys

Tạo SSH key chỉ mất vài phút, bất kể hệ điều hành của bạn. 

Quy trình sẽ tạo hai tệp: khóa riêng của bạn (phải được giữ an toàn trên máy) và khóa công khai (bạn sẽ thêm vào máy chủ từ xa).

Tạo SSH key trên Linux/MacOS

Để tạo SSH key trên Linux hoặc MacOS, bạn sẽ dùng lệnh tích hợp ssh-keygen. Bắt đầu bằng cách mở terminal và gõ:

ssh-keygen -t rsa -b 4096 -C "[email protected]"

Lệnh này yêu cầu hệ thống tạo khóa RSA mới với mã hóa 4096 bit (rất an toàn) và thêm email của bạn làm ghi chú nhận diện.

Hệ thống sẽ hỏi nơi lưu khóa và có thêm passphrase không. Vị trí mặc định phù hợp với hầu hết người dùng, nhưng passphrase rất đáng cân nhắc. 

Một passphrase tốt bổ sung lớp bảo vệ bổ sung - ngay cả khi ai đó có được tệp khóa riêng của bạn, họ cũng không thể dùng nếu không biết cụm này.

Hình 1 - Tạo cặp SSH key trên Linux/macOS

Hình 1 - Tạo cặp SSH key trên Linux/macOS

Sau khi xác nhận lựa chọn, hệ thống sẽ tạo cả hai khóa trong thư mục .ssh của thư mục home:

  • Khóa riêng: Tệp không có phần mở rộng (ví dụ id_rsa).
  • Khóa công khai: Tệp có phần mở rộng .pub (ví dụ id_rsa.pub).

Hình 2 - Các tệp khóa đã tạo

Hình 2 - Các tệp khóa đã tạo

Tạo SSH key trên Windows

Người dùng Windows có vài lựa chọn tốt để tạo SSH key - Git Bash và WSL.

Git Bash mang lại trải nghiệm dòng lệnh tương tự Linux/MacOS. Nếu bạn cài Git for Windows, bạn đã có công cụ này. Mở Git Bash và dùng cùng lệnh ssh-keygen như trên.

Windows Subsystem for Linux (WSL) là lựa chọn tốt khác nếu bạn thích làm việc trong môi trường Linux trên máy Windows. Các lệnh hoạt động hoàn toàn giống như trên Linux thuần.

Với những ai thích giao diện đồ họace, PuTTYgen cung cấp cách tiếp cận trực quan hơn.

Hình 3 - Tạo khóa bằng PuTTYgen trên Windows

Hình 3 - Tạo khóa bằng PuTTYgen trên Windows

Các bước bạn cần thực hiện để tạo cặp khóa:

  1. Mở PuTTYgen từ menu Start.
  2. Chọn RSA làm loại khóa.
  3. Nhấp "Generate" và di chuyển chuột trong vùng trống.
  4. Thêm passphrase để tăng bảo mật.
  5. Lưu cả khóa công khai và khóa riêng bằng các nút chuyên dụng.

Hình 4 - Các tệp khóa đã tạo (2)

Hình 4 - Các tệp khóa đã tạo (2)

Hiểu về các tệp khóa

Quá trình tạo SSH key sinh ra hai tệp làm việc theo cặp.

Khóa riêng của bạn phải luôn bí mật và an toàn trên máy tính. Hãy xem nó như chìa khóa tổng chứng minh danh tính của bạn. Tên khóa riêng thường như sau:

  • id_ed25519 (cho khóa Ed25519).
  • id_rsa (cho khóa RSA).

Khóa công khai của bạn có thể chia sẻ tự do với bất kỳ hệ thống nào bạn muốn truy cập. Nó hoạt động như ổ khóa chỉ có khóa riêng của bạn mở được. Các khóa công khai luôn có cùng tên với khóa riêng tương ứng và thêm phần mở rộng .pub.

Bảo mật của hệ thống này phụ thuộc hoàn toàn vào việc bảo vệ khóa riêng của bạn.

Không bao giờ chia sẻ, gửi email hay lưu trữ nó trên thiết bị không tin cậy. Nếu bạn nghi ngờ khóa riêng bị lộ, hãy tạo cặp khóa mới ngay lập tức và cập nhật tất cả máy chủ đang dùng khóa công khai cũ.

Bạn có thể xem nội dung khóa công khai bằng:

cat ~/.ssh/id_rsa.pub

Hình 5 - Nội dung khóa công khai

Hình 5 - Nội dung khóa công khai

Kết quả hiển thị toàn bộ chuỗi bạn sẽ cần khi cấu hình máy chủ từ xa, chúng ta sẽ xem ở phần tiếp theo.

Cách thêm SSH Keys vào hệ thống từ xa

Sau khi tạo cặp SSH key, bạn cần thêm khóa công khai vào từng hệ thống từ xa muốn truy cập. Nói đơn giản, quá trình này cho máy chủ từ xa biết rằng khóa riêng của bạn là hình thức xác thực hợp lệ.

Thêm khóa công khai vào máy chủ từ xa

Quy trình này không phức tạp; bạn chỉ cần thêm khóa công khai vào một tệp đặc biệt trên máy chủ từ xa. Tệp này, gọi là authorized_keys, chứa danh sách các khóa công khai được phép kết nối.

Cách đơn giản nhất để thêm khóa là dùng lệnh ssh-copy-id:

ssh-copy-id username@remote_host

Lệnh này kết nối tới máy chủ từ xa, tạo thư mục cần thiết nếu chưa có và thêm khóa công khai của bạn vào tệp authorized_keys. Bạn sẽ cần nhập mật khẩu một lần cuối trong quá trình này.

Hình 6 - Nội dung tệp authorized_keys

Hình 6 - Nội dung tệp authorized_keys

Nếu hệ thống của bạn không có lệnh ssh-copy-id, bạn có thể thực hiện thủ công, nhưng gồm vài bước.

Làm theo các hướng dẫn sau và chạy từng lệnh một:

# Hiển thị khóa công khai của bạn và sao chép nó
cat ~/.ssh/id_rsa.pub

# Kết nối tới máy chủ từ xa bằng xác thực mật khẩu
ssh username@remote_host

# Tạo thư mục .ssh nếu chưa tồn tại
mkdir -p ~/.ssh

# Mở hoặc tạo tệp authorized_keys và dán khóa công khai của bạn
echo "your_copied_public_key" >> ~/.ssh/authorized_keys

Vậy là xong!

Với các máy chủ mà bạn cần cung cấp khóa cho quản trị viên hệ thống, chỉ cần gửi nội dung tệp khóa công khai. Họ sẽ thêm vào máy chủ cho bạn.

Cấu hình SSH cho xác thực bằng khóa

Sau khi thêm khóa công khai, bạn có thể muốn cấu hình máy chủ SSH để tăng cường bảo mật. Các bước này yêu cầu quyền quản trị (sudo).

Để chỉnh cấu hình máy chủ SSH, mở tệp cấu hình chính:

sudo nano /etc/ssh/sshd_config

Hình 7 - Nội dung tệp sshd_config

Hình 7 - Nội dung tệp sshd_config

Trong tệp này, bạn có thể thực hiện vài cải thiện bảo mật:

  • Đặt PasswordAuthentication no để vô hiệu hóa hoàn toàn đăng nhập bằng mật khẩu.
  • Đảm bảo PubkeyAuthentication yes được bật (thường mặc định bật).
  • Cân nhắc đặt PermitRootLogin prohibit-password để ngăn root đăng nhập bằng mật khẩu.

Sau khi thay đổi, nhớ khởi động lại dịch vụ SSH để áp dụng:

sudo systemctl restart sshd

Cũng cần lưu ý rằng quyền tệp đúng là tối quan trọng để xác thực bằng SSH key hoạt động. Máy chủ SSH rất khắt khe về bảo mật và sẽ từ chối kết nối nếu quyền quá mở. Hãy đảm bảo các tệp có quyền như sau:

  • Thư mục home của bạn: chmod 755 ~.
  • Thư mục .ssh: chmod 700 ~/.ssh.
  • Tệp authorized_keys: chmod 600 ~/.ssh/authorized_keys.

Với khóa công khai đã sẵn sàng và máy chủ cấu hình đúng, giờ bạn có thể kết nối tới máy chủ từ xa mà không cần nhập mật khẩu. 

Ở phần tiếp theo, tôi sẽ chỉ bạn cách dùng SSH key để xác thực.

Cách sử dụng SSH Keys để xác thực

Giờ bạn đã sẵn sàng tận hưởng sự tiện lợi và an toàn của xác thực không cần mật khẩu. Hãy xem cách kết nối tới máy chủ và kho mã bằng SSH key.

Kết nối tới máy chủ từ xa bằng xác thực SSH key

Kết nối tới máy chủ bằng SSH key hoạt động y như SSH thông thường, chỉ khác là không có nhắc mật khẩu. Mở terminal và dùng lệnh SSH tiêu chuẩn:

ssh username@hostname

Nếu bạn lưu khóa ở vị trí mặc định (~/.ssh/id_rsa), SSH sẽ tự động tìm và dùng nó. Nếu bạn đặt passphrase khi tạo khóa, bạn sẽ cần nhập, nhưng chỉ một lần cho mỗi phiên.

Với khóa lưu ở vị trí không tiêu chuẩn, hãy chỉ định đường dẫn bằng cờ -i:

ssh -i ~/path/to/your/private_key username@hostname

Hình 8 - Kết nối tới máy chủ từ xa qua SSH

Hình 8 - Kết nối tới máy chủ từ xa qua SSH

Việc gõ passphrase mỗi lần kết nối có thể khá phiền. Đây là lúc SSH agent phát huy tác dụng. Chúng chạy nền và giữ an toàn khóa riêng đã giải mã trong bộ nhớ, vì vậy bạn chỉ cần nhập passphrase một lần.

Để khởi động SSH agent và thêm khóa của bạn:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

Hình 9 - SSH agent

Hình 9 - SSH agent

Bạn sẽ nhập passphrase một lần, và agent sẽ xử lý xác thực cho mọi kết nối tiếp theo trong phiên làm việc. Điều này hữu ích khi bạn cần kết nối nhiều lần hoặc khi dùng ứng dụng tạo nhiều kết nối SSH.

Trên macOS, SSH agent khởi động tự động, và bạn có thể bật "ghi nhớ passphrase trong keychain" ở lần kết nối đầu để tránh nhập lại trong các phiên sau. Tiếc là tính năng này chỉ có trên macOS.

Dùng SSH key để xác thực GitHub/GitLab

Các dịch vụ như GitHub và GitLab cũng hỗ trợ xác thực bằng SSH key, và họ khuyến nghị dùng thay cho xác thực bằng mật khẩu.

Để thêm SSH key vào GitHub, bắt đầu bằng cách mở GitHub và đăng nhập tài khoản. Sau đó, nhấp ảnh hồ sơ ở góc trên bên phải và chọn "Settings". Trong thanh bên, nhấp "SSH and GPG keys":

Hình 10 - Thiết lập xác thực GitHub (1)

Hình 10 - Thiết lập xác thực GitHub (1)

Nhấp "New SSH key", đặt tiêu đề mô tả cho khóa, dán khóa công khai vào trường "Key", và cuối cùng nhấp "Add SSH key":

Hình 11 - Thiết lập xác thực GitHub (2)

Hình 11 - Thiết lập xác thực GitHub (2)

Khi hoàn tất, bạn sẽ thấy thông báo thành công cho biết khóa đã được thêm vào tài khoản:

Hình 12 - Thiết lập xác thực GitHub (3)

Hình 12 - Thiết lập xác thực GitHub (3)

Sau khi thêm khóa, bạn có thể clone, pull và push tới kho bằng URL SSH thay cho URL HTTPS. Đây là lệnh bạn sẽ dùng:

git clone [email protected]:username/repository.git

Hình 13 - Cloning một repo qua SSH

Hình 13 - Cloning một repo qua SSH

Chỉ có vậy. Quy trình cho GitLab rất tương tự—chỉ cần tìm SSH Keys trong cài đặt tài khoản của bạn.

Tóm lại, dùng SSH cho các thao tác Git nghĩa là bạn sẽ không cần nhập tên người dùng và mật khẩu mỗi lần tương tác với kho từ xa. SSH key sẽ tự động cung cấp xác thực an toàn.

Nếu bạn làm việc với nhiều dịch vụ (như cả GitHub và GitLab), bạn có thể cân nhắc tạo khóa riêng cho từng dịch vụ. Cách tiếp cận này cải thiện bảo mật bằng cách giảm thiểu rủi ro nếu một khóa bị lộ.

> Để đi sâu hơn vào quản lý kho, hãy xem Intermediate GitHub Concepts.

Quản lý SSH Keys

Khi bạn dùng SSH key trên nhiều hệ thống và dịch vụ, sớm muộn bạn sẽ cần cách để quản lý chúng.

Trong phần này, tôi sẽ chỉ bạn cách theo dõi các khóa hiện có, xóa các khóa cũ hoặc bị lộ, và xử lý sự cố tiềm ẩn.

Xem và liệt kê SSH key

Bạn có thể xem tất cả SSH key bằng cách kiểm tra thư mục .ssh trong thư mục home. Thư mục này chứa cả khóa riêng và khóa công khai tương ứng.

Chạy lệnh sau để liệt kê tất cả tệp trong thư mục SSH của bạn:

ls -la ~/.ssh

Hình 14 - Tất cả tệp trong thư mục .ssh

Hình 14 - Tất cả tệp trong thư mục .ssh

Lệnh này hiển thị mọi tệp trong thư mục, bao gồm cả tệp ẩn. Bạn thường sẽ thấy các tệp như:

  • id_rsa - Khóa RSA riêng của bạn.
  • id_rsa.pub - Khóa RSA công khai của bạn.
  • known_hosts - Danh sách máy chủ bạn đã kết nối.
  • authorized_keys - Các khóa công khai có thể truy cập máy này (nếu được thiết lập như máy chủ).
  • config - Cấu hình client SSH của bạn (nếu bạn đã tạo).

Nếu bạn tạo nhiều khóa cho các dịch vụ khác nhau, bạn sẽ thấy thêm các cặp khóa với tên đã chỉ định khi tạo.

Để kiểm tra nội dung một khóa công khai cụ thể, chạy lệnh sau:

cat ~/.ssh/id_rsa.pub

Hình 15 - Nội dung khóa công khai

Hình 15 - Nội dung khóa công khai

Lệnh này hiển thị toàn bộ khóa công khai, bắt đầu bằng ssh-rsa và kết thúc bằng ghi chú của bạn (thường là địa chỉ email).

Xóa SSH key

Theo thời gian, bạn có thể cần xóa SSH key vì nhiều lý do - có thể bạn nâng cấp sang loại khóa mạnh hơn, bị mất thiết bị hoặc không còn cần truy cập vào một số hệ thống.

Để xóa khóa khỏi máy chủ từ xa, bạn cần chỉnh sửa tệp authorized_keys:

# Kết nối tới máy chủ từ xa
ssh username@remote_host

#  Mở tệp authorized_keys:
nano ~/.ssh/authorized_keys

Với GitHub và GitLab, việc xóa khóa còn đơn giản hơn:

  1. Vào cài đặt tài khoản.
  2. Đi tới mục "SSH and GPG keys".
  3. Tìm khóa bạn muốn xóa.
  4. Nhấp biểu tượng xóa cạnh khóa đó.

Hình 16 - Xác nhận xóa khóa trên GitHub

Hình 16 - Xác nhận xóa khóa trên GitHub

Và cuối cùng, để xóa khóa khỏi máy cục bộ, chỉ cần xóa các tệp:

rm ~/.ssh/id_rsa ~/.ssh/id_rsa.pub

Thay id_rsa bằng tên khóa bạn muốn xóa.

Nếu bạn cần xóa một máy chủ từ xa khỏi tệp known_hosts (thường sau khi máy chủ được cấu hình lại), chạy lệnh này:

ssh-keygen -R hostname

Lệnh này xóa mục của máy chủ chỉ định khỏi tệp known_hosts, hữu ích khi bạn gặp lỗi "host key verification failed".

Xử lý sự cố thường gặp với SSH key

Xác thực bằng SSH key đôi khi có thể thất bại vì nhiều lý do. Phần này tôi sẽ đưa ra các giải pháp cho các vấn đề thường gặp.

  • Vấn đề quyền truy cập. SSH rất nghiêm ngặt về quyền tệp vì lý do bảo mật. Nếu khóa của bạn có quyền không đúng, xác thực sẽ thất bại. Khắc phục bằng:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/authorized_keys
  • Vấn đề passphrase. Nếu bạn quên passphrase, đáng tiếc là không có cách khôi phục. Bạn sẽ cần thực hiện các bước sau:
    • Tạo cặp khóa mới.
    • Thêm khóa công khai mới vào các hệ thống từ xa.
    • Xóa cặp khóa cũ.
  • Bị từ chối kết nối. Nếu gặp lỗi "Connection refused", có thể do nhiều nguyên nhân. Hãy làm theo các bước sau để khắc phục:
    • Xác minh máy chủ đang chạy và có thể truy cập.
    • Kiểm tra dịch vụ SSH đang chạy trên máy chủ.
    • Xác nhận bạn dùng đúng cổng (mặc định là 22).
  • Lỗi xác thực. Nếu gặp lỗi "Permission denied (publickey)", hãy thực hiện các bước sau để khắc phục:
    • Đảm bảo khóa công khai được thêm đúng vào tệp authorized_keys trên máy chủ.
    • Kiểm tra máy chủ cho phép xác thực bằng khóa công khai.
    • Xác minh bạn dùng đúng username và hostname.
    • Đảm bảo bạn dùng đúng khóa riêng.
  • Sự cố với agent. Các sự cố có thể phát sinh nếu SSH agent không hoạt động. Hãy làm như sau:
    • Xác nhận agent đang chạy với ssh-add -l.
    • Nếu chưa chạy, khởi động bằng eval "$(ssh-agent -s)".
    • Thêm khóa của bạn với ssh-add ~/.ssh/id_rsa.

Tiếp theo, hãy khám phá một số thực tiễn tốt nhất để quản lý SSH key.

Thực tiễn tốt nhất khi quản lý SSH key

Xác thực SSH rất hữu ích để giữ hệ thống của bạn an toàn khỏi truy cập trái phép, nhưng thẳng thắn mà nói - đôi khi cũng hơi bất tiện. Các mẹo dưới đây nhằm giúp bạn tìm điểm cân bằng giữa bảo mật mạnh mẽ và sự tiện dụng hàng ngày.

Dùng passphrase mạnh cho SSH key

Passphrase cho khóa riêng là tuyến phòng thủ cuối cùng nếu ai đó chiếm được tệp khóa của bạn. Luôn chọn passphrase mạnh và duy nhất, khó đoán nhưng dễ nhớ với bạn.

Một passphrase tốt nên có các đặc điểm sau:

  • Ít nhất 12-15 ký tự.
  • Kết hợp chữ hoa, chữ thường, số và ký tự đặc biệt.
  • Tránh mẫu phổ biến hoặc từ điển.
  • Không dùng lại từ dịch vụ khác.

Với các khóa truy cập hệ thống quan trọng hoặc môi trường production, passphrase mạnh là điều bắt buộc. Sự bất tiện nhỏ khi thỉnh thoảng phải gõ hoàn toàn xứng đáng so với rủi ro bảo mật.

Khi bạn dùng SSH agent, bạn chỉ cần nhập passphrase một lần cho mỗi phiên. Điều này khiến passphrase mạnh trở nên khả thi cho việc dùng hàng ngày. Cân nhắc dùng trình quản lý mật khẩu để lưu trữ an toàn các passphrase phức tạp.

Dùng các khóa khác nhau cho các hệ thống khác nhau

Bạn nên luôn tạo các cặp khóa riêng cho từng dịch vụ hoặc cấp độ bảo mật thay vì dùng một khóa ở mọi nơi. Cách phân vùng này giảm thiểu phơi nhiễm nếu một khóa bị lộ.

Ví dụ, bạn có thể tạo:

  • Một khóa công việc cho máy chủ công ty.
  • Một khóa cá nhân cho dự án tại nhà.
  • Một khóa riêng cho GitHub hoặc GitLab.
  • Một khóa bảo mật cao cho hệ thống production.

Lại là một chút bất tiện, nhưng rất đáng công sức thêm.

Khi tạo nhiều khóa, hãy dùng tên tệp mô tả rõ mục đích:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/github_rsa -C "github access"

Để dùng một khóa cụ thể khi kết nối, bạn có thể thiết lập tệp cấu hình một cách tiện lợi:

# ~/.ssh/config
Host github.com
    IdentityFile ~/.ssh/github_rsa

Host companyserver
    HostName 255.255.255.255
    User ubuntu
    IdentityFile ~/.ssh/company_server_rsa

Cách này đảm bảo nếu một khóa bị lộ, bạn chỉ cần thay thế khóa đó thay vì cập nhật tất cả hệ thống.

Thường xuyên xoay vòng SSH key

Định kỳ thay mới SSH key giúp giảm rủi ro lộ lọt không phát hiện và tuân theo thực tiễn bảo mật tốt. 

Tần suất phụ thuộc vào mức độ nhạy cảm:

  • Dự án cá nhân: Mỗi 1-2 năm.
  • Hệ thống doanh nghiệp: Mỗi 6-12 tháng.
  • Môi trường bảo mật cao: Mỗi 3-6 tháng.
  • Ngay sau khi thành viên rời nhóm hoặc có hoạt động đáng ngờ.

Quy trình xoay vòng SSH key gồm tạo cặp khóa mới, thêm khóa công khai mới vào máy chủ, xác minh khóa mới hoạt động, xóa khóa công khai cũ khỏi máy chủ và xóa khóa riêng cũ khỏi máy cục bộ.

Nói cách khác, sẽ tốn thời gian, nên hãy lên kế hoạch trong lịch làm việc của bạn.

Ngoài ra, nên duy trì bản ghi khóa nào có quyền truy cập hệ thống nào. Với tổ chức, hãy cân nhắc triển khai công cụ quản lý khóa tự động để xoay vòng có hệ thống.

Bắt buộc xác thực bằng SSH key

Biện pháp bảo mật mạnh nhất bạn có thể áp dụng là vô hiệu hóa hoàn toàn xác thực bằng mật khẩu trên máy chủ và yêu cầu SSH key cho mọi kết nối.

Thực hiện các bước sau để bắt buộc xác thực bằng khóa:

# Chỉnh cấu hình máy chủ SSH
sudo nano /etc/ssh/sshd_config

# Đặt các tùy chọn bảo mật quan trọng này
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

# Khởi động lại dịch vụ SSH
sudo systemctl restart sshd

Cấu hình này ngăn chặn hoàn toàn các cuộc tấn công vét cạn mật khẩu. 

Nhưng trước khi thay đổi, hãy đảm bảo xác thực bằng SSH key hoạt động đúng để tránh tự khóa mình ở ngoài. Chuyện này đã từng xảy ra.

Tổng kết về SSH Keys

Kết lại, có thể nói SSH key thay đổi cách bạn kết nối tới hệ thống từ xa. Chuyển từ mật khẩu sang xác thực bằng khóa giúp quy trình làm việc hàng ngày của bạn an toàn hơn và tiện lợi hơn.

Một lợi ích khác là quy trình không quá phức tạp. Bạn cần tạo khóa, thêm chúng vào các máy chủ cần truy cập và kết nối mà không cần gõ mật khẩu. Hết! So với xác thực dựa trên mật khẩu truyền thống, SSH key giúp kết nối nhanh hơn, ổn định hơn và chặn các phương thức tấn công phổ biến như đoán mật khẩu.

Hãy nhớ khóa riêng của bạn cần được bảo vệ. Dùng passphrase mạnh, giữ khóa an toàn và làm theo các thực tiễn tốt nhất trong bài viết này, đặc biệt là về phân tách SSH key. 

Nếu bạn muốn tìm hiểu thêm về SSH key và làm việc với dòng lệnh nói chung, các khóa học sau từ DataCamp là điểm dừng chân tiếp theo tốt nhất:

Câu hỏi thường gặp

SSH key có ưu điểm gì so với mật khẩu?

SSH key mang lại bảo mật mạnh hơn vì không thể bị vét cạn như mật khẩu. Chúng cũng tiện lợi hơn vì bạn không cần gõ mật khẩu cho mỗi kết nối. Ngoài ra, SSH key còn cho phép tự động hóa an toàn cho các script và chương trình cần thiết lập kết nối bảo mật.

Tôi có cần kỹ năng kỹ thuật để thiết lập SSH key không?

Kiến thức cơ bản về dòng lệnh sẽ hữu ích nhưng không bắt buộc. Quá trình thiết lập chỉ liên quan đến vài lệnh đơn giản để tạo khóa và thêm chúng vào hệ thống từ xa. Ngay cả khi bạn mới làm quen với dòng lệnh, bạn có thể làm theo hướng dẫn từng bước trong bài viết để triển khai SSH key thành công.

Tôi có thể dùng SSH key trên mọi hệ điều hành không?

Có. SSH key hoạt động trên Windows, macOS, Linux và các hệ thống dựa trên Unix khác. Tất cả hệ điều hành hiện đại đều tích hợp sẵn công cụ SSH hoặc có thể cài đặt dễ dàng qua gói bổ sung. Cùng một cặp khóa có thể dùng trên các hệ điều hành khác nhau.

Tôi xử lý lỗi "Permission denied (publickey)" như thế nào?

Lỗi thường gặp này thường cho thấy khóa của bạn chưa được đăng ký đúng trên máy chủ. Hãy xác minh khóa công khai được thêm chính xác vào tệp authorized_keys trên hệ thống từ xa, kiểm tra quyền tệp đúng (600 cho khóa riêng), và đảm bảo bạn dùng đúng username và hostname khi kết nối.

Có thể dùng cùng một SSH key cho cả công việc và dự án cá nhân không?

Về mặt kỹ thuật là có thể, nhưng không khuyến nghị vì lý do bảo mật. Dùng các khóa riêng cho những môi trường khác nhau sẽ giảm thiểu rủi ro nếu một khóa bị lộ. Hãy tạo các khóa riêng biệt cho công việc, dự án cá nhân và hệ thống nhạy cảm để duy trì ranh giới bảo mật tốt hơn.

Dario Radečić

Tác giả

Dario Radečić

Chuyên gia Khoa học Dữ liệu Cấp cao, làm việc tại Croatia. Tác giả Công nghệ Hàng đầu với hơn 700 bài viết đã xuất bản, đạt trên 10 triệu lượt xem. Tác giả cuốn sách Tự động hóa Machine Learning với TPOT.

Chủ đề

Liên quan