Ngày đăng: 8 tháng 4 năm 2024
SSH, hay secure shell, là một giao thức mã hóa được sử dụng để quản trị và liên lạc với 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 terminal session được kết nối với máy chủ của mình 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 SSH keys để cài đặt Ubuntu 22.04. SSH keys cung cấp cách đăng nhập vào máy chủ của bạn một cách an toàn và được khuyến nghị cho tất cả người dùng.
Bước đầu tiên là tạo cặp khóa (key pair) 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 gần đây của ssh-keygen
sẽ tạo 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 ý chuyển cờ -b 4096
để tạo khóa 4096 bit lớn hơn).
Sau khi nhập lệnh, bạn sẽ thấy kết quả đầu ra dưới đây:
OutputGenerating 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 chính của bạn hoặc chỉ định đường dẫn thay thế.
Nếu trước đây bạn đã tạo cặp khóa SSH, 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 đè key lên disk, bạn sẽ không thể xác thực bằng key trước đó nữa. Hãy hết sức 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:
OutputEnter passphrase (empty for no passphrase):
Tại đây, bạn có thể tùy ý 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 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 chúng tôi về Cách định 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ả tương tự như sau:
OutputYour 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ó khóa chung (public key) và khóa riêng (private key) mà bạn có thể sử dụng để xác thực. Bước tiếp theo là đặt khóa chung 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.
Cách nhanh nhất để sao chép khóa chung 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, 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).
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 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à khóa chung SSH 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:
OutputThe 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 khi bạn kết nối với máy chủ mới lần đầu tiên. Gõ “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à chúng ta đã 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 (phần gõ 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 key ~/.ssh/id_rsa.pub
của bạn vào một tệp trong thư mục home ~/.ssh
của tài khoản từ xa có tên là authorized_keys
.
Bạn sẽ thấy đầu ra sau:
OutputNumber 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, key 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.
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 một tài khoản trên máy chủ của mình, bạn có thể tải 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 khóa chung SSH 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 ta 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 đối với tài khoản chúng ta đang sử dụng.
Sau đó, chúng ta có thể xuất nội dung mà chúng tôi chuyển vào một tệp có tên là 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 thêm nội dung thay vì ghi đè nội dung đó. Điều này sẽ cho phép chúng ta thêm key mà không hủy các keys đã thêm trước đó.
Lệnh đầy đủ trông như thế này:
- 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:
OutputThe 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 khi bạn kết nối với máy chủ mới lần đầu tiên. 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:
Outputusername@203.0.113.1's password:
Sau khi nhập mật khẩu, nội dung key 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 từ xa. Tiếp tục sang Bước 3 nếu thành công.
Nếu bạn không có sẵn 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 thủ công nội dung của tệp id_rsa.pub
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 key id_rsa.pub
, hãy nhập nội dung này vào 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, trông giống như thế này:
Outputssh-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 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:
- 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:
- 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ó sẽ bắt đầu bằng 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ó bộ quyền thích hợp:
- chmod -R go= ~/.ssh
Thao tác này sẽ loại bỏ 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:
- chown -R sammy:sammy ~/.ssh
Trong hướng dẫn này, user của chúng tôi được đặt tên là sammy nhưng bạn nên thay thế tên user thích hợp vào lệnh trên.
Bây giờ chúng ta 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.
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 cung cấp mật khẩu của tài khoản từ xa.
Quá trình cơ bản là như nhau:
- 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:
OutputThe 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. Gõ “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 khóa riêng 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 riêng khi tạo khóa, bạn sẽ được nhắc nhập cụm 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 terminal session để bảo mật). Sau khi xác thực, một shell session mới sẽ mở ra cho bạn bằng tài khoản đã định cấu hình trên máy chủ Ubuntu.
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.
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 đã đị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 tất 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 nhất là bạn đã định cấu hình xác thực dựa trên SSH key cho tài khoản non-root trên máy chủ 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 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.
Sau 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 daemon SSH:
- sudo nano /etc/ssh/sshd_config
Bên trong tệp, tìm kiếm lệnh có tên 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 qua SSH bằng mật khẩu tài khoản của bạn:
. . .
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 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
:
- sudo systemctl restart ssh
Để phòng ngừa, hãy mở một cửa sổ 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 hiện tại của bạn:
- ssh username@remote_host
Sau khi xác minh dịch vụ SSH của mình 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.
Daemon 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.
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.