Cách thiết lập khóa SSH trên Debian 11

Tác giả Network Engineer, T.Mười 30, 2021, 03:55:55 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách thiết lập khóa SSH trên Debian 11


SSH hoặc shell an toàn, là một giao thức được mã hóa được sử dụng để quản trị và giao tiếp với các máy chủ.

Khi làm việc với máy chủ Debian, rất có thể bạn sẽ dành phần lớn thời gian của mình trong một phiên cửa sổ dòng lệnh Terminal được kết nối với máy chủ của bạn thông qua SSH.

Trong hướng dẫn này, mình sẽ tập trung vào việc thiết lập các khóa SSH để cài đặt Debian 11. Khóa SSH cung cấp một cách dễ dàng, an toàn để đăng nhập vào máy chủ của bạn và được khuyến nghị cho tất cả người dùng.

1. Tạo cặp khóa RSA.

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ủa bạn:

Mã nguồn [Chọn]
$ ssh-keygen
Theo mặc định, ssh-keygen sẽ tạo một cặp khóa RSA 3072 bit, đủ an toàn cho hầu hết các trường hợp sử dụng. Bạn có thể thêm tùy chọn b 4096 vào để tạo khóa 4096 bit lớn hơn.

Sau khi nhập lệnh, bạn sẽ thấy kết quả sau:

Mã nguồn [Chọn]
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 home 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 lời nhắc sau:

Mã nguồn [Chọn]
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?

Lưu ý: 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 yes, vì đây là một quá trình phá hủy không thể đảo ngược.

Sau đó, bạn sẽ thấy lời nhắc sau:

Mã nguồn [Chọn]
Enter passphrase (empty for no passphrase):
Tại đây, bạn có thể tùy ý 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 để ngăn người dùng trái phép đăng nhập. Để tìm hiểu thêm về bảo mật, hãy tham khảo hướng dẫn của mình về cách cấu hình xác thực dựa trên khóa SSH trên máy chủ Linux.

Sau đó, bạn sẽ thấy kết quả sau:

Mã nguồn [Chọn]
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:
SHA256:5E2BtTN9FHPBNoRXAB/EdjtHNYOHzTBzG5qUv7S3hyM root@vietnetwork
The key's randomart image is:
+---[RSA 3072]----+
|         oo .O^XB|
|        .  +.BO%B|
|        . = .+B+o|
|       o o o . =.|
|        S .   . =|
|               o.|
|               .o|
|            E o..|
|             . ..|
+----[SHA256]-----+


Bây giờ bạn có một khóa công khai và riêng tư mà bạn có thể sử dụng để xác thực.

Bước tiếp theo là đặt khóa công khai trên máy chủ của bạn để bạn có thể sử dụng xác thực dựa trên khóa SSH để đăng nhập.

2. Sao chép khóa công khai vào máy chủ Debian.

Cách nhanh nhất để sao chép khóa công khai của bạn vào máy chủ Debian là sử dụng một tiện ích có tên ssh-copy-id. Do tính đơn giản của nó, phương pháp này rất được khuyến khích nếu có.

Nếu bạn không có sẵn ssh-copy-id trên máy khách của mình, bạn có thể sử dụng một trong hai phương pháp thay thế được cung cấp trong phần nà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.

2.1. Sao chép khóa công khai bằng cách sử dụng ssh-copy-id

Công cụ ssh-copy-id này đượ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 mình. Để 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 máy chủ của mình.

Để sử dụng tiện ích này, bạn chỉ cần chỉ định máy chủ lưu trữ từ xa mà bạn muốn kết nối và tài khoản người dùng 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.

Cú pháp là:

Mã nguồn [Chọn]
$ ssh-copy-id username@remote_host
Bạn có thể thấy thông báo sau:

Mã nguồn [Chọn]
The authenticity of host '192.168.8.8 (192.168.8.8)' 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 có nghĩa là máy tính cục bộ của bạn không nhận ra 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áy chủ 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à mình đã tạo trước đó. Khi tìm thấy khóa, nó sẽ nhắc bạn nhập mật khẩu của tài khoản người dùng từ xa:

