Trong thế giới quản trị máy chủ, bảo mật luôn là ưu tiên hàng đầu. Việc truy cập và quản lý server từ xa thông qua giao thức SSH là gì (Secure Shell) là một tác vụ quen thuộc, nhưng phương thức xác thực bằng mật khẩu truyền thống lại tiềm ẩn nhiều rủi ro, đặc biệt là các cuộc tấn công dò mật khẩu (brute-force). Để giải quyết triệt để vấn đề này, việc sử dụng khóa SSH đã trở thành một tiêu chuẩn vàng trong ngành. Khóa SSH không chỉ tăng cường bảo mật lên một tầm cao mới mà còn mang lại sự tiện lợi vượt trội. Bài viết này của AZWEB sẽ hướng dẫn bạn chi tiết từng bước cấu hình khóa SSH trên hệ điều hành CentOS 7, giúp bạn bảo vệ máy chủ của mình một cách chuyên nghiệp và hiệu quả nhất.

alt=”Biểu đồ minh họa tầm quan trọng của bảo mật máy chủ” src=””
Giới thiệu về khóa SSH và tầm quan trọng trong bảo mật máy chủ
Giao thức SSH (Secure Shell) là một công cụ không thể thiếu đối với bất kỳ quản trị viên hệ thống nào, cho phép chúng ta truy cập và điều khiển máy chủ từ xa một cách an toàn. Về cơ bản, SSH tạo ra một đường hầm mã hóa giữa máy tính của bạn và máy chủ, đảm bảo mọi dữ liệu truyền đi đều được bảo vệ. Tuy nhiên, phương thức bảo mật phổ biến nhất là dùng mật khẩu lại chính là điểm yếu lớn nhất. Mật khẩu có thể bị đoán mò, bị đánh cắp hoặc đơn giản là quá yếu, mở đường cho các cuộc tấn công brute-force, nơi kẻ xấu thử hàng triệu mật khẩu mỗi giây để xâm nhập hệ thống.
Đây là lúc khóa SSH phát huy tác dụng. Khóa SSH là một cặp khóa mã hóa bao gồm một khóa công khai (public key) và một khóa riêng tư (private key). Khóa công khai được đặt trên máy chủ, trong khi khóa riêng tư được lưu trữ an toàn trên máy tính cá nhân của bạn. Khi bạn kết nối, máy chủ sẽ dùng khóa công khai để “thách đố” máy tính của bạn, và chỉ có khóa riêng tư tương ứng mới có thể giải mã và trả lời đúng. Quá trình này diễn ra tự động và gần như không thể bị bẻ gãy. Việc này giúp loại bỏ hoàn toàn nguy cơ từ mật khẩu yếu và các cuộc tấn công dò mật khẩu.
Trong bài viết này, chúng ta sẽ cùng nhau đi qua các bước cụ thể để thiết lập cơ chế bảo mật mạnh mẽ này trên CentOS 7, bao gồm: tạo cặp khóa trên máy tính cục bộ, sao chép khóa công khai lên máy chủ, và cấu hình để hệ thống chỉ chấp nhận kết nối bằng khóa SSH.
Hướng dẫn tạo cặp khóa SSH trên máy tính cục bộ bằng lệnh ssh-keygen
Bước đầu tiên để chuyển sang xác thực bằng khóa SSH là tạo ra một cặp khóa mã hóa trên chính máy tính mà bạn dùng để truy cập vào máy chủ. Công cụ tiêu chuẩn để thực hiện việc này trên các hệ điều hành dựa trên Linux, macOS hay thậm chí Windows (với WSL hoặc Git Bash) là lệnh ssh-keygen. Lệnh này cực kỳ mạnh mẽ nhưng cũng rất dễ sử dụng.

