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]-----+
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.