Reading Time: 8 minutes

SSH, viết tắt của secure shell, là một giao thức mã hóa được sử dụng để quản trị và giao tiếp với máy chủ. Khi làm việc với một máy chủ Ubuntu, chúng ta thường sẽ dành phần lớn thời gian trong một phiên terminal, kết nối với máy chủ thông qua SSH.

thiết lập SSH Keys trên Ubuntu 22.04

Trong hướng dẫn này, chúng ta sẽ tập trung vào cách thiết lập SSH keys trên Ubuntu 22.04. SSH key cung cấp một phương thức đăng nhập an toàn vào máy chủ và là lựa chọn nên ưu tiên sử dụng cho mọi người dùng.

Bước 1: Tạo cặp khóa

Bước đầu tiên là tạo một cặp khóa trên máy client (thường là máy tính cá nhân của bạn):

ssh-keygen

Theo cấu hình mặc định, các phiên bản ssh-keygen gần đây 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ũng có thể tùy chọn thêm tham số -b 4096 để tạo khóa 4096 bit có độ dài lớn hơn).

Sau khi nhập lệnh, bạn sẽ thấy kết quả 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 khóa vào thư mục con .ssh/ trong thư mục home, hoặc chỉ định một đường dẫn khác nếu muốn.

Nếu bạn đã từng tạo cặp SSH key trước đó, có thể sẽ thấy thông báo như sau:

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

Nếu chọn ghi đè lên khóa hiện có trên đĩa, bạn sẽ không thể xác thực bằng khóa cũ nữa. Thế nên, phải hết sức cẩn trọng khi chọn “yes”, vì đây là một thao tác phá huỷ dữ liệu không thể hoàn tác.

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

Output
Enter passphrase (empty for no passphrase):

Tại đây, bạn nên nhập một cụm mật khẩu an toàn. Cụm mật khẩu này tăng cường thêm một lớp bảo mật, giúp ngăn chặn truy cập trái phép. Để tìm hiểu thêm về bảo mật, bạn có thể tham khảo hướng dẫn của chúng tôi về cách cấu hình xác thực bằng SSH key trên máy chủ Linux.

Tiếp theo, bạn sẽ nhận được kết quả 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]-----+

Lúc này, bạn đã có một cặp khóa công khai và riêng tư mà bạn có thể dùng để xác thực. Bước tiếp theo là đưa khóa công khai lên máy chủ để chúng ta có thể sử dụng xác thực bằng SSH key khi đăng nhập.

Bước 2: Sao chép khóa công khai lên máy chủ Ubuntu

Cách nhanh nhất để sao chép khóa công khai vào máy chủ Ubuntu là sử dụng tiện ích ssh-copy-id. Nhờ vào tính đơn giản và hiệu quả, phương pháp này là lựa chọn ưu tiên nếu hệ thống của bạn có hỗ trợ. Nếu máy client 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ế được trình bày trong phần này (sao chép thông qua SSH có mật khẩu hoặc sao chép thủ công).

Sao chép khóa công khai bằ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 có thể nó đã có sẵn trên hệ thống của bạn. Để sử dụng phương pháp này, bạn cần có quyền truy cập SSH bằng mật khẩu đến máy chủ.

Để sử dụng tiện ích, bạn cần chỉ định máy chủ từ xa muốn kết nối và tài khoản người dùng có thể đăng nhập bằng SSH với mật khẩu. Khóa SSH công khai sẽ được sao chép vào tài khoản này.

Cú pháp như sau:

ssh-copy-id username@remote_host

Thông báo gửi đến có nội dung 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

Đ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. Thông báo này sẽ xuất hiện khi lần đầu kết nối đến một máy chủ mới. Gõ “yes” và nhấn ENTER để tiếp tục.

Tiện ích sẽ quét tài khoản người dùng hiện tại để tìm khóa id_rsa.pub mà chúng ta đã tạo trước đó. Khi tìm thấy, chương trình 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 ý, ký tự mà bạn gõ sẽ không hiển thị vì lý do bảo mật) rồi nhấn ENTER. Tiện ích sẽ sử dụng mật khẩu này để kết nối với tài khoản trên máy chủ từ xa, sau đó sao chép nội dung khóa ~/.ssh/id_rsa.pub vào tệp authorized_keys trong thư mục ~/.ssh của tài khoản đó.

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

Lúc này, khóa công khai id_rsa.pub đã được tải lên tài khoản từ xa. Bạn có thể chuyển sang bước 3.

Sao chép khóa công khai bằ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 vào máy chủ, bạn có thể tải khóa bằng phương pháp thủ công qua dòng lệnh SSH.

Chúng ta sẽ sử dụng lệnh cat để đọc nội dung khóa SSH công khai từ máy cục bộ, sau đó truyền nội dung đó qua kết nối SSH đến máy chủ từ xa.

Về phía máy chủ, bạn phải có sẵn thư mục ~/.ssh và quyền truy cập.

Chúng ta sẽ chuyển nội dung nhận được vào tệp authorized_keys trong thư mục này. Sử dụng ký hiệu >> để nối nội dung vào cuối tệp thay vì ghi đè, nhằm tránh xóa các khóa đã có 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

Điều này có nghĩa là máy cục bộ chưa nhận diện được máy chủ từ xa. Thông báo này là bình thường khi kết nối lần đầu. Gõ yes và nhấn ENTER để tiếp tục.

Sau đó, hệ thống sẽ 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:

Sau khi nhập mật khẩu, nội dung khóa id_rsa.pub sẽ được sao chép vào cuối tệp authorized_keys của tài khoản từ xa. Nếu thao tác thành công, bạn có thể tiếp tục sang bước 3.

Sao chép khóa công khai thủ công

