SSH hay còn gọi là 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 các máy chủ. Khi làm việc với máy chủ Ubuntu, có thể bạn sẽ dành nhiều thời gian trong một phiên terminal được kết nối với máy chủ thông qua SSH. Trong bài viết này, bạn sẽ được hướng dẫn cách cài đặt SSH Keys trên Ubuntu 20.04. Cùng theo dõi nhé.
Bước 1 – Tạo cặp khóa để bắt đầu cài đặt SSH Keys trên Ubuntu 20.04
Bước đầu tiên là tạo cặp khóa trên client (thông thường là máy tính của bạn) bằng lệnh ssh:
ssh-keygen
Phiên bản mặc định gần đây của ssh-keygen
sẽ tạo ra một cặp khóa RSA 3072 bit. Cặp khóa này đủ bảo mật cho bạn sử dụng. Bạn có thể tùy chọn chuyển vào cờ -b 4096
để tạo ra khóa 4096 bit lớn hơn.
Sau khi nhập lệnh trên, 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 chính hoặc bạn có thể chỉ định một đường dẫn khác thay thế.
Nếu trước đó bạn đã tạo ra một cặp khóa SSH, có thể bạn sẽ thấy thông báo như sau:
Output
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
Nếu bạn chọn ghi đè khóa, bạn sẽ không thể sử dụng khóa trước đó nữa. Hãy cẩn thận khi chọn yes. Nếu bạn chọn yes, khóa trước đó sẽ bị hủy và không thể khôi phục.
Sau đó, bạn sẽ thấy thông báo như sau:
Output
Enter passphrase (empty for no passphrase):
Tại đây bạn có thể tùy chọn nhập một passphrase bảo vệ. Passphrase sẽ 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 vào.
Bạn sẽ thấy một output 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]------+
Sau khi hoàn thành bước 1, bạn đã có một cặp khóa công khai và khóa riêng tư sử dụng để xác thực. Bước tiếp theo là đặt khóa công khai lên server để bạn có thể đăng nhập dựa trên xác thực khóa SSH.
Bước 2 – Sao chép khóa công khai đến Ubuntu Server của bạn
Cách nhanh nhất để sao chép khóa công khai đến máy chủ Ubuntu là sử dụng một tiện ích được gọi là ssh-copy-id
. Nếu bạn không có ssh-copy-id
trên client, bạn có thể sử dụng một trong hai phương pháp thay thế (sao chép thông qua SSH dựa trên mật khẩu hoặc sao chép khóa thủ công).
Sao chép khóa công khai bằng ssh-copy-id
Công cụ ssh-copy-id
là công cụ mặc định trên nhiều hệ điều hành. Vì vậy bạn có thể lấy trên hệ thống local của mình. Để để thực hiện phương pháp này, bạn phải đã có quyền truy cập SSH dựa trên mật khẩu đến server của mình.
Để sử dụng tiện ích, bạn chỉ định máy chủ bạn muốn kết nối từ xa và tài khoản người dùng bạn có quyền truy cập SSH dựa trên mật khẩu. Khóa SSH công khai của bạn sẽ được sao chép đến tài khoản này.
Câu lệnh như sau:
ssh-copy-id username@remote_host
Bạn có thể sẽ nhận được 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 có nghĩa là máy tính của bạn không nhận ra máy chủ từ xa. Điều này thường xảy ra khi bạn kết nối với một 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 local của bạn để tìm khóa id_rsa.pub
đã tạo trước đó. Khi tìm thấy khóa này, tiện ích sẽ yêu cầu bạn nhập mật khẩu tài khoản của 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 và nhấn ENTER
. Bạn sẽ không thấy những gì bạn đang gõ vì đây là cách bảo mật. 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 đã cung cấp. Sau đó, nội dung của khóa ~/.ssh/id_rsa.pub
của bạn được sao chép vào một file trong thư mục ~/.ssh
của tài khoản từ xa có tên authorized_keys
.
Bạn sẽ thấy output như bên dưới:
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.
Ở bước 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 đến 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 lại 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ủ. Bạn có thể tải lên các khóa của mình bằng cách sử dụng phương pháp SSH truyền thống.
Sử dụng lệnh cat
để đọc nội dung của khóa SSH công khai trên máy tính. Sau đó, chuyển nội dung đó thông qua một kết nối SSH đến máy chủ từ xa. Bên phía kia, bạn có thể đảm bảo thư mục ~/.ssh
tồn tại và có các quyền đúng dưới tài khoản đang sử dụng.
Bạn có thể xuất nội dung đã truyền qua vào một file được gọi là authorized_keys
trong thư mục này. Hãy sử dụng ký hiệu chuyển hướng >>
để thêm nội dung thay vì ghi đè. Sử dụng chuyển hướng cho phép bạn thêm các khóa mà không hủy bỏ các khóa đã được thêm trước đó.
Lệnh đầy đủ sẽ 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 một thông báo như dưới đây:
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
Máy tính của bạn không nhận ra máy chủ từ xa trong lần đầu tiên kết nối với 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, nội dung khóa id_rsa.pub
của bạn sẽ được sao chép vào cuối file authorized_keys
của tài khoản người dùng từ xa. Nếu thành công, hãy tiếp tục vào Bước 3.
Sao chép khóa công khai bằng cách thủ công
Nếu bạn không có quyền truy cập vào SSH dựa trên mật khẩu đối với máy chủ, bạn có thể thực hiện sao chép thủ công. Nội dung của file id_rsa.pub
của bạn sẽ được thêm vào file ~/.ssh/authorized_keys
trên máy từ xa.
Đầu tiên, bạn cần hiển thị nội dung của khóa công khai id_rsa.pub
bằng cách nhập lệnh này vào máy tính:
cat ~/.ssh/id_rsa.pub
Bạn sẽ thấy nội dung của khóa giống như thế này:
Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9Hg
Sau đó, truy cập vào máy chủ từ xa bằng bất cứ phương pháp bạn có thể. Sau khi truy cập vào máy chủ từ xa, bạn phải đảm bảo thư mục ~/.ssh
đã tồn tại. Nếu thư mục chưa tồn tại bạn hãy thực hiện lệnh dưới đây:
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 có thể thêm nội dung của file id_rsa.pub
vào cuối file authorized_keys bằng lệnh này:
echo public_key_string >> ~/.ssh/authorized_keys
Trong lệnh trên, thay thế public_key_string
bằng kết quả output của lệnh cat ~/.ssh/id_rsa.pub
. Bạn sẽ lấy từ phần ssh-rsa AAAA...
.
Cuối cùng, bạn cần đảm bảo thư mục ~/.ssh
và file authorized_keys
có được thiết lập các quyền thích hợp:
chmod -R go= ~/.ssh
Lệnh này sẽ loại bỏ tất cả các quyền “group” và “other” cho thư mục ~/.ssh/
. Nếu bạn đang sử dụng tài khoản root để thiết lập các khóa cho tài khoản người dùng thì thư mục ~/.ssh
thuộc về người dùng chứ không phải là root:
chown -R sammy:sammy ~/.ssh
Ở bài viết này sử dụng tên người dùng là sammy
, tuy nhiên bạn cần thay thế tên người dùng tương ứng của bạn vào lệnh trên.
Sau khi thực hiện các bước trên, 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 vào máy chủ Ubuntu của bạn bằng khóa SSH
Nếu đã hoàn thành các bước ở phía 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 tài khoản từ xa.
Quá trình đăng nhập cơ bản như nhau:
ssh username@remote_host
Nếu bạn sử dụng phương pháp cuối cùng ở bên trên và đây là lần đầu bạn kết nối với máy chủ, bạn có thể thấy output 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. Gõ “yes” và nhấn ENTER
để tiếp tục.
Nếu bạn không cung cấp mật khẩu cho khóa riêng tư, bạn sẽ đăng nhập được ngay lập tức. Nếu đã cung cấp mật khẩu cho khóa riêng khi tạo khóa, bạn sẽ được nhắc nhập mật khẩu này. Sau khi xác thực, một phiên shell mới sẽ được mở với tài khoản được cấu hình trên máy chủ Ubuntu.
Khi xác thực dựa trên khóa đã thành công, trong bước 4, bạn sẽ được học cách bảo mật hệ thống 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ủ
Nếu bạn đã đăng nhập vào tài khoản bằng cách sử dụng SSH thì bạn đã cấu hình xác thực SSH-key-based thành công 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 vẫn hoạt động. Máy chủ của bạn vẫn có thể bị mở cho các cuộc tấn công bằng mật khẩu.
Trước khi hoàn thành phần này, hãy đảm bảo rằng bạn đã cấu hình xác thực SSH-key-based cho tài khoản root trên máy chủ. Hoặc bạn đã cấu hình xác thực SSH-key-based cho một tài khoản không phải root trên máy chủ với quyền sudo
. Bước này sẽ khóa đăng nhập dựa trên mật khẩu. Vì vậy, bạn cần đảm bảo vẫn có thể truy cập quản trị.
Sau khi xác nhận tài khoản từ xa có quyền quản trị, bạn đăng nhập vào máy chủ với SSH keys dưới tài khoản root hoặc tài khoản với quyền sudo
. Sau đó, mở file cấu hình của demon SSH:
sudo nano /etc/ssh/sshd_config
Trong file này, bạn hãy tìm một chỉ thị gọi là PasswordAuthentication
. Dòng này có thể đã bị chú thích bằng dấu #
ở đầu dòng. Hãy bỏ chú thích dòng đó bằng cách xóa dấu #
và đặt giá trị là no
. Khả năng đăng nhập qua SSH bằng mật khẩu tài khoản sẽ bị vô hiệu hóa:
...
PasswordAuthentication no
...
Lưu và đóng tệp tin 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 file. Cuối cùng nhấn ENTER
để thoát khỏi nano. Để kích hoạt các thay đổi, bạn cần cần khởi động lại dịch vụ sshd
:
sudo systemctl restart ssh
Hãy mở một 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 của bạn:
ssh username@remote_host
Sau khi đã xác nhận dịch vụ SSH hoạt động bình thường, bạn có thể đóng tất cả các phiên làm việc hiện tại trên máy chủ.
Dịch vụ SSH trên máy chủ Ubuntu của bạn hiện chỉ phản hồi đối với xác thực dựa trên SSH-key. Đăng nhập bằng mật khẩu đã bị vô hiệu hóa.
Lời kết
Qua bài viết hướng dẫn về cách cài đặt SSH Keys trên Ubuntu 20.04 này, bạn đã học được cách cấu hình xác thực dựa trên SSH-key trên máy chủ, cho phép đăng nhập mà không cần cung cấp mật khẩu tài khoản. Hy vọng những thông tin chúng tôi cung cấp hữu ích đối với bạn. Nếu bạn có bất cứ thắc mắc gì, hãy để lại bình luận ở bên dưới bài viết này nhé.