alt=”Giao diện dòng lệnh khi chạy lệnh ssh-keygen” src=””
Lệnh ssh-keygen và các tham số cơ bản
Để tạo một cặp khóa, bạn chỉ cần mở terminal và gõ lệnh ssh-keygen. Tuy nhiên, để tăng cường bảo mật, chúng ta nên sử dụng thêm một vài tham số. Cú pháp phổ biến và được khuyên dùng nhất hiện nay là:
ssh-keygen -t ed25519 -C "your_email@example.com"
Trong đó:
- -t ed25519: Tham số này chỉ định loại thuật toán mã hóa được sử dụng. ED25519 là một thuật toán mã hóa đường cong elip hiện đại, mang lại hiệu suất cao và mức độ bảo mật vượt trội so với RSA cũ hơn, ngay cả khi so với RSA 4096-bit. Nếu bạn cần tương thích với các hệ thống cũ, có thể sử dụng
rsavới độ dài khóa 4096 bit (-b 4096). - -C “your_email@example.com”: Đây là một ghi chú (comment) được thêm vào cuối khóa công khai. Việc sử dụng email hoặc một định danh nào đó giúp bạn dễ dàng nhận biết khóa này thuộc về ai hoặc dùng cho mục đích gì khi quản lý nhiều khóa trên một máy chủ.
Sau khi chạy lệnh, hệ thống sẽ hỏi bạn vị trí lưu khóa và đặt passphrase.
Lưu trữ và bảo vệ khóa riêng tư
Khi bạn chạy lệnh ssh-keygen, hệ thống sẽ yêu cầu bạn chọn nơi lưu trữ cặp khóa. Nếu bạn không nhập gì và nhấn Enter, nó sẽ tự động lưu vào vị trí mặc định là ~/.ssh/. Hai tệp tin sẽ được tạo ra:
- id_ed25519: Đây là khóa riêng tư (private key). Tệp tin này phải được giữ bí mật tuyệt đối. Bất kỳ ai có được tệp tin này đều có thể truy cập vào máy chủ của bạn.
- id_ed25519.pub: Đây là khóa công khai (public key). Tệp tin này an toàn để chia sẻ và sẽ được sao chép lên máy chủ CentOS 7.
Tiếp theo, hệ thống sẽ hỏi bạn: “Enter passphrase (empty for no passphrase):”. Đây là một bước cực kỳ quan trọng. Passphrase là một lớp bảo mật thứ hai cho khóa riêng tư của bạn. Nếu chẳng may khóa riêng tư bị lộ, kẻ tấn công vẫn cần phải có passphrase này để sử dụng nó. Bạn nên đặt một passphrase đủ mạnh và ghi nhớ nó. Mỗi khi sử dụng khóa SSH để đăng nhập, bạn sẽ cần nhập passphrase này.

alt=”Cấu trúc thư mục .ssh chứa khóa công khai và khóa riêng tư” src=””
Sao chép khóa công khai lên máy chủ CentOS 7 bằng ssh-copy-id
Sau khi đã tạo thành công cặp khóa SSH trên máy tính cục bộ, bước tiếp theo là đưa khóa công khai (public key) lên máy chủ CentOS 7. Có nhiều cách để làm điều này, nhưng phương pháp đơn giản, nhanh chóng và an toàn nhất là sử dụng tiện ích ssh-copy-id. Công cụ này được thiết kế đặc biệt cho mục đích này, giúp tự động sao chép khóa và thiết lập quyền truy cập chính xác trên máy chủ.
Sử dụng lệnh ssh-copy-id để truyền khóa công khai
Để sử dụng ssh-copy-id, bạn chỉ cần mở terminal trên máy tính cục bộ và thực hiện lệnh với cú pháp sau:
ssh-copy-id username@server_ip_address
Trong đó, username là tên người dùng của bạn trên máy chủ CentOS 7 và server_ip_address là địa chỉ IP của máy chủ. Nếu bạn đã tạo khóa với tên tệp hoặc thuật toán khác mặc định, bạn có thể chỉ định đường dẫn đến khóa công khai bằng tham số -i, ví dụ: ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip_address.
Lệnh này sẽ yêu cầu bạn nhập mật khẩu của người dùng trên máy chủ lần cuối cùng. Sau khi xác thực thành công, ssh-copy-id sẽ tự động kết nối đến máy chủ, tìm tệp ~/.ssh/authorized_keys, và nối nội dung của khóa công khai từ máy bạn vào tệp đó. Nếu thư mục .ssh hoặc tệp authorized_keys chưa tồn tại, nó sẽ tự tạo chúng với quyền truy cập phù hợp.

