Hướng dẫn cài đặt SSH Keys trên Ubuntu 20.04

SSH Keys Ubuntu 20.04

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

Trong hướng dẫn này, chúng ta sẽ tập trung vào việc thiết lập SSH keys cho cài đặt Ubuntu 20.04. SSH keys cung cấp một cách đăng nhập an toàn vào máy chủ và được khuyến nghị cho mọi người dùng.

Việc tạo một Droplet trên DataOnline sẽ cho phép bạn ngay lập tức thêm SSH keys của máy tính cá nhân, giúp kết nối một cách riêng tư và an toàn.

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 ssh-keygen mới sẽ tạo ra một cặp RSA 3072-bit, đủ an toàn cho hầu hết các trường hợp sử dụng (bạn có thể truyền vào tham số -b 4096 để tạo key có độ dài 4096-bit nếu muốn).

Sau khi nhập lệnh, bạn sẽ thấy thông báo sau:

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 khác.

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

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

Nếu bạn chọn ghi đè key hiện có, 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ì quá trình này là phá hủy và không thể hoàn tác.

Tiếp theo, bạn sẽ được nhắc:

Enter passphrase (empty for no passphrase):

Tại đây, bạn có thể nhập một passphrase an toàn (điều này rất được khuyến nghị) để thêm một lớp bảo mật bổ sung, giúp 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 Tạo SSH Key Linux nói chung cho người mới bắt đầu.

Sau đó, bạn sẽ thấy thông báo như sau:

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ó một cặp key Public và Private để xác thực. Bước tiếp theo là đưa Public key lên máy chủ để sử dụng phương pháp xác thực bằng SSH keys.

Bước 2 – Sao chép Public key lên máy chủ Ubuntu của bạn

Cách nhanh nhất để sao chép Public key lên máy chủ Ubuntu là sử dụng tiện ích ssh-copy-id. Vì sự đơn giản của nó, phương pháp này rất được khuyến nghị nếu tiện ích 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ế đượ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 thủ công key).

Sao chép Public key bằng ssh-copy-id

Tiện ích ssh-copy-id thường được cài đặt sẵn trên nhiều hệ điều hành, vì vậy có khả năng nó đã có 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 tới máy chủ.

Để sử dụng tiện ích, bạn chỉ cầ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 chính là tài khoản mà Public key của bạn sẽ được sao chép đến.

Cú pháp là:

ssh-copy-id username@remote_host

Bạn có thể thấy thông báo sau:

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. Đây là thông báo thường gặp 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 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ẽ nhắc bạn nhập mật khẩu của tài khoản người dùng từ xa:

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

Bạn sẽ thấy thông báo:

Output Number of key(s) added: 1

Bây giờ, thử đăng nhập vào máy chủ bằng lệnh:

ssh username@203.0.113.1

và kiểm tra xem chỉ có các key bạn mong muốn được thêm vào hay không.

Sao chép Public key bằng SSH

Nếu bạn không có ssh-copy-id nhưng có quyền truy cập SSH dựa trên mật khẩu, bạn có thể tải key lên bằng phương pháp SSH thông thường. Bạn có thể sử dụng lệnh cat để đọc nội dung của file Public key trên máy cục bộ và chuyển nó qua kết nối SSH tới máy chủ từ xa.

Trước tiên, hãy đảm bảo rằng thư mục ~/.ssh trên tài khoản từ xa đã tồn tại và có quyền phù hợp. Sau đó, bạn sẽ chuyển nội dung đó vào file authorized_keys trong thư mục đó. Sử dụng ký hiệu redirect >> để thêm nội dung vào cuối file mà không ghi đè lên nội dung đã 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 thông báo:

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ập “yes” và nhấn ENTER. Sau đó, bạn sẽ được nhắc nhập mật khẩu của tài khoản người dùng từ xa:

username@203.0.113.1's password:

Nhập mật khẩu, và nội dung của file id_rsa.pub sẽ được thêm vào cuối file authorized_keys của tài khoản từ xa.

Sao chép Public key thủ công

Nếu bạn không có quyền truy cập SSH dựa trên mật khẩu, bạn sẽ phải thực hiện thủ công quá trình này.

