Cách tạo SSH Keys Ubuntu 22.04 – How to create ssh key Ubuntu 22.04

ssh key Ubuntu 22.04

Trong hướng dẫn này, chúng ta sẽ tập trung vào việc thiết lập ssh key Ubuntu 22.04. SSH keys cung cấp một phương thức đăng nhập an toàn vào máy chủ của bạn và được khuyến nghị cho tất cả người dùng.

SSH, hay còn gọi là secure shell, là một giao thứ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ột máy chủ Ubuntu, khả năng cao bạn sẽ dành phần lớn thời gian của mình trong một phiên làm việc terminal được kết nối đến máy chủ thông qua SSH.

Bước 1 — Tạo Cặp Khóa – Bước đầu tiên trong create ssh key Ubuntu

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):

ssh-keygen

Theo mặc định, các phiên bản mới của ssh-keygen sẽ tạo ra 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ể tùy chọn truyền vào tham số -b 4096 để tạo ra một khóa lớn hơn 4096-bit).

Sau khi nhập lệnh, bạn sẽ thấy kết quả xuất ra như 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 phụ .ssh/ trong thư mục chính của bạn, hoặc chỉ định đường dẫn thay thế.

Nếu bạn đã tạo trước đó một cặp SSH key, bạn có thể thấy thông báo 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 cẩn thận khi chọn yes, vì đây là quá trình phá hủy không thể đảo ngược.

Sau đó, bạn sẽ thấy thông báo sau:

Enter passphrase (empty for no passphrase):

Tại đây, bạn có thể tùy chọn nhập vào một passphrase an toàn, điều này được khuyến nghị cao. Passphrase cung cấp một lớp bảo mật bổ sung để ngăn chặ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 chúng tôi về Cách Tạo SSH Key trên Linux.

Bạn sẽ thấy kết quả xuất ra tương tự như 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:
SHA256:/hk7MJ5n5aiqdfTVUZr+2Qt+qCiS7BIm5Iv0dxrc3ks user@host
The key's randomart image is:
+---[RSA 3072]----+
|                .|
|               + |
|              +  |
| .           o . |
|o       S   . o  |
| + o. .oo. ..  .o|
|o = oooooEo+ ...o|
|.. o *o+=.*+o....|
|    =+=ooB=o.... |
+----[SHA256]-----+

Bây giờ, bạn đã có một 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 lên máy chủ của bạn để bạn có thể sử dụng phương thức xác thực dựa trên SSH key để đăng nhập.

ssh key Ubuntu 22.04

Bước 2 — Sao Chép Public Key Lên Máy Chủ Ubuntu của Bạn – ssh key Ubuntu 22.04

Cách nhanh nhất để sao chép Public Key của bạn lên máy chủ Ubuntu là sử dụng tiện ích có tên ssh-copy-id. Do tính đơn giản của nó, phương pháp này được khuyến nghị cao nếu có sẵn. 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 thủ công Public Key).

Sao Chép Public Key Sử Dụng ssh-copy-id

Công cụ ssh-copy-id được tích hợp sẵn 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ỉ định máy chủ 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 dựa trên 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.

Cú pháp là:

ssh-copy-id username@remote_host

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 có nghĩa là máy tính cục bộ của bạn không 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 tới một 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à chúng ta đã tạo trước đó. Khi tìm thấy khóa, 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:

