Cách tạo SSH Key trên Ubuntu 22.04, đơn giản ai cũng làm được

cach thiet lap khoa ssh tren ubuntu 2204 1

SSH (Secure Shell) là một giao thức mã hóa giúp quản lý và giao tiếp với máy chủ một cách an toàn. Để sử dụng, trước tiên Bạn cần tạo SSH Key Ubuntu 22.04. Khi làm việc với một máy chủ Ubuntu, có khả năng cao bạn sẽ dành phần lớn thời gian trong phiên terminal kết nối đến máy chủ thông qua SSH. Hướng dẫn này sẽ tập trung vào cách thiết lập SSH Key trên Ubuntu 22.04. SSH Key cung cấp một phương pháp đăng nhập an toàn hơn và được khuyến nghị sử dụng cho tất cả người dùng.

Bước 1 — Tạo Cặp Key

Bước đầu tiên là tạo một cặp key 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 RSA key 3072-bit, đủ an toàn cho hầu hết các trường hợp sử dụng (bạn có thể tuỳ chọn truyền vào tham số -b 4096 để tạo một key 4096-bit lớn hơn).

Sau khi nhập lệnh, bạn sẽ thấy đầu ra như 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 key 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 một cặp SSH key, bạn có thể thấy thông báo sau:

Output

/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?

Nếu bạn chọn ghi đè key trên đĩa, bạn sẽ không thể xác thực bằng key 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ể đảo ngược.

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

Output

Enter passphrase (empty for no passphrase):

Tại đây, bạn có thể nhập một passphrase bảo mật (không bắt buộc, nhưng được khuyến nghị cao). Passphrase sẽ thêm một lớp bảo mật bổ sung nhằm 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 Cấu Hình Xác Thực Dựa Trên SSH Key Trên Máy Chủ Linux.

Cuối cùng, bạn sẽ nhận được đầu ra tương tự như 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:
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]-----+

SSH Key trên Ubuntu 22.04

Bước 2 — Sao Chép Key Public Lên Máy Chủ Ubuntu

Cách nhanh nhất để sao chép key public của bạn lên máy chủ Ubuntu là sử dụng tiện ích có tên là 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 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ế dưới đây (sao chép qua SSH dùng mật khẩu, hoặc sao chép thủ công).

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

Công cụ ssh-copy-id thường được tích hợp sẵn trong nhiều hệ điều hành, vì vậy có khả năng nó đã có sẵn trên hệ thống 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 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 bằng mật khẩu. Đây chính là tài khoản mà key SSH public của bạn sẽ được sao chép vào.

Cú pháp như sau:

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

Điều 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 lần đầu tiên kết nối tớ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 key id_rsa.pub mà bạn đã tạo. 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 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 nhập mật khẩu thì ký tự không hiển thị để đảm bảo an toàn) 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 key ~/.ssh/id_rsa.pub vào file authorized_keys trong thư mục ~/.ssh 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.

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

Nếu bạn không có ssh-copy-id nhưng vẫn có quyền truy cập SSH bằng mật khẩu đến một tài khoản trên máy chủ, bạn có thể tải key lên bằng phương pháp SSH truyền 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 key SSH public trên máy tính cục bộ và chuyển nội dung đó qua kết nối SSH đến máy chủ từ xa.

Ở phía máy chủ từ xa, hãy đảm bảo rằng thư mục ~/.ssh tồn tại và có quyền truy cập phù hợp cho tài khoản đang dùng. Sau đó, bạn sẽ chuyển nội dung được truyền qua vào file authorized_keys trong thư mục này. Sử dụng ký hiệu chuyển hướng >> để nối thêm nội dung thay vì ghi đè các key đã 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

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

Như trên, điều này cho biết máy tính của bạn chưa nhận diện được máy chủ từ xa. 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 từ xa:

Output

username@203.0.113.1's password:

Khi nhập mật khẩu, nội dung của key id_rsa.pub sẽ được sao chép vào cuối file authorized_keys của tài khoản từ xa. Nếu thành công, 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 bằng mật khẩu đến máy chủ, bạn sẽ phải thực hiện thủ công quá trình sao chép key.

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 key id_rsa.pub, nhập lệnh sau trên máy tính cục bộ của bạn:

cat ~/.ssh/id_rsa.pub

Bạn sẽ thấy nội dung của key, có dạng 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== demo@test

Truy cập vào máy chủ từ xa bằng phương pháp có sẵn.

Sau khi đã truy cập thành công vào tài khoản trên máy chủ từ xa, hãy đả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ó đã có:

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 thêm nội dung của key id_rsa.pub vào cuối file authorized_keys (tạo file này nếu chưa có) bằng lệnh:

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, hãy đảm bảo rằng thư mục ~/.ssh và file authorized_keys có quyền truy cập phù hợp:

chmod -R go= ~/.ssh

Lệnh này sẽ đệ quy loại bỏ tất cả quyền của “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 key cho một tài khoản người dùng, bạn cũng cần đảm bảo rằng thư mục ~/.ssh thuộc về người dùng đó, không phải root:

chown -R sammy:sammy ~/.ssh

Trong hướng dẫn này, người dùng được giả định là sammy; hãy thay thế bằng tên tài khoản phù hợp nếu cần.

Giờ đây, bạn có thể thử xác thực không cần mật khẩu với máy chủ Ubuntu.

Bước 3 — Xác Thực Đăng Nhập Máy Chủ Ubuntu 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ạn sẽ có thể đăng nhập vào máy chủ từ xa mà không cần nhập mật khẩu của tài khoản.

Quá 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 (đặc biệt nếu bạn sử dụng phương pháp thủ công ở trên), 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

Điều này cho biết máy tính của bạn chưa nhận diện được máy chủ từ xa. Nhập “yes” và nhấn ENTER để tiếp tục.

Nếu bạn không cung cấp passphrase cho private key, bạn sẽ được đăng nhập ngay lập tức. Nếu bạn đã thiết lập passphrase, bạn sẽ được yêu cầu nhập nó (lưu ý, các ký tự nhập sẽ không hiển thị vì lý do bảo mật). 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ủ Ubuntu.

Nếu xác thực bằng SSH key thành công, hãy chuyển sang bước cuối cùng để 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ủ

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

Sau khi xác nhận rằng tài khoản từ xa của bạn có quyền quản trị, đăng nhập vào máy chủ từ xa bằng SSH key (dù là qua tài khoản root hoặc tài khoản có quyền sudo). Sau đó, mở file cấu hình của daemon SSH:

sudo nano /etc/ssh/sshd_config

Bên trong file, tìm chỉ thị có tên PasswordAuthentication. Dòng này có thể đang bị comment (đầu dòng có dấu #). Hãy bỏ comment bằng cách xóa 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:

/etc/ssh/sshd_config
. . .
PasswordAuthentication no
. . .

Lưu và đóng file bằng cách nhấn CTRL+X, sau đó Y để xác nhận lưu file, và cuối cùng nhấn ENTER để thoát khỏi nano. Để áp dụng các thay đổi, bạn 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 hiện tại:

ssh username@remote_host

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

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

Kết Luận

Bạn đã cấu hình thành công xác thực dựa trên SSH key cho máy chủ của mình, cho phép bạn đăng nhập mà không cần nhập mật khẩu tài khoản.

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