alt=”Kết quả thành công sau khi chạy lệnh ssh-copy-id” src=””
Cấu hình quyền truy cập và kiểm tra kết nối SSH
Một trong những lý do khiến ssh-copy-id được ưa chuộng là nó tự động xử lý việc cấp quyền. Tuy nhiên, việc hiểu và kiểm tra lại các quyền này là rất quan trọng để đảm bảo an ninh. SSH yêu cầu các quyền rất nghiêm ngặt cho thư mục và tệp tin của nó. Nếu quyền quá “mở”, SSH sẽ từ chối kết nối để bảo vệ bạn.
Trên máy chủ CentOS 7, hãy đảm bảo các quyền sau được thiết lập chính xác:
- Thư mục
.sshcủa người dùng phải có quyền là700(chỉ chủ sở hữu mới có quyền đọc, ghi và thực thi):chmod 700 ~/.ssh - Tệp
authorized_keysphải có quyền là600(chỉ chủ sở hữu mới có quyền đọc và ghi):chmod 600 ~/.ssh/authorized_keys
Bây giờ là lúc kiểm tra thành quả. Từ máy tính cục bộ, hãy thử kết nối lại vào máy chủ:
ssh username@server_ip_address
Nếu mọi thứ được cấu hình đúng, bạn sẽ đăng nhập thẳng vào máy chủ mà không cần nhập mật khẩu. Nếu bạn đã đặt passphrase cho khóa riêng tư, bạn sẽ được yêu cầu nhập passphrase đó. Đây là dấu hiệu cho thấy việc xác thực bằng khóa SSH đã thành công!
Lợi ích khi sử dụng khóa SSH thay vì mật khẩu truyền thống
Việc chuyển đổi từ xác thực bằng mật khẩu sang khóa SSH không chỉ là một thay đổi kỹ thuật, mà là một bước nhảy vọt về mặt bảo mật và hiệu quả quản trị. Những lợi ích mà nó mang lại là vô cùng rõ ràng và có tác động lớn đến sự an toàn cũng như quy trình làm việc của bạn.
Đầu tiên và quan trọng nhất, khóa SSH giúp tăng cường tính an toàn một cách đáng kể. Các cặp khóa SSH sử dụng thuật toán mã hóa phức tạp, tạo ra những chuỗi ký tự dài gần như không thể bị bẻ gãy bằng các phương pháp thông thường. Điều này giúp vô hiệu hóa hoàn toàn các cuộc tấn công brute-force. Kẻ tấn công không còn có thể thử hàng triệu mật khẩu mỗi giây để xâm nhập, vì đơn giản là không có mật khẩu để đoán. Máy chủ của bạn sẽ trở nên miễn nhiễm với một trong những hình thức tấn công phổ biến nhất hiện nay.
alt=”So sánh mức độ bảo mật giữa mật khẩu và khóa SSH” src=””
Thứ hai, khóa SSH giúp hạn chế rủi ro từ việc đăng nhập trái phép do mật khẩu yếu hoặc bị rò rỉ. Trong thực tế, nhiều người dùng có thói quen đặt mật khẩu đơn giản, dễ nhớ hoặc tái sử dụng mật khẩu trên nhiều dịch vụ. Nếu một trong những dịch vụ đó bị rò rỉ dữ liệu, tài khoản máy chủ của bạn cũng sẽ gặp nguy hiểm. Bằng cách loại bỏ hoàn toàn việc sử dụng mật khẩu để đăng nhập SSH, bạn đã đóng lại một lỗ hổng bảo mật nghiêm trọng.
Cuối cùng, khóa SSH mang lại sự tiện lợi vượt trội, đặc biệt trong các hệ thống quản lý nhiều máy chủ hoặc khi cần tự động hóa các tác vụ. Thay vì phải nhập mật khẩu mỗi lần kết nối hoặc lưu trữ mật khẩu trong các kịch bản (script) một cách không an toàn, bạn có thể cấu hình để các công cụ tự động hóa (như Ansible, Jenkins) sử dụng khóa SSH để kết nối và thực thi lệnh trên hàng loạt máy chủ một cách nhanh chóng và bảo mật. Điều này không chỉ tiết kiệm thời gian mà còn giúp xây dựng một quy trình làm việc chuyên nghiệp và an toàn hơn.
Các lưu ý và mẹo tăng cường bảo mật khi sử dụng SSH trên CentOS 7
Cấu hình khóa SSH là một bước tiến lớn, nhưng để đạt được mức độ bảo mật tối đa, bạn nên kết hợp nó với các biện pháp tăng cường khác. Dưới đây là những lưu ý và mẹo quan trọng giúp bạn “gia cố” thêm cho dịch vụ SSH trên máy chủ CentOS 7 của mình.
Vô hiệu hóa xác thực mật khẩu trong file sshd_config
Sau khi đã cấu hình và kiểm tra thành công việc đăng nhập bằng khóa SSH, bước tiếp theo và quan trọng nhất là tắt hoàn toàn chức năng đăng nhập bằng mật khẩu. Điều này đảm bảo rằng chỉ những ai có khóa riêng tư hợp lệ mới có thể truy cập. Bạn cần chỉnh sửa tệp cấu hình SSH daemon:
sudo nano /etc/ssh/sshd_config
Tìm đến dòng PasswordAuthentication yes và đổi nó thành PasswordAuthentication no. Sau đó, lưu tệp và khởi động lại dịch vụ SSH để áp dụng thay đổi: sudo systemctl restart sshd.