Mã nguồn [Chọn]
/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
[email protected]'s password:


Nhập mật khẩu (mật khẩu 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 máy chủ từ xa bằng mật khẩu bạn đã cung cấp. Sau đó, nó sẽ sao chép nội dung của khóa ~/.ssh/id_rsa.pub của bạn vào một tập tin trong thư mục home của tài khoản từ xa ~/.ssh được gọi là authorized_keys.

Bạn sẽ thấy kết quả sau:

Mã nguồn [Chọn]
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
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 máy chủ từ xa.

2.2. Sao chép khóa công khai bằng SSH.

Nếu bạn không có sẵn 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 máy chủ của mình, bạn có thể tải lên các khóa của mình bằng phương pháp SSH thông thường.

Chúng ta có thể thực hiện việc này bằng cách sử dụng lệnh cat để đọc nội dung của khóa SSH công khai trên máy tính cục bộ của mình và chuyển thông qua kết nối SSH đến máy chủ từ xa.

Mặt khác, bạn có thể đảm bảo rằng thư mục ~/.ssh tồn tại và có các quyền chính xác trong tài khoản mà mình đang sử dụng.

Sau đó, bạn có thể xuất nội dung mà mình đưa vào một tập tin có tên authorized_keys trong thư mục này. Chúng ta sẽ sử dụng biểu tượng chuyển hướng >> để nối nội dung thay vì ghi đè lên. Điều này sẽ cho phép mình thêm các khóa mà không phải hủy các khóa đã thêm trước đó.

Lệnh đầy đủ trông như thế này:

Mã nguồn [Chọn]
$ 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:
     
Mã nguồn [Chọn]
The authenticity of host '192.168.8.8 (192.168.8.8)' 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 có nghĩa là máy tính cục bộ của bạn không nhận ra 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áy chủ mới. Nhập "yes" và nhấn ENTER để tiếp tục.

Sau đó, bạn sẽ được nhắc nhập mật khẩu tài khoản người dùng từ xa:
     
Mã nguồn [Chọn]
[email protected]'s password:
Sau khi nhập mật khẩu, nội dung khóa id_rsa.pub của bạn sẽ được sao chép vào cuối tập tin authorized_keys của tài khoản người dùng từ xa.

2.3. Sao chép khóa công khai theo cách thủ 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 máy chủ của mình, bạn sẽ phải hoàn tất quy trình trên theo cách thủ công.

Chúng ta sẽ nối nội dung tập tin id_rsa.pub của bạn vào tập tin ~/.ssh/authorized_keys trên máy từ xa của bạn theo cách thủ công.

Để 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:

Mã nguồn [Chọn]
$ cat ~/.ssh/id_rsa.pub
Bạn sẽ thấy nội dung của khóa, trông giống như sau:
 
Mã nguồn [Chọn]
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= [email protected]
Truy cập máy chủ từ xa của bạn bằng bất kỳ phương pháp nào bạn có sẵn.

Khi bạn có quyền truy cập vào tài khoản của mình trên máy chủ từ xa, bạn nên đảm bảo rằng thư mục ~/.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:

Mã nguồn [Chọn]
$ mkdir -p ~/.ssh
Bây giờ, bạn có thể tạo hoặc sửa đổi tập tin authorized_keys trong thư mục này. Bạn có thể thêm nội dung tập tin  id_rsa.pubcủa mình vào cuối tập tin authorized_keys, tạo nội dung đó nếu cần bằng lệnh sau:

Mã nguồn [Chọn]
$ echo public_key_string >> ~/.ssh/authorized_keys
Trong lệnh trên, thay thế public_key_string bằng đầu ra từ lệnh cat ~/.ssh/id_rsa.pub mà bạn đã thực thi trên hệ thống cục bộ của mình. Nó phải bắt đầu với ssh-rsa AAAA...

Cuối cùng, bạn sẽ đảm bảo rằng thư mục ~/.ssh và tập tin authorized_keys có các quyền thích hợp được đặt:

Mã nguồn [Chọn]
$ chmod -R go= ~/.ssh
Điều này sẽ loại bỏ một cách đệ quy tất cả các quyền "nhóm" và "quyền khác" cho thư mục ~/.ssh/

Nếu bạn đang sử dụng tài khoản root để thiết lập khóa cho tài khoản người dùng, thì điều quan trọng là thư mục  ~/.ssh đó thuộc về người dùng và không phải root

Mã nguồn [Chọn]
$ chown -R vietnetwork:vietnetwork ~/.ssh
Trong hướng dẫn này, người dùng của mình có tên vietnetwork nhưng bạn nên thay thế tên người dùng thích hợp vào lệnh trên.

Bây giờ bạn có thể thử xác thực không cần mật khẩu với máy chủ Debian của mình.

3. Xác thực máy chủ Debian bằng khóa SSH.

Nếu bạn đã hoàn thành thành công một trong các quy trình trên, 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 từ xa.

Quá trình chung là giống nhau:

Mã nguồn [Chọn]
$ 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ày (nếu bạn đã sử dụng phương pháp cuối cùng ở trên), bạn có thể thấy một cái gì đó như sau:
     
Mã nguồn [Chọn]
The authenticity of host '192.168.8.8 (192.168.8.8)' 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 có nghĩa là máy tính cục bộ của bạn không nhận ra máy chủ 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 cho khóa cá nhân của mình, bạn sẽ được đăng nhập ngay lập tức. Nếu bạn đã cung cấp cụm mật khẩu cho khóa cá nhân khi tạo khóa, bạn sẽ được nhắc nhập mật khẩu ngay bây giờ.

Lưu ý rằng các lần nhấn phím của bạn sẽ không hiển thị trong phiên đầu cuối để bảo mật. 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 máy chủ Debian.

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 mật khẩu.

4. Tắt xác thực mật khẩu trên máy chủ của bạn.

Nếu bạn có thể đăng nhập vào tài khoản của mình 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 mình. 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, có nghĩa là máy chủ của bạn vẫn có thể 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 rằng bạn đã cấu hình xác thực dựa trên khóa SSH cho tài khoản root trên máy chủ 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 root trên máy chủ này. Máy chủ với các 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 rằng 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 rằng tài khoản từ xa của mình có quyền quản trị, hãy đăng nhập vào máy chủ từ xa của bạn bằng khóa SSH, với tư cách là root hoặc bằng tài khoản có quyền sudo. Sau đó, mở tập tin cấu hình SSH daemon:

Mã nguồn [Chọn]
$ sudo nano /etc/ssh/sshd_config
Bên trong tập tin, tìm kiếm tùy chọn được gọi PasswordAuthentication. Tùy chọn này có thể đang bị vô hiệu hóa. Chúng ta có thể kích hoạt nó bằng cách bỏ dấu ghi chú # ở đầu dòng 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:

Mã nguồn [Chọn]
PasswordAuthentication no
Lưu và đóng tập tin khi bạn hoàn tất bằng cách nhấn CTRL+ X, sau đó Y để xác nhận lưu tập tin và cuối cùng ENTER để thoát nano. Để thực sự triển khai những thay đổi này, mình cần khởi động lại dịch vụ sshd:

Mã nguồn [Chọn]
$ sudo systemctl restart ssh
Để phòng ngừa cấu hình sai, bạn hãy mở một cửa sổ dòng lệnh 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 này:

Mã nguồn [Chọn]
$ ssh username@remote_host
Khi bạn đã xác minh dịch vụ SSH của mình hoạt động như mong muốn, bạn có thể đóng tất cả các phiên máy chủ hiện tại một cách an toàn.

Daemon SSH trên máy chủ Debian của bạn bây 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 sẽ có xác thực dựa trên khóa SSH được cấu hình trên máy chủ của mình, 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 của mình.