Trong hướng dẫn này, chúng ta sẽ tập trung vào việc thiết lập SSH keys cho máy chủ Rocky Linux 9. SSH keys mang đến một phương pháp đăng nhập đơn giản và an toàn, được khuyến nghị cho tất cả người dùng. Khi làm việc với một máy chủ Rocky Linux, khả năng cao bạn sẽ dành phần lớn thời gian trong một phiên terminal được kết nối với máy chủ qua SSH.
Bước 1 — Tạo cặp khóa RSA – Bước đầu tiên trong tạo SSH Key
Bước đầu tiên là tạo một cặp khóa trên máy khách (thường là máy tính cá nhân của bạn):
ssh-keygen
Mặc định, ssh-keygen sẽ tạo ra một cặp khóa RSA 2048-bit, đủ an toàn cho hầu hết các trường hợp sử dụng (bạn có thể tùy chọn truyền thêm tham số -b 4096
để tạo ra một khóa 4096-bit lớn hơn).
Sau khi nhập lệnh, bạn sẽ thấy lời nhắc sau:
Output:
Generating public/private rsa key pair. Enter file in which to save the key (/your_home/.ssh/id_rsa):
Nhấn ENTER để lưu cặp khóa vào thư mục con .ssh/
trong thư mục cá nhân của bạn, hoặc chỉ định một đường dẫn khác.
Nếu trước đó bạn đã tạo một cặp SSH key, có thể bạn sẽ thấy lời nhắc sau:
Output:
/home/your_home/.ssh/id_rsa already exists. Overwrite (y/n)?
Nếu bạn chọn ghi đè lên khóa đã có trên ổ đĩa, bạn sẽ không thể xác thực bằng khóa trước đó nữa. Hãy cẩn thận khi chọn “yes”, vì đây là một quá trình phá hủy không thể hoàn tác.
Tiếp theo, bạn sẽ thấy lời nhắc:
Output:
Enter passphrase (empty for no passphrase):
Tại đây, bạn có thể (tùy chọn) nhập một cụm mật khẩu bảo mật, điều này được khuyến cáo cao. Một cụm mật khẩu sẽ thêm một lớp bảo mật bổ sung cho khóa của bạn, giúp ngăn chặn người dùng trái phép đăng nhập.
Sau đó, bạn sẽ thấy kết quả sau:
Output:
Your identification has been saved in /your_home/.ssh/id_rsa. Your public key has been saved in /your_home/.ssh/id_rsa.pub. The key fingerprint is: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host The key's randomart image is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+
Giờ đây, bạn đã có một khóa Public Key và Private Key mà bạn có thể sử dụng để xác thực. Bước tiếp theo là đưa Public Key của bạn lên máy chủ để có thể sử dụng phương thức xác thực dựa trên SSH key khi đăng nhập.
Bước 2 — Sao chép Public Key lên máy chủ Rocky Linux
Cách nhanh nhất để sao chép Public Key của bạn lên máy chủ Rocky Linux là sử dụng tiện ích có tên ssh-copy-id. Phương pháp này được khuyến nghị nếu có sẵn. Nếu trên máy khách của bạn không có ssh-copy-id, bạn có thể sử dụng một trong hai phương pháp thay thế sau (sao chép qua SSH sử dụng mật khẩu hoặc sao chép thủ công khóa).
Sao chép Public Key bằng ssh-copy-id
Tiện ích ssh-copy-id thường được tích hợp sẵn trong nhiều hệ điều hành, vì vậy có thể nó đã có trên hệ thống của bạn. Để phương pháp này hoạt động, bạn cần có quyền truy cập SSH qua mật khẩu vào máy chủ của bạn.
Để sử dụng tiện ích này, bạn chỉ cần chỉ định máy chủ từ xa mà bạn muốn kết nối và tài khoản người dùng có quyền truy cập SSH qua mật khẩu. Đây là tài khoản mà Public SSH key của bạn sẽ được sao chép vào:
ssh-copy-id username@remote_host
Bạn có thể thấy thông báo sau:
Output:
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes
Thông báo trên có nghĩa là máy tính của bạn chưa nhận diện được máy chủ từ xa. Điều này sẽ xảy ra lần đầu tiên bạn kết nối với một máy chủ mới. Hãy gõ “yes” và nhấn ENTER để tiếp tục.
Tiếp theo, tiện ích sẽ quét tài khoản cục bộ của bạn để tìm khóa id_rsa.pub
mà bạn đã tạo ở bước trước. Khi tìm thấy, nó sẽ yêu cầu bạn nhập mật khẩu của tài khoản người dùng trên máy chủ từ xa:
Output:
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys username@203.0.113.1's password:
Nhập mật khẩu (lưu ý: khi gõ mật khẩu, các ký tự sẽ không hiển thị vì lý do bảo mật) và nhấn ENTER. Tiện ích sẽ kết nối đến tài khoản trên máy chủ từ xa bằng mật khẩu bạn vừa nhập, sau đó sao chép nội dung của ~/.ssh/id_rsa.pub
vào file ~/.ssh/authorized_keys
của tài khoản đó.
Bạn sẽ thấy thông báo sau:
Output:
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'username@203.0.113.1'" and check to make sure that only the key(s) you wanted were added.
Tại thời điểm này, khóa id_rsa.pub
của bạn đã được tải lên tài khoản từ xa. Bạn có thể tiếp tục với Bước 3.
Sao chép Public Key bằng SSH
Nếu bạn không có ssh-copy-id nhưng có quyền truy cập SSH qua mật khẩu vào tài khoản trên máy chủ, bạn có thể tải khóa của mình lên theo cách thông thường hơn.
Chúng ta có thể làm điều này bằng cách sử dụng lệnh cat
để đọc nội dung của Public SSH key trên máy tính cục bộ và chuyển nó qua kết nối SSH đến máy chủ từ xa.
Ở phía máy chủ, bạn cần đảm bảo rằng thư mục ~/.ssh
tồn tại và có quyền truy cập chính xác cho tài khoản mà bạn đang sử dụng.
Sau đó, chúng ta sẽ chuyển nội dung đã chuyển qua vào một file có tên authorized_keys
trong thư mục này. Chúng ta sẽ sử dụng ký hiệu chuyển hướng >>
để nối nội dung vào cuối file thay vì ghi đè nó. Điều này giúp bạn thêm khóa mới mà không làm mất đi các khóa đã được thêm trước đó.
Lệnh đầy đủ như sau:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
Bạn có thể thấy thông báo sau:
Output:
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes
Thông báo này có nghĩa là máy tính của bạn chưa nhận diện được máy chủ từ xa (sẽ xảy ra khi kết nối lần đầu với máy chủ mới). Gõ “yes” và nhấn ENTER để tiếp tục.
Sau đó, bạn sẽ được yêu cầu nhập mật khẩu của tài khoản người dùng trên máy chủ từ xa:
Output:
username@203.0.113.1's password:
Sau khi nhập mật khẩu, nội dung của khóa id_rsa.pub
sẽ được sao chép vào cuối file authorized_keys
của tài khoản người dùng từ xa. Nếu thao tác thành công, hãy chuyển sang Bước 3.
Sao chép Public Key thủ công
Nếu bạn không có quyền truy cập SSH qua mật khẩu vào máy chủ, bạn sẽ phải thực hiện quá trình trên một cách thủ công.
Chúng ta sẽ tự tay nối nội dung của file id_rsa.pub
vào file ~/.ssh/authorized_keys
trên máy chủ từ xa.
Để hiển thị nội dung của khóa id_rsa.pub
trên máy cục bộ, gõ lệnh sau:
cat ~/.ssh/id_rsa.pub
Bạn sẽ thấy nội dung của khóa, nó sẽ có định dạng tương tự như sau:
Output:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== sammy@host
Đăng nhập vào máy chủ từ xa bằng bất kỳ phương thức nào bạn có sẵn.
Khi đã có quyền truy cập vào tài khoản trên máy chủ, bạn cần đảm bảo rằng thư mục ~/.ssh
tồn tại. Lệnh sau sẽ tạo thư mục nếu chưa có, hoặc không làm gì nếu thư mục đã tồn tại:
mkdir -p ~/.ssh
Bây giờ, bạn có thể tạo hoặc chỉnh sửa file authorized_keys
trong thư mục này. Bạn có thể thêm nội dung của file id_rsa.pub
vào cuối file authorized_keys
(tạo file mới nếu chưa tồn tại) bằng lệnh sau:
echo public_key_string >> ~/.ssh/authorized_keys
Trong lệnh trên, thay thế public_key_string
bằng nội dung bạn nhận được từ lệnh cat ~/.ssh/id_rsa.pub
trên máy cục bộ. Nội dung này sẽ bắt đầu bằng ssh-rsa AAAA...
Cuối cùng, chúng ta cần đảm bảo rằng thư mục ~/.ssh
và file authorized_keys
có các quyền truy cập thích hợp:
chmod -R go= ~/.ssh
Lệnh này sẽ loại bỏ đệ quy tất cả các quyền “group” và “other” đối với thư mục ~/.ssh/
.
Nếu bạn đang sử dụng tài khoản root để thiết lập khóa cho một tài khoản người dùng, thì cũng quan trọng là thư mục ~/.ssh
phải thuộc về người dùng đó chứ không phải là root:
chown -R sammy:sammy ~/.ssh
Trong hướng dẫn này, tên người dùng của chúng ta là sammy
, nhưng bạn nên thay thế bằng tên tài khoản phù hợp.
Bây giờ, bạn có thể thử đăng nhập vào máy chủ Rocky Linux bằng xác thực dựa trên SSH key.
Bước 3 — Đăng nhập vào máy chủ Rocky Linux sử dụng SSH Keys
Nếu bạn đã hoàn thành thành công một trong các phương pháp ở trên, bây giờ bạn sẽ có thể đăng nhập vào máy chủ từ xa mà không cần mật khẩu của tài khoản đó.
Quá trình ban đầu vẫn giống như đăng nhập bằng mật khẩu:
ssh username@remote_host
Nếu đây là lần đầu tiên bạn kết nối với máy chủ (nếu bạn sử dụng phương pháp cuối cùng ở trên), bạn có thể thấy thông báo như sau:
Output:
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes
Thông báo này có nghĩa là máy tính của bạn chưa nhận diện được máy chủ từ xa. Gõ “yes” và nhấn ENTER để tiếp tục.
Nếu bạn không nhập cụm mật khẩu khi tạo cặp khóa ở bước 1, bạn sẽ được đăng nhập ngay lập tức. Nếu đã nhập, bạn sẽ được yêu cầu nhập cụm mật khẩu ngay bây giờ. Sau khi xác thực, một phiên shell mới sẽ mở ra với tài khoản đã được cấu hình trên máy chủ Rocky Linux.
Nếu xác thực bằng SSH key thành công, bạn có thể tiếp tục tìm hiểu cách bảo mật hệ thống hơn bằng cách tắt tính năng đăng nhập qua mật khẩu của SSH server.
Bước 4 — Vô hiệu hóa đăng nhập bằng mật khẩu trên máy chủ
Nếu bạn đã đăng nhập thành công vào tài khoản bằng SSH mà không cần mật khẩu, có nghĩa là bạn đã cấu hình thành công xác thực dựa trên SSH key. Tuy nhiên, cơ chế đăng nhập bằng mật khẩu vẫn còn hoạt động, khiến máy chủ của bạn dễ bị tấn công brute-force.
Trước khi thực hiện các bước trong phần này, hãy đảm bảo rằng bạn đã cấu hình xác thực bằng SSH key cho tài khoản root trên máy chủ, hoặc tốt hơn là cấu hình cho một tài khoản không phải root có quyền sudo. Bước này sẽ khóa phương thức đăng nhập qua mật khẩu, vì vậy cần đảm bảo rằng bạn vẫn có thể truy cập quyền quản trị.
Khi đã xác nhận rằng tài khoản từ xa của bạn có quyền quản trị, hãy đăng nhập vào máy chủ từ xa bằng SSH key, dưới dạng root hoặc tài khoản có quyền sudo. Sau đó, mở file cấu hình của SSH daemon:
sudo vi /etc/ssh/sshd_config
Trong file này, tìm dòng chỉ thị có tên PasswordAuthentication. Dòng này có thể bị chú thích (bắt đầu bằng dấu #
). Nhấn i
để chuyển vi vào chế độ chèn, sau đó bỏ chú thích dòng này và đặt giá trị thành no
. Việc này sẽ vô hiệu hóa khả năng đăng nhập qua SSH bằng mật khẩu của tài khoản.
/etc/ssh/sshd_config ... PasswordAuthentication no ...
Sau khi hoàn tất chỉnh sửa, nhấn ESC và gõ :wq
để lưu file và thoát. Để áp dụng thay đổi, bạn cần khởi động lại dịch vụ sshd:
sudo systemctl restart sshd
Như một biện pháp phòng ngừa, hãy mở một cửa sổ terminal mới và kiểm tra rằng dịch vụ SSH vẫn hoạt động bình thường trước khi đóng phiên làm việc hiện tại:
ssh username@remote_host
Sau khi xác nhận dịch vụ SSH hoạt động đúng, bạn có thể an toàn đóng tất cả các phiên làm việc hiện tại trên máy chủ.
SSH daemon trên máy chủ Rocky Linux của bạn bây giờ chỉ phản hồi với các kết nối sử dụng SSH key.
Việc đăng nhập bằng mật khẩu đã được vô hiệu hóa thành công.
Kết luận
Bây giờ, bạn đã cấu hình thành công xác thực dựa trên SSH key trên máy chủ, cho phép bạn đăng nhập mà không cần cung cấp mật khẩu cho tài khoản.