alt=”Chỉnh sửa file sshd_config để vô hiệu hóa xác thực mật khẩu” src=””
Sử dụng tường lửa (firewalld) để giới hạn IP truy cập SSH
Tường lửa là lớp phòng thủ đầu tiên của máy chủ. Trên CentOS 7, firewalld là công cụ quản lý tường lửa mặc định. Bạn nên cấu hình nó để chỉ cho phép các địa chỉ IP đáng tin cậy (ví dụ: IP văn phòng, IP nhà của bạn) được phép kết nối đến cổng SSH. Điều này giúp ngăn chặn các kết nối trái phép ngay từ vòng ngoài.
Thay đổi cổng SSH mặc định để tránh quét tự động
Cổng mặc định của SSH là 22. Hầu hết các bot quét tự động trên internet đều nhắm vào cổng này. Bằng cách thay đổi cổng SSH sang một cổng khác (ví dụ: 2222), bạn có thể giảm đáng kể lượng “tiếng ồn” từ các cuộc tấn công tự động. Để thay đổi, bạn chỉnh sửa dòng Port 22 trong tệp /etc/ssh/sshd_config thành Port 2222 và đừng quên mở cổng mới trên tường lửa trước khi khởi động lại dịch vụ SSH.
Định kỳ kiểm tra và quản lý authorized_keys hợp lý
Tệp authorized_keys chứa danh sách tất cả các khóa công khai được phép truy cập. Bạn nên định kỳ rà soát tệp này để loại bỏ các khóa không còn sử dụng hoặc không còn tin cậy (ví dụ: khóa của nhân viên đã nghỉ việc). Việc giữ cho danh sách này luôn sạch sẽ và cập nhật là một phần quan trọng của việc duy trì an ninh hệ thống.
Các vấn đề thường gặp và cách khắc phục
Mặc dù quá trình cấu hình khóa SSH khá đơn giản, đôi khi bạn vẫn có thể gặp phải một số lỗi không mong muốn. Dưới đây là hai vấn đề phổ biến nhất cùng với cách chẩn đoán và khắc phục chi tiết để giúp bạn nhanh chóng giải quyết sự cố.
SSH từ chối kết nối sau khi cấu hình khóa
Đây là lỗi phổ biến nhất. Bạn đã sao chép khóa công khai lên máy chủ, nhưng khi cố gắng kết nối, máy chủ vẫn yêu cầu mật khẩu hoặc báo lỗi “Permission denied (publickey)”. Nguyên nhân chính thường nằm ở quyền truy cập (permissions) của các tệp và thư mục trên máy chủ.
- Nguyên nhân: Dịch vụ SSH trên máy chủ có cơ chế bảo mật rất nghiêm ngặt. Nó sẽ không chấp nhận khóa nếu thư mục
~/.sshhoặc tệp~/.ssh/authorized_keyscó quyền truy cập quá rộng. Ví dụ, nếu các user khác hoặc group có quyền ghi vào các tệp này, SSH sẽ cho rằng chúng không an toàn và từ chối sử dụng. - Cách khắc phục: Kết nối vào máy chủ bằng mật khẩu (nếu bạn chưa vô hiệu hóa) và chạy lại các lệnh sau để đảm bảo quyền truy cập chính xác:
chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys
Ngoài ra, hãy kiểm tra quyền sở hữu của thư mục và tệp tin này bằng lệnh ls -ld ~/.ssh và ls -l ~/.ssh/authorized_keys. Chúng phải thuộc về đúng người dùng mà bạn đang cố gắng đăng nhập.