Nếu bạn không thể truy cập SSH bằng mật khẩu đến máy chủ, bạn sẽ cần thực hiện toàn bộ quá trình bằng thủ công.

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

Trên máy cục bộ, nhập lệnh sau để hiển thị nội dung của khóa:

cat ~/.ssh/id_rsa.pub

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

Truy cập máy chủ từ xa bằng bất kỳ phương thức nào có thể.

Khi đã đăng nhập vào tài khoản trên máy chủ, bạn phải có sẵn thư mục ~/.ssh. Chạy lệnh sau để tạo thư mục nếu cần (nếu đã có sẵn, lệnh này sẽ không hoạt động):

mkdir -p ~/.ssh

Tiếp theo, tạo hoặc chỉnh sửa tệp authorized_keys trong thư mục này. Dán nội dung của khóa công khai id_rsa.pub vào cuối tệp 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 đầy đủ của khóa cat ~/.ssh/id_rsa.pub mà bạn vừa hiển thị trên máy cục bộ (bắt đầu bằng ssh-rsa AAAA...).

Cuối cùng, đảm bảo thư mục ~/.ssh và tệp authorized_keys có quyền truy cập phù hợp:

chmod -R go= ~/.ssh

Lệnh này sẽ loại bỏ toàn bộ quyền truy cập của “group” và “others” đố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 khác, thư mục ~/.ssh phải thuộc sở hữu của người dùng đó chứ không phải root:

chown -R sammy:sammy ~/.ssh

Trong ví dụ này, tên người dùng là sammy, bạn hãy thay thế bằng tên phù hợp.

Giờ đây, chúng ta có thể thử đăng nhập vào máy chủ Ubuntu mà không cần mật khẩu.

Bước 3: Xác thực với máy chủ Ubuntu bằng SSH key

Nếu bạn đã hoàn tất 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 từ xa.

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

ssh username@remote_host

Nếu đây là lần đầu tiên bạn kết nối đến máy chủ (đặc biệt nếu bạn đã sử dụng phương pháp thủ công trước đó), 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 cho biết máy tính chưa xác thực máy chủ từ xa. Nhập “yes” rồi nhấn ENTER để tiếp tục.

Nếu không đặt cụm mật khẩu cho khóa riêng khi tạo khóa, bạn sẽ được đăng nhập ngay lập tức. Nếu đã đặt passphrase, hệ thống sẽ yêu cầu bạn nhập nó ngay lúc này (lưu ý, các ký tự bạn gõ sẽ không hiển thị vì lý do bảo mật). Sau khi xác thực thành công, một phiên shell mới sẽ được mở ra với tài khoản đã cấu hình trên máy chủ Ubuntu.

Nếu quá trình xác thực bằng SSH key diễn ra thành công, bạn có thể tiếp tục tìm hiểu cách tăng cường bảo mật hệ thống 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 đã có thể đăng nhập vào tài khoản thông qua SSH mà không cần mật khẩu, nghĩa là bạn đã thiết lập thành công cơ chế xác thực bằng SSH key. Tuy nhiên, phương thức xác thực bằng mật khẩu vẫn đang được kích hoạt, điều này khiến máy chủ vẫn tồn tại nguy cơ bị tấn công bằng hình thức dò mật khẩu.

Trước khi thực hiện các bước dưới đây, bạn phải thiết lập xác thực bằng SSH key cho tài khoản root trên máy chủ này, hoặc tốt hơn là thiết lập SSH key cho một tài khoản không phải root nhưng có quyền sudo. Bước này sẽ khóa hoàn toàn khả năng đăng nhập bằng mật khẩu nên bạn vẫn phải có quyền truy cập quản trị – Đây là điều bắt buộc.

Lưu ý: Nếu bạn đã cung cấp SSH key trong quá trình tạo Droplet trên DigitalOcean, xác thực bằng mật khẩu có thể đã được tắt tự động. Bạn vẫn có thể kiểm tra lại bằng cách làm theo hướng dẫn dưới đây.

Sau 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 sử dụng SSH key để đăng nhập vào máy chủ từ xa, dưới vai trò root hoặc người dùng có quyền sudo. Sau đó, mở tệp cấu hình của SSH daemon:

sudo nano /etc/ssh/sshd_config

Trong tệp cấu hình, tìm dòng có tên PasswordAuthentication. Dòng này có thể đang bị ghi chú bằng dấu # ở đầu. Hãy bỏ dấu # nếu có và chỉnh lại giá trị thành no để vô hiệu hóa khả năng đăng nhập qua mật khẩu:

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

Sau đã chỉnh xong, nhấn CTRL+X để thoát, sau đó nhấn Y để xác nhận lưu tệp, và cuối cùng nhấn ENTER để thoát khỏi nano. Để các thay đổi có hiệu lực, bạn cần khởi động lại dịch vụ SSH daemon:

sudo systemctl restart ssh

Để đảm bảo an toàn, trước khi đóng phiên, bạn hãy mở một cửa sổ terminal mới và thử kết nối SSH để kiểm tra xem dịch vụ có đang hoạt động bình thường hay không:

ssh username@remote_host

Khi đã xác nhận dịch vụ SSH hoạt động đúng cách, bạn có thể yên tâm đóng các phiên làm việc hiện tại với máy chủ.

Lúc này, SSH daemon trên máy chủ Ubuntu của bạn chỉ còn chấp nhận xác thực bằng SSH key. Cơ chế đăng nhập bằng mật khẩu đã bị vô hiệu hóa hoàn toàn.

Kết luận

Đến đây, bạn đã thiết lập xong xác thực bằng SSH key trên máy chủ, cho phép đăng nhập mà không cần mật khẩu tài khoản.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất