Table of Contents

No table of contents

Cách thiết lập SSH key trên Ubuntu 20.04

Posted on: 13 tháng 4 năm 2023

Ubuntu

Giới thiệu

SSH, hoặc vỏ bảo mật, là một giao thức được mã hóa được sử dụng để quản trị và liên lạc với các máy chủ. Khi làm việc với máy chủ Ubuntu, rất có thể bạn sẽ dành phần lớn thời gian của mình cho phiên cuối đượ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, chúng tôi sẽ tập trung vào việc thiết lập các SSH key để cài đặt Ubuntu 20.04. Các SSH key cung cấp một cách 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.

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

  1. ssh-keygen

Theo mặc định, các phiên bản gần đây của ssh-keygen sẽ tạo cặp key 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 chuyển cờ -b 4096 để tạo key 4096 bit lớn hơn).

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

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

Nếu bạn chọn ghi đè lên key trên đĩa, bạn sẽ không thể xác thực bằng key trước đó nữa. Hãy thật cẩn thận khi chọn có, vì đây là một quá trình phá hoại không thể đảo ngược.

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

Output
Enter passphrase (empty for no passphrase):

Tại đây, bạn có thể tùy chọn nhập cụm mật khẩu an toàn, điều này rất được khuyến khích. Cụm mật khẩu thêm một lớp bảo mật bổ sung để 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 chúng tôi về Cách định cấu hình xác thực dựa trên SSH key trên máy chủ Linux.

Sau đó, bạn sẽ thấy đầ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]-----+

Bây giờ bạn có public và private key mà bạn có thể sử dụng để xác thực. Bước tiếp theo là đặt public key trên máy chủ của bạn để bạn có thể sử dụng xác thực dựa trên SSH key để đăng nhập.

Bước 2 - Sao chép public key vào máy chủ Ubuntu của bạn

Cách nhanh nhất để sao chép public key của bạn vào 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 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 key theo cách thủ công).

Sao chép public key bằ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ó sẵn công cụ này 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, 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à:

  1. 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ục bộ của bạn không nhận ra máy chủ từ xa. Điều này sẽ xảy ra trong lần đầu tiên bạn kết nối vớ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 id_rsa.pub key mà chúng tôi đã 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 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 (việc 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 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 ~/.ssh/id_rsa.pub key của bạn vào một tệp trong thư mục ~/.ssh chính của tài khoản từ xa được gọi là authorized_keys.

Bạn sẽ thấy đầu ra 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.

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 sang Bước 3.

Sao chép public key 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, thì bạn có thể tải các key của mình lên 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 public SSH key trên máy tính cục bộ của mình và chuyển nội dung đó thông qua kết nối SSH đến máy chủ từ xa.

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

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

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

  1. 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 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 trong lần đầu tiên bạn kết nối với một 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:

Output
username@203.0.113.1's password:

Sau khi nhập mật khẩu của bạn, nội dung id_rsa.pub key của bạn sẽ được sao chép vào cuối tệp ủy quyền của tài khoản người dùng từ xa. Tiếp tục sang Bước 3 nếu điều này thành công.

Sao chép public key 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 tôi sẽ nối 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ừ xa của bạn.

Để hiển thị nội dung của id_rsa.pub key, hãy nhập nội dung này vào máy tính cục bộ của bạn:

  1. cat ~/.ssh/id_rsa.pub

Bạn sẽ thấy nội dung của key, nội dung này sẽ giống như thế này:

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

  1. 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 cách sử dụng lệnh này:

  1. echo public_key_string >> ~/.ssh/authorized_keys

Trong lệnh trên, hãy 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ó sẽ bắt đầu với ssh-rsa AAAA....

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

  1. chmod -R go= ~/.ssh

Thao tác này sẽ xóa một cách đệ quy tất cả các quyền “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 tài khoản người dùng, điều quan trọng là thư mục ~/.ssh thuộc về người dùng chứ không phải root:

  1. chown -R sammy:sammy ~/.ssh

Trong hướng dẫn này, người dùng của chúng ta có tên là sammy 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ờ chúng tôi có thể thử xác thực không cần 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 của bạn bằng các SSH key

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

Quá trình cơ bản là như nhau:

  1. 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 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ục bộ của bạn không nhận ra máy chủ từ xa. Nhập “yes” rồi nhấn ENTER để tiếp tục.

Nếu bạn không cung cấp cụm mật khẩu cho private key của mình, bạn sẽ đăng nhập ngay lập tức. Nếu bạn đã cung cấp cụm mật khẩu cho private key khi tạo key, bạn sẽ được nhắc nhập mật khẩu đó ngay bây giờ (lưu ý rằng tổ hợp phím của bạn sẽ không hiển thị trong phiên cuối để 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 định cấu hình trên máy chủ Ubuntu.

Nếu xác thực dựa trên 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 cho hệ thống của bạn bằng cách tắt xác thực mật khẩu.

Bước 4 — Vô hiệu hóa 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, thì bạn đã định 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 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ó nguy cơ 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 đã định 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 là bạn đã định cấu hình xác thực dựa trên SSH key cho tài khoản không phải root trên máy chủ này máy chủ có đặc quyền sudo. Bước này sẽ khóa thông tin đăng nhập dựa trên mật khẩu, vì vậy việc đả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ó đặc quyền quản trị, hãy đăng nhập vào máy chủ từ xa bằng SSH key, với quyền root hoặc bằng tài khoản có đặc quyền sudo. Sau đó, mở tệp cấu hình của SSH daemon:

  1. sudo nano /etc/ssh/sshd_config

Bên trong tệp, tìm kiếm lệnh có tên là PasswordAuthentication. Dòng này có thể được nhận xét bằng dấu # ở đầu dòng. Bỏ ghi chú dòng bằng cách xóa # và đặt giá trị thành no. Điều này sẽ vô hiệu hóa khả năng đăng nhập của bạn qua SSH bằng mật khẩu tài khoả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 là ENTER để thoát nano. Để thực sự kích hoạt những thay đổi này, chúng ta cần khởi động lại dịch vụ sshd:

  1. sudo systemctl restart ssh

Để đề phòng, hãy mở một cửa sổ đầu cuối mới và kiểm tra xem dịch vụ SSH có hoạt động bình thường không trước khi đóng phiên hiện tại của bạn:

  1. ssh username@remote_host

Khi bạn đã xác minh rằng dịch vụ SSH của mình đang hoạt động bình thường, 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.

Trình nền SSH trên máy chủ Ubuntu của bạn hiện chỉ phản hồi xác thực dựa trên SSH key. Đăng nhập dựa trên mật khẩu đã bị vô hiệu hóa.

Kết luận

Bây giờ, bạn đã định cấu hình xác thực dựa trên SSH key 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 chúng tôi.

Share

0 replies