alt=”Kiểm tra quyền truy cập của thư mục .ssh và file authorized_keys” src=””
Lỗi phân quyền và truy cập khóa riêng tư
Một vấn đề khác có thể xảy ra ở phía máy tính cục bộ (client) của bạn. Nếu tệp khóa riêng tư (id_ed25519 hoặc id_rsa) có quyền truy cập không an toàn, client SSH sẽ từ chối sử dụng nó.
- Tác động: Bạn có thể nhận được một cảnh báo như “Permissions 0644 for ‘/home/user/.ssh/id_ed25519’ are too open.” Điều này có nghĩa là tệp khóa riêng tư của bạn có thể bị đọc bởi những người dùng khác trên cùng máy tính, đây là một rủi ro bảo mật nghiêm trọng.
- Hướng dẫn điều chỉnh: Để khắc phục, bạn chỉ cần điều chỉnh lại quyền của tệp khóa riêng tư trên máy tính của mình. Mở terminal và chạy lệnh:
chmod 600 ~/.ssh/id_ed25519
Lệnh này đảm bảo rằng chỉ duy nhất bạn (chủ sở hữu tệp) mới có quyền đọc và ghi tệp khóa riêng tư, đáp ứng yêu cầu bảo mật của client SSH.
Best Practices
Để đảm bảo hệ thống của bạn không chỉ an toàn mà còn dễ quản lý trong dài hạn, việc tuân thủ các thực tiễn tốt nhất (best practices) khi sử dụng khóa SSH là vô cùng cần thiết. Dưới đây là danh sách những nguyên tắc vàng bạn nên áp dụng.
- Luôn đặt passphrase cho khóa SSH riêng tư: Đây là lớp bảo vệ cuối cùng. Nếu máy tính của bạn bị xâm nhập và khóa riêng tư bị đánh cắp, passphrase sẽ ngăn kẻ tấn công sử dụng nó ngay lập tức, cho bạn thời gian để thu hồi khóa trên các máy chủ.
- Sao lưu khóa SSH một cách an toàn: Hãy sao lưu cả khóa riêng tư và khóa công khai của bạn vào một nơi an toàn, chẳng hạn như một chiếc USB được mã hóa hoặc một trình quản lý mật khẩu. Mất khóa riêng tư đồng nghĩa với việc mất quyền truy cập vào máy chủ.
- Giới hạn truy cập SSH theo IP hoặc mạng đáng tin cậy: Sử dụng tường lửa của máy chủ (như firewalld trên CentOS 7) để chỉ cho phép các kết nối SSH đến từ các địa chỉ IP mà bạn tin tưởng. Đây là một biện pháp phòng thủ hiệu quả chống lại các cuộc tấn công từ bên ngoài.
- Định kỳ rà soát và xóa khóa SSH không còn sử dụng: Thường xuyên kiểm tra tệp
~/.ssh/authorized_keystrên các máy chủ của bạn. Xóa bỏ bất kỳ khóa nào thuộc về nhân viên cũ, các hệ thống tự động hóa không còn hoạt động, hoặc bất kỳ khóa nào bạn không nhận ra. - Không chia sẻ khóa riêng tư, chỉ dùng khóa công khai trên server: Nguyên tắc bất di bất dịch là khóa riêng tư không bao giờ được rời khỏi máy tính của bạn. Khi cần cấp quyền truy cập cho một người hoặc một dịch vụ mới, hãy yêu cầu họ cung cấp khóa công khai của riêng họ và thêm nó vào tệp
authorized_keys.

alt=”Sơ đồ mô tả các best practices khi sử dụng khóa SSH” src=””
Kết luận
Qua bài viết này, chúng ta đã cùng nhau tìm hiểu chi tiết về quy trình cấu hình khóa SSH trên CentOS 7, từ việc tạo cặp khóa, sao chép lên máy chủ, cho đến các biện pháp tăng cường bảo mật nâng cao. Việc chuyển đổi từ xác thực bằng mật khẩu sang khóa SSH không chỉ là một khuyến nghị mà còn là một yêu cầu tất yếu để bảo vệ máy chủ trước các mối đe dọa ngày càng tinh vi. Lợi ích mà nó mang lại là vô cùng to lớn: tăng cường bảo mật tối đa, loại bỏ nguy cơ tấn công brute-force, và tối ưu hóa quy trình làm việc tự động.
Bằng cách tuân thủ các bước đã hướng dẫn và áp dụng các thực tiễn tốt nhất, bạn đã xây dựng một hàng rào bảo vệ vững chắc cho tài sản kỹ thuật số của mình. AZWEB hy vọng rằng bài hướng dẫn này sẽ giúp bạn tự tin hơn trong việc quản trị và bảo mật hệ thống máy chủ. Đừng dừng lại ở đây, hãy tiếp tục tìm hiểu sâu hơn về việc cấu hình tường lửa và các cơ chế bảo mật nâng cao khác cho SSH để trở thành một quản trị viên hệ thống chuyên nghiệp và hiệu quả.