/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 (ký tự bạn nhập 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 cung cấp. Sau đó, nó sẽ sao chép nội dung của khóa ~/.ssh/id_rsa.pub vào một tệp trong thư mục home của tài khoản từ xa có tên authorized_keys.

Bạn sẽ thấy kết quả xuất ra 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.

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 đến Bước 3.

Sao Chép Public Key Sử Dụng SSH

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 một tài khoản trên máy chủ của mình, bạn có thể tải lên khóa của mình sử dụng phương pháp SSH thông thường.

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ội dung đó qua một kết nối SSH tới máy chủ từ xa.

Ở phía bên kia, chúng ta có thể đảm bảo rằng thư mục ~/.ssh tồn tại và có các quyền truy cập chính xác dưới tài khoản mà chúng ta đang sử dụng.

Sau đó, chúng ta sẽ xuất nội dung được chuyển qua vào một tệp 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 >> để thêm nội dung vào cuối tệp thay vì ghi đè lên nó. Điều này cho phép chúng ta thêm khóa mà không làm mất các khóa đã được thêm trước đó.

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:

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 có nghĩa là máy tính cục bộ của bạn không 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 tới một máy chủ mới. Nhập 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:

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 của tài khoản người dùng trên máy chủ từ xa. Nếu thao tác thành công, hãy tiếp tục đến Bước 3.

Sao Chép Public Key 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 thực hiện quá trình trên một cách thủ công.

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

Để hiển thị nội dung của Public Key id_rsa.pub của bạn, hãy gõ lệnh sau trên máy cục bộ:

cat ~/.ssh/id_rsa.pub

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== demo@test

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 đã truy cập vào tài khoản 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 sau sẽ tạo thư mục nếu cần, hoặc không làm gì nếu nó đã tồn tại:

mkdir -p ~/.ssh

Bây giờ, bạn có thể tạo hoặc sửa đổi tệp authorized_keys trong thư mục này. Bạn có thể thêm nội dung của tệp id_rsa.pub vào cuối tệp authorized_keys, tạo tệp nếu cần, bằng lệnh sau:

echo public_key_string >> ~/.ssh/authorized_keys

Trong lệnh trên, thay public_key_string bằng kết quả xuất ra từ lệnh cat ~/.ssh/id_rsa.pub mà bạn đã thực thi trên hệ thống cục bộ. Nội dung này sẽ bắt đầu với ssh-rsa AAAA….

Cuối cùng, chúng ta sẽ đảm bảo rằng thư mục ~/.ssh và tệp authorized_keys có các quyền truy cập thích hợp được thiết lập:

chmod -R go= ~/.ssh

Lệnh này sẽ loại bỏ đệ quy tất cả các quyền “group” và “other” 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 một tài khoản người dùng, cũng quan trọng rằng thư mục ~/.ssh thuộc về người dùng đó chứ không phải root:

chown -R sammy:sammy ~/.ssh

Trong hướng dẫn này, người dùng của chúng ta được đặt tên là sammy, nhưng bạn nên thay thế bằng tên người dùng phù hợp trong lệnh trên.

Bây giờ, chúng ta có thể thử xác thực không dùng mật khẩu với máy chủ Ubuntu của mình.

Bước 3 — Xác Thực với Máy Chủ Ubuntu Sử Dụng SSH Keys

Nếu bạn đã hoàn thành thành công một trong những 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 cung cấp mật khẩu của tài khoản từ xa.

Quy trình cơ bản như sau:

ssh username@remote_host

Nếu đây là lần đầu tiên bạn kết nối tớ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 thông báo 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 có nghĩa là máy tính cục bộ của bạn không nhận diện được 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 passphrase cho Private Key của mình, bạn sẽ được đăng nhập ngay lập tức. Nếu bạn đã cung cấp passphrase khi tạo khóa, bạn sẽ được yêu cầu nhập vào ngay bây giờ (lưu ý rằng các ký tự bạn gõ sẽ không hiển thị trong phiên terminal vì lý do bảo mật). Sau khi xác thực, một phiên shell mới sẽ mở ra cho bạn với tài khoản đã được cấu hình trên máy chủ Ubuntu.

Nếu xác thực bằng SSH key thành công, hãy tiếp tục để tìm hiểu cách tăng cường bảo mật hệ thống của bạn bằng cách vô hiệu hóa xác thực bằng mật khẩu.

Bước 4 — Vô Hiệu Hóa Xác Thực Bằng 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 SSH key cho tài khoản của mình. Tuy nhiên, cơ chế xác thực bằng mật khẩu vẫn đang hoạt động, có nghĩa là máy chủ của bạn vẫn dễ bị tấn công brute-force.

Trước khi hoàn thành 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 SSH key cho tài khoản root trên máy chủ này, hoặc tốt hơn, rằng bạn đã cấu hình xác thực dựa trên SSH key cho một tài khoản không phải root có quyền sudo. Bước này sẽ khóa các đăng nhập bằng mật khẩu, vì vậy việc đảm bảo bạn vẫn có thể truy cập quyền quản trị là rất quan trọng.

Lưu ý: Nếu bạn đã cung cấp một SSH key khi tạo droplet trên DataOnline, xác thực bằng mật khẩu có thể đã bị vô hiệu hóa tự động. Bạn vẫn có thể xác minh điều này bằng cách đọc tiếp.

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 bằng SSH key, dù là dưới dạng root hoặc tài khoản có quyền sudo. Sau đó, mở tệp cấu hình của SSH daemon:

sudo nano /etc/ssh/sshd_config

Bên trong tệp, tìm kiếm chỉ thị có tên PasswordAuthentication. Dòng này có thể bị chú thích bằng dấu # ở đầu dòng. Hãy bỏ chú thích dòng này bằng cách loại bỏ dấu #, 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 sử dụng mật khẩu tài khoản của bạn:

/etc/ssh/sshd_config

. . .
PasswordAuthentication no
. . .

Lưu và đóng tệp khi bạn hoàn tất bằng cách nhấn CTRL+X, sau đó nhấn Y để xác nhận lưu tệp, và cuối cùng nhấn ENTER để thoát nano. Để kích hoạt các thay đổi này, chúng ta cần khởi động lại dịch vụ sshd:

sudo systemctl restart ssh

Để đề phòng, hãy mở một cửa sổ terminal mới và kiểm tra xem dịch vụ SSH có hoạt động đúng không trước khi đóng phiên kết nối hiện tại:

ssh username@remote_host

Khi bạn đã xác minh rằng dịch vụ SSH hoạt động đúng cách, bạn có thể an toàn đóng tất cả các phiên kết nối hiện tại.

SSH daemon trên máy chủ Ubuntu của bạn bây giờ chỉ phản hồi theo xác thực dựa trên SSH key. Các đăng nhập bằng mật khẩu đã bị vô hiệu hóa.

Kết luận

Bây giờ, bạn đã có xác thực dựa trên SSH key đượ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 SSH Essentials.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *