Một trong các phương thức đăng nhập vào Linux server khá an toàn đó là việc sử dụng SSH Key để thay thế cho mật khẩu. Mặc định mỗi Linux server bạn sẽ đăng nhập vào bằng username root và mật khẩu root , tuy nhiên việc sử dụng mật khẩu luôn có 2 nguy cơ lớn là:
- Bạn sẽ mất hoàn toàn nếu lộ mật khẩu.
- Các attacker có thể sử dụng Brute Force Attack để dò tìm mật khẩu.
Do đó, mình khuyến khích các bạn làm quen với SSH Key để đăng nhập vào Linux server, cũng như sử dụng nó để xác thực các kết nối từ bên ngoài vào cho an toàn hơn.
1. Cách thức hoạt động của SSH Key
SSH Key bạn cứ hiểu đơn giản là một phương thức chứng thực người dùng truy cập bằng cách đối chiếu giữa một khóa cá nhân (Private Key) và khóa công khai(Public Key).
Private key và Public key luôn có liên hệ chặt chẽ với nhau để nó có thể nhận diện lẫn nhau. Khi tạo một SSH Key thì bạn sẽ có cả hai loại key này. Sau đó bạn mang cái public key bỏ lên máy chủ của bạn, còn cái private key bạn sẽ lưu ở máy và khi đăng nhập vào server, bạn sẽ gửi yêu cầu đăng nhập kèm theo cái Private Key này để gửi tín hiệu đến server, server sẽ kiểm tra xem cái Private key của bạn có khớp với Public key có trên server hay không, nếu có thì bạn sẽ đăng nhập được.
Nội dung giữa Private Key và Public Key hoàn toàn khác nhau, nhưng nó vẫn sẽ nhận diện được với nhau thông qua một thuật toán riêng của nó.
Bạn cứ hình dung Private Key là chìa khóa, còn Public Key là ổ khóa. Một khi chìa khóa mà vừa khít với ổ khóa thì cửa sẽ được mở.
2. Thành phần chính của một SSH Key
Khi tạo ra một SSH Key, bạn cần biết sẽ có 3 thành phần quan trọng như sau:
- Public Key (dạng file và string) – Bạn sẽ copy ký tự key này sẽ lưu vào file ~/.ssh/authorized_keys trên server.
- Private Key (dạng file và string) – Bạn sẽ lưu file này vào máy tính, sau đó sẽ thiết lập cho PuTTY, WinSCP,..để có thể login.
- Keypharse (dạng string, cần ghi nhớ) – Mật khẩu để mở private key, khi SSH vào server hệ thống sẽ hỏi cái này.
Và một SSH Key bạn có thể sử dụng cho nhiều server khác nhau.
3. Cách tạo SSH Key
Đối với hệ điều hành Windows
Nếu bạn sử dụng máy tính Windows thì sẽ dùng phần mềm PuTTY-Gen để tạo SSH Key, bạn có thể tải PuTTY-Gen tại đây.
Tải xong bạn mở ra, bạn chọn các tùy chọn như trong ảnh dưới rồi ấn Generate.
Trong lúc tạo, bạn hãy rê chuột vòng vòng cửa sổ của phần mềm cho đến khi nó tạo xong.
Sau khi quá trình tạo key hoàn thành, bạn tiến hành đặt và xác nhận keypharse (nhằm mục đích bảo vệ private key) như bên dưới:
Kế tiếp, bạn nhấn Save Private Key và lưu nó thành một file có định dạng .ppk vào một nơi thật an toàn.
Lưu ý: nếu bạn muốn thực hiện kết nối SSH đến server từ bất kỳ một thiết bị máy tính nào thì file private key bắt buộc phải được lưu trữ trên thiết bị đó.
Đối với public key là cái chuỗi bắt đầu bằng từ khóa ssh-rsa-XXXXXX. Đây sẽ là cái đoạn mã bạn sẽ lưu vào server. Nếu cần xem lại nội dung của public key, bạn chỉ cần ấn nút Load trong phần mềm PuTTYGen rồi mở đúng file private key lên là nó tự hiện ra public key tương ứng.
Đối với hệ điều hành Linux
Nếu bạn sử dụng hệ điều hành Linux, để tạo bộ key mới, bạn thực thi lệnh sau:
# ssh-keygen -t rsa
Chương trình sẽ hỏi bạn muốn lưu private key này vào đâu, mặc định nó sẽ lưu vào /home/user/.ssh. Bạn có thể để trống và Enter.
Tiếp tục nó sẽ hỏi bạn có muốn thiết lập keypharse cho private key hay không, nếu muốn thì nhập keypharse cần thiết lập vào rồi Enter.
Trong đó bạn có thể thấy chính xác đường dẫn các file private key (id_rsa) và file public key (id_rsa.pub).
Tương tự như trên, public key chính là phần bạn sẽ sao chép và lưu trữ trên server.
4. Thêm public key vào server
Bây giờ bạn SSH vào server với user mà bạn cần thêm key (thường thì là root, nhưng nếu server bạn có nhiều user thì sẽ cần thêm key cho tất cả user đó).
Sau đó thực hiện lần lượt các lệnh dưới đây để tạo và phân quyền thư mục .ssh/ và file authorized_keys
mkdir ~/.ssh chmod 700 ~/.ssh touch ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
Kế tiếp, bạn mở file authorized_keys trong thư mục .ssh ở thư mục gốc của user và sao chép toàn bộ nội dung của public key đã tạo ở bước trước vào file này.
Tắt chức năng đăng nhập bằng mật khẩu
Để tắt chức năng đăng nhập bằng mật khẩu, bạn mở file cấu hình SSH /etc/ssh/sshd_config bằng lệnh:
# vi /etc/ssh/sshd_config
Tìm và điều chỉnh giá trị của các tùy chọn như sau:
- PubkeyAuthentication yes (kích hoạt tính năng xác thực key).
- PasswordAuthentication no (tắt xác thực bằng mật khẩu).
- AuthorizedKeysFile .ssh/authorized_keys (chỉ định đường dẫn file lưu nội dung public key).
Sau cùng khởi động lại dịch vụ SSH để lưu các thay đổi bằng lệnh bên dưới:
# service sshd restart
Kiểm tra kết nối SSH đến server bằng key
Cuối cùng, để kiểm tra lại các thiết lập chính xác hay không, bạn thực hiện lại kết nối SSH đến server (trong bài viết này, mình sử dụng công cụ putty) bằng cách chọn phương thức xác thực key và trỏ đến file private key đã lưu trữ trước đó.
Ngay lập tức, hệ thống sẽ yêu cầu bạn nhập passphare (nếu tại bước khởi tạo key bạn có đặt passphare). Nếu passphare chính xác, phiên kết nối SSH sẽ được thiết lập.
Lời kết
Qua bài này chắc bạn cũng đã hiểu được SSH Key là gì và cách sử dụng nó ra sao, đây là một trong những việc rất quan trọng mà bạn cần làm vì chúng ta không thể đăng nhập vào server mãi thông qua phương thức truyền thống bằng mật khẩu, nó rất nguy hiểm nếu như máy tính bạn có mã độc hoặc vô tình làm lộ mật khẩu.
Hy vọng bài viết này hữu ích, chúc bạn thực hiện thành công!
Để lại một phản hồi