Đầu tiên, hiển thị nội dung của file id_rsa.pub bằng lệnh:

cat ~/.ssh/id_rsa.pub

Bạn sẽ thấy nội dung key, bắt đầu bằng

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

Sau đó, đăng nhập vào máy chủ từ xa theo cách bạn có thể (ví dụ: qua giao diện web hay một phương thức khác) và đảm bảo rằng thư mục ~/.ssh tồn tại. Tạo thư mục nếu cần bằng lệnh:

mkdir -p ~/.ssh

Tiếp theo, thêm nội dung của Public key vào file authorized_keys (tạo file nếu chưa có) bằng lệnh:

echo public_key_string >> ~/.ssh/authorized_keys

Trong lệnh trên, thay public_key_string bằng nội dung mà bạn đã sao chép từ file ~/.ssh/id_rsa.pub.

Cuối cùng, đả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

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, hãy chắc chắn rằng thư mục ~/.ssh thuộc về tài khoản người dùng đó, ví dụ:

chown -R sammy:sammy ~/.ssh

(Ở đây, tài khoản mẫu là “sammy”; bạn thay thế bằng tên tài khoản phù hợp.)

Bây giờ, bạn có thể thử đăng nhập mà không cần mật khẩu.

Bước 3 – Xác thực tới máy chủ Ubuntu bằ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 vẫn là:

ssh username@remote_host

Nếu đây là lần đầu bạn kết nối tới máy chủ này (đặc biệt nếu sử dụng phương pháp sao chép thủ công), bạn có thể thấy thông báo:

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 chưa nhận diện được máy chủ từ xa. Hãy gõ “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 đã cung cấp passphrase khi tạo private key, bạn sẽ được nhắc nhập passphrase ngay bây giờ (lưu ý rằng các phím bạn nhập sẽ không hiển thị trong phiên terminal vì lý do bảo mật). 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.

Nếu xác thực bằng 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 hệ thống của bạn bằng cách vô hiệu hóa đăng nhập bằng mật khẩu.

Bước 4 – Vô hiệu hóa đăng nhập 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 của mình bằng SSH mà không cần mật khẩu, điều đó có nghĩa là bạn đã cấu hình thành công việc xác thực dựa trên SSH keys 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 đang hoạt động, tức là máy chủ của bạn vẫn có thể 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 đã cấu hình xác thực dựa trên SSH keys cho tài khoản root trên máy chủ này, hoặc tốt hơn, đã cấu hình xác thực dựa trên SSH keys 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 việc đảm bảo bạn vẫn có thể truy cập quyền quản trị là điều rất quan trọng.

Sau khi xác nhận tài khoản từ xa của bạn có quyền quản trị, hãy đăng nhập vào máy chủ từ xa bằng SSH keys, dù là với tài khoản root hoặc tài khoản có quyền sudo. Sau đó, mở file cấu hình của SSH daemon:

sudo nano /etc/ssh/sshd_config

Trong file, tìm dòng có chỉ thị PasswordAuthentication. Dòng này có thể bị chú thích bằng dấu # ở đầu. Bỏ chú thích dòng này (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.

Ví dụ, trong file /etc/ssh/sshd_config, bạn sẽ thấy:

. . .
PasswordAuthentication no
. . .

Sau đó, lưu và đóng file (nhấn CTRL+X, sau đó Y để xác nhận lưu và nhấn ENTER để thoát). Để áp dụng thay đổi, khởi động lại dịch vụ sshd:

sudo systemctl restart ssh

Để đảm bảo mọi thứ hoạt động đúng, mở một cửa sổ terminal mới và thử đăng nhập:

ssh username@remote_host

Sau khi kiểm tra, bạn có thể đóng tất cả các phiên làm việc hiện tại. Máy chủ Ubuntu bây giờ chỉ chấp nhận đăng nhập bằng SSH keys, và đăng nhập bằng mật khẩu đã bị vô hiệu hóa.

Kết luận

Bây giờ, bạn đã cấu hình thành công xác thực dựa trên SSH keys trên máy chủ của mình, cho phép đăng nhập mà không cần nhập mật khẩu. Nếu bạn muốn tìm hiểu thêm về cách làm việc với SSH, hãy tham khảo “SSH Essentials Guide”.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *