Trong hướng dẫn này, ta sẽ tập trung vào việc cài đặt khóa SSH cho server Rocky Linux 8. Khóa SSH cung cấp một phương pháp đăng nhập đơn giản, an toàn vào server và được khuyến khích cho tất cả user.
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ục bộ của bạn):
Theo mặc định, ssh-keygen
sẽ tạo 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 chuyển vào cờ -b 4096
để tạo khóa 4096 bit lớn hơn).
Sau khi nhập lệnh, bạn sẽ thấy dấu nhắc sau:
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 chính của bạn hoặc chỉ định một đường dẫn thay thế.
Nếu trước đó bạn đã tạo cặp khóa SSH, bạn có thể thấy dấu nhắc sau:
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
Nếu bạn chọn ghi đè khóa trên đĩa, bạn sẽ không thể xác thực bằng khóa trước đó nữa. Hãy rất cẩn thận khi chọn có, vì đây là một quá trình không phục hồi được.
Sau đó, bạn sẽ thấy dấu nhắc sau:
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 an toàn, rất được khuyến khích. Cụm mật khẩu bổ sung thêm một lớp bảo mật cho khóa của bạn để ngăn user lạ đăng nhập.
Sau đó, bạn sẽ thấy kết quả sau:
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=++. |
+-----------------+
Đến đâ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à lấy khóa công khai vào server để bạn có thể sử dụng xác thực dựa trên khóa SSH để đăng nhập.
Cách nhanh nhất để sao chép khóa công khai của bạn vào server Rocky Linux là sử dụng trình có tên ssh-copy-id
. Phương pháp này rất được khuyến khích nếu có. Nếu bạn không có ssh-copy-id
trên máy khách của bạn, bạn có thể sử dụng một trong hai phương pháp thay thế sau đây (sao chép qua SSH dựa trên mật khẩu hoặc sao chép khóa theo cách thủ công).
ssh-copy-id
Công cụ ssh-copy-id
được bao gồm theo mặc định trong nhiều hệ điều hành, vì vậy bạn có thể có nó trên hệ thống cục bộ của bạn. Để phương pháp này hoạt động, bạn phải có quyền truy cập SSH dựa trên mật khẩu vào server.
Để sử dụng trình, bạn chỉ cần chỉ định server lưu trữ từ xa mà bạn muốn kết nối và tài khoản user mà bạn có quyền truy cập SSH bằng mật khẩu. Đây là tài khoản mà khóa SSH công khai của bạn sẽ được sao chép vào:
Bạn có thể thấy thông báo sau:
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
Điều này nghĩa là máy tính cục bộ của bạn không nhận ra server từ xa. Điều này sẽ xảy ra lần đầu tiên bạn kết nối với server mới. Nhập 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à ta đã tạo trước đó. Khi tìm thấy key, nó sẽ nhắc bạn nhập mật khẩu của tài khoản user từ xa:
/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 (nhập của bạn sẽ không được hiển thị vì mục đích bảo mật) và nhấn ENTER
. Tiện ích sẽ kết nối với tài khoản trên server từ xa bằng mật khẩu bạn đã cung cấp. Sau đó nó sẽ sao chép nội dung của bạn ~/.ssh/id_rsa.pub
key vào tài khoản từ xa ~/.ssh/authorized_keys
file.
Bạn sẽ thấy kết quả sau:
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.
Đến đây, 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 sang Bước 3 .
Nếu bạn không có ssh-copy-id
, nhưng bạn có quyền truy cập SSH dựa trên mật khẩu vào tài khoản trên server, bạn có thể tải lên các khóa của bạn bằng phương pháp SSH thông thường hơn.
Ta có thể thực hiện việc này bằng cách sử dụng cat
để đọc nội dung của khóa SSH công khai trên máy tính cục bộ của bạn và chuyển thông qua kết nối SSH đến server từ xa.
Mặt khác, ta có thể đảm bảo ~/.ssh
tồn tại và có các quyền chính xác trong tài khoản mà ta đang sử dụng.
Sau đó, ta có thể xuất nội dung mà ta đã chuyển tải vào một tệp có tên gọi là authorized_keys
trong thư mục này. Ta sẽ sử dụng >>
để thêm vào nội dung thay vì ghi đè lên. Điều này sẽ cho phép ta thêm khóa mà không hủy bất kỳ khóa nào đã thêm trước đó.
Lệnh đầy đủ trông như thế này:
Bạn có thể thấy thông báo sau:
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
Điều này nghĩa là máy tính cục bộ của bạn không nhận ra server từ xa. Điều này sẽ xảy ra lần đầu tiên bạn kết nối với server mới. Nhập yes
và nhấn ENTER
để tiếp tục.
Sau đó, bạn sẽ cần nhập mật khẩu tài khoản user từ xa:
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
của bạn sẽ được sao chép vào cuối tệp authorized_keys
id_rsa.pub
khóa của tài khoản user từ xa. Tiếp tục sang Bước 3 nếu việc này thành công.
Nếu bạn không có quyền truy cập SSH dựa trên mật khẩu vào server, bạn sẽ phải hoàn tất quy trình trên theo cách thủ công.
Ta sẽ thêm thủ công nội dung tệp id_rsa.pub
của bạn vào tệp ~/.ssh/authorized_keys
trên máy tính từ xa của bạn.
Để hiển thị nội dung của khóa id_rsa.pub
, hãy nhập mã này vào máy tính cục bộ của bạn:
Bạn sẽ thấy nội dung của khóa, trông giống như sau:
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 server từ xa của bạn bằng bất kỳ phương pháp nào bạn có.
Khi bạn có quyền truy cập vào tài khoản của bạn trên server từ xa, bạn nên đảm bảo ~/.ssh
tồn tại. Lệnh này sẽ tạo thư mục nếu cần hoặc không làm gì nếu nó đã tồn tại:
Bây giờ, bạn có thể tạo hoặc sửa đổi các authorized_keys
file trong thư mục này. Bạn có thể thêm nội dung của tệp id_rsa.pub
của bạn vào cuối tệp authorized_keys
, tạo nó nếu cần, bằng cách sử dụng lệnh sau:
Trong lệnh trên, thay thế public_key_string
bằng kết quả từ lệnh cat ~/.ssh/id_rsa.pub
mà bạn đã thực thi trên hệ thống cục bộ của bạn. Nó phải bắt đầu bằng ssh-rsa AAAA...
Cuối cùng, ta sẽ đảm bảo các ~/.ssh
thư mục và authorized_keys
file có quyền thích hợp cài đặt:
Thao tác này sẽ xóa một cách đệ quy tất cả các quyền “group” và "others"(quyền-khác) đối với ~/.ssh/
.
Nếu bạn đang sử dụng tài khoản root để cài đặt khóa cho tài khoản user, thì điều quan trọng là ~/.ssh
thuộc về user chứ không phải root :
Trong hướng dẫn này, user có tên là sammy nhưng bạn nên thay thế tên user thích hợp vào lệnh trên.
Bây giờ ta có thể thử xác thực dựa trên khóa với server Rocky Linux .
Nếu bạn đã hoàn thành một trong các quy trình trên, bây giờ bạn có thể đăng nhập vào server từ xa mà không cần mật khẩu của tài khoản từ xa.
Quy trình ban đầu giống như với xác thực dựa trên mật khẩu:
Nếu đây là lần đầu tiên bạn kết nối với server này (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 tin như sau:
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
Điều này nghĩa là máy tính cục bộ của bạn không nhận dạng được server từ xa. Nhập yes
và sau đó nhấn ENTER
để tiếp tục.
Nếu bạn không cung cấp cụm mật khẩu khi tạo cặp khóa của bạn ở bước 1, bạn sẽ được đăng nhập ngay lập tức. Nếu bạn đã cung cấp một cụm mật khẩu, bạn sẽ cần nhập nó ngay bây giờ. Sau khi xác thực, một phiên shell mới sẽ mở cho bạn với tài khoản đã cấu hình trên server Rocky Linux.
Nếu xác thực dựa trên khóa thành công, hãy tiếp tục tìm hiểu cách bảo mật hơn nữa hệ thống của bạn bằng cách tắt xác thực dựa trên mật khẩu của server SSH của bạn.
Nếu bạn có thể đăng nhập vào tài khoản của bạn bằng SSH mà không cần mật khẩu, bạn đã cấu hình thành công xác thực dựa trên khóa SSH cho tài khoản của bạn. Tuy nhiên, cơ chế xác thực dựa trên mật khẩu của bạn vẫn hoạt động, nghĩa là server vẫn bị tấn công brute-force.
Trước khi hoàn tất các bước trong phần này, hãy đảm bảo bạn đã cấu hình xác thực dựa trên khóa SSH cho tài khoản gốc trên server này hoặc tốt hơn là bạn đã cấu hình xác thực dựa trên khóa SSH cho tài khoản không phải gốc trên server này. server với quyền sudo
Bước này sẽ khóa các thông tin đăng nhập dựa trên mật khẩu, vì vậy đảm bảo bạn vẫn có thể có quyền truy cập quản trị là rất quan trọng.
Khi bạn đã xác nhận tài khoản từ xa của bạn có quyền quản trị, hãy đăng nhập vào server từ xa của bạn bằng khóa SSH, với tài khoản root hoặc bằng tài khoản có quyền sudo
Sau đó, mở tệp cấu hình SSH daemon:
Bên trong tệp, hãy tìm kiếm một lệnh có tên là PasswordAuthentication
. Điều này có thể được comment bằng #
băm. Nhấn i
để đưa vi
vào chế độ chèn, sau đó bỏ comment và đặt giá trị thành no
. Điều này sẽ vô hiệu hóa khả năng đăng nhập qua SSH của bạn bằng mật khẩu tài khoản:
...
PasswordAuthentication no
...
Khi bạn thực hiện xong các thay đổi, hãy nhấn ESC
và sau đó :wq
để ghi các thay đổi vào tệp và thoát. Để áp dụng các thay đổi, ta cần khởi động lại dịch vụ sshd
:
Để phòng ngừa, hãy mở một cửa sổ terminal mới và kiểm tra xem dịch vụ SSH có hoạt động chính xác hay không trước khi đóng phiên hiện tại của bạn:
Khi bạn đã xác minh dịch vụ SSH của bạn vẫn hoạt động bình thường, bạn có thể đóng tất cả các phiên server hiện tại một cách an toàn.
Daemon SSH trên server Rocky Linux của bạn giờ chỉ phản hồi các khóa SSH. Xác thực dựa trên mật khẩu đã bị vô hiệu hóa thành công.
Bây giờ, bạn đã cấu hình xác thực dựa trên khóa SSH trên server, cho phép bạn đăng nhập mà không cần cung cấp mật khẩu tài khoản.
Nếu bạn muốn tìm hiểu thêm về cách làm việc với SSH, hãy xem Hướng dẫn Cơ bản về SSH .