Cách thiết lập SSH Keys trên Ubuntu 18.04, chắc chắn thành công trong vài phút

SSH Keys trên Ubuntu 18.04

SSH – hay Secure Shell – là một giao thức mã hóa được sử dụng để quản lý và giao tiếp an toàn với các máy chủ. Khi làm việc với một máy chủ Ubuntu, bạn sẽ dành phần lớn thời gian thao tác qua Terminal được 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 cách thiết lập SSH keys trên hệ điều hành Ubuntu 18.04. Việc sử dụng SSH keys để đăng nhập là một phương pháp bảo mật mạnh mẽ và được khuyến khích cho tất cả người dùng.

Bước 1 — Tạo cặp khóa RSA (RSA Key Pair)

Việc đầu tiên là tạo một cặp khóa trên máy khách (thường là máy tính cá nhân của bạn):

ssh-keygen

Theo mặc định, ssh-keygen sẽ tạo ra một cặp khóa RSA có độ dài 2048-bit, đủ an toàn cho đa số nhu cầu sử dụng. (Nếu bạn muốn tăng cường bảo mật, có thể thêm tham số -b 4096 để tạo khóa 4096-bit).

Sau khi nhập lệnh, bạn sẽ thấy một kết quả như sau:

Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):

Hãy nhấn ENTER để lưu cặp khóa vào thư mục .ssh/ trong thư mục cá nhân của bạn, hoặc nhập một đường dẫn khác nếu muốn.

Nếu bạn đã từng tạo SSH key trước đây, có thể nhận được thông báo:

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

Lưu ý: Nếu bạn chọn ghi đè, bạn sẽ không thể đăng nhập bằng khóa cũ nữa. Hãy cẩn thận!

Sau đó, hệ thống sẽ yêu cầu bạn nhập passphrase:

Enter passphrase (empty for no passphrase):

Ở đây, bạn có tùy chọn nhập một passphrase bảo mật, điều này được khuyến nghị rất cao. Một passphrase sẽ bổ sung thêm một lớp bảo vệ, giúp ngăn chặn những người dùng không được 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ách Tạo SSH Key trên Linux” của chúng tôi.

Toàn bộ quá trình ssh-keygen sẽ cho ra kết quả 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:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
|     ..o         |
|   E o= .        |
|    o. o         |
|        ..       |
|      ..S        |
|     o o.        |
|   =o.+.         |
|. =++..          |
|o=++.            |
+-----------------+

Bây giờ, bạn đã có một Public Key và một Private Key để sử dụng cho việc xác thực. Bước tiếp theo là đưa Public Key lên máy chủ của bạn, từ đó bạn có thể đăng nhập bằng phương thức xác thực dựa trên SSH-key.

SSH Keys Ubuntu 18.04

Bước 2 — Sao chép Public Key lên máy chủ Ubuntu | SSH Keys Ubuntu 18.04

Cách nhanh nhất để sao chép Public Key của bạn lên máy chủ Ubuntu là sử dụng tiện ích có tên ssh-copy-id. Nhờ vào sự đơn giản của nó, phương pháp này được khuyến nghị rất cao nếu có sẵn. Nếu trên máy khách của bạn không có tiện ích 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 đăng nhập bằng mật khẩu, hoặc sao chép khóa thủ công).

Sao chép Public Key Sử dụng ssh-copy-id

Tiện ích ssh-copy-id được cài đặt mặc định trên nhiều hệ điều hành, vì vậy có thể nó đã có sẵn trên hệ thống của bạn.

Lưu ý: Để phương pháp này hoạt động, bạn phải có quyền truy cập SSH bằng mật khẩu vào máy chủ của bạn.

Để sử dụng tiện ích này, bạn chỉ cần chỉ định máy chủ từ xa mà bạn muốn kết nối, cùng với tài khoản người dùng có quyền truy cập SSH bằng mật khẩu. Đây chính là tài khoản mà Public Key của bạn sẽ được sao chép tới.

Cú pháp sử dụng như sau:

ssh-copy-id username@remote_host

Bạn có thể nhận được 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ục bộ của bạn không nhận diện được máy chủ từ xa. Đây sẽ xảy ra khi bạn kết nối lần đầu với một máy chủ mới. Hãy 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 khóa id_rsa.pub mà bạn đã tạo trước đó. 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 trên máy chủ 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 (không hiển thị gì trên màn hình 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 bằng mật khẩu bạn vừa 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ẽ nhận được thông báo sau:

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 Sử dụng SSH

Nếu bạn không có tiện ích ssh-copy-id nhưng có quyền truy cập SSH bằng mật khẩu vào tài khoản trên máy chủ, bạn có thể tải khóa của mình lên bằng phương pháp SSH truyền thống. Lưu ý, phương pháp này chỉ hoạt động nếu bạn có quyền truy cập SSH bằng mật khẩu vào máy chủ của mình.

Bạn có thể thực hiện bằng cách sử dụng lệnh cat để đọc nội dung của Public Key trên máy cục bộ và chuyển nó qua một kết nối SSH đến máy chủ từ xa.

Ở phía máy chủ, 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 với tài khoản bạn đang sử dụng.

Sau đó, bạn có thể chuyển nội dung đã được chuyển qua vào file có tên authorized_keys trong thư mục đó. Sử dụng ký hiệu chuyển hướng >> để nối thêm nội dung vào cuối file thay vì ghi đè lên nó. Điều này cho phép bạn thêm khóa mà không làm mất các khóa đã được thêm trước đó.

Cú pháp đầ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ể nhận được 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ục bộ của bạn không nhận diện được máy chủ từ xa. Đây sẽ xảy ra khi bạn lần đầu tiên kết nối tới một máy chủ mới. Hãy 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 trên máy chủ từ xa:

username@203.0.113.1's password:

Sau khi nhập mật khẩu, nội dung của file id_rsa.pub sẽ được sao chép vào cuối file authorized_keys của tài khoản người dùng trên máy chủ từ xa. Nếu quá trình này thành công, hãy 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 vào máy chủ của mình, bạn sẽ phải hoàn thành quá trình sao chép theo cách thủ công.

Phần này hướng dẫn cách thêm nội dung của file id_rsa.pub vào file ~/.ssh/authorized_keys trên máy chủ từ xa một cách thủ công.

Để hiển thị nội dung của file id_rsa.pub trên máy cục bộ, hãy chạy lệnh:

cat ~/.ssh/id_rsa.pub

Lệnh này sẽ in ra nội dung của khóa:

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 bằng bất kỳ phương thức nào có sẵn.

Khi đã vào được 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 chưa có, 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 mới 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, tạo file nếu cần. Trong lệnh này, thay public_key_string bằng nội dung từ lệnh cat ~/.ssh/id_rsa.pub trên máy cục bộ (nội dung bắt đầu bằng ssh-rsa AAAA...):

echo public_key_string >> ~/.ssh/authorized_keys

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ẽ loại bỏ đệ quy tất cả quyền của nhóm và người dùng khác đối với thư mục ~/.ssh.

Nếu bạn đang sử dụng tài khoản root để thiết lập khóa cho một tài khoản người dùng, điều quan trọng là thư mục ~/.ssh phải thuộc về người dùng đó, chứ không phải root. Trong hướng dẫn này, tài khoản người dùng của chúng ta tên là sammy, nhưng bạn hãy thay thế bằng tên người dùng phù hợp:

chown -R sammy:sammy ~/.ssh

Bây giờ, bạn có thể thử đăng nhập vào máy chủ Ubuntu mà không cần sử dụng mật khẩu.

Bước 3 — Đăng nhập vào Máy chủ Ubuntu Sử dụng SSH Keys | SSH Keys trên Ubuntu 18.04

Nếu bạn đã hoàn thành thành công một trong các phương pháp ở Bước 2, 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 cho tài khoản đó.

Quy trình thực hiện như sau:

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 thủ công), bạn có thể nhận được 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ục bộ của bạn không nhận diện được máy chủ từ xa. Hãy 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ẽ đăng nhập ngay lập tức. Nếu bạn đã thiết lập passphrase khi tạo khóa, bạn sẽ được yêu cầu nhập passphrase (lưu ý rằng khi nhập, các ký tự sẽ không hiển thị trên Terminal vì lý do bảo mật). Sau khi xác thực thành công, một phiên làm việc mới sẽ mở ra với tài khoản đã được cấu hình trên máy chủ Ubuntu.

Nếu việc xác thực dựa trên khóa thành công, hãy chuyển sang tìm hiểu cách bảo mật hệ thống của bạn thêm 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 đã đăng nhập thành công vào tài khoản của mình bằng SSH mà không cần mật khẩu, bạn đã cấu hình thành công xác thực bằng SSH-key cho tài khoản của mình. Tuy nhiên, cơ chế đăng nhập bằng mật khẩu vẫn còn hoạt động, 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 thực hiện 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 SSH-key cho tài khoản root trên máy chủ, hoặc tốt hơn, đã cấu hình xác thực SSH-key cho một tài khoản không phải root có quyền sudo. Bước này sẽ khóa chế độ đăng nhập bằng mật khẩu, đảm bảo rằng bạn vẫn có quyền truy cập quản trị – điều này 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ị, đăng nhập vào máy chủ từ xa bằng SSH-key, bằng 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 này, tìm dòng có tên PasswordAuthentication. Dòng này có thể bị comment bằng dấu # ở đầu dòng. Hãy bỏ dấu # và thay đổi 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:

...
PasswordAuthentication no
...

Lưu và đóng file khi hoàn tất (nhấn CTRL + X, sau đó nhấn Y và ENTER để thoát nano). Để kích hoạt các thay đổi, bạn cần khởi động lại dịch vụ SSH daemon:

sudo systemctl restart ssh

Để đảm bảo an toàn, hãy mở một cửa sổ Terminal mới và kiểm tra lại dịch vụ SSH có hoạt động đúng không trước khi đóng phiên làm việc hiện tại:

ssh username@remote_host

Khi đã xác nhận rằng dịch vụ SSH hoạt động bình thường, bạn có thể đóng an toàn tất cả các phiên làm việc trên máy chủ.

Hiện nay, SSH daemon trên máy chủ Ubuntu của bạn chỉ phản hồi các kết nối sử dụng xác thực bằng SSH-key, và đăng nhập bằng mật khẩu đã bị vô hiệu hóa.

Kết Luận

Bạn bây giờ đã cấu hình thành công xác thực bằng SSH-key trên máy chủ, cho phép bạn đăng nhập mà không cần cung cấp mật khẩu cho 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 SSH Essentials Guide của chúng tôi.

Để 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 *