ReactJS: Cách thiết lập khóa SSH trên Ubuntu
Giới thiệu
SSH, hoặc shell an toàn, là một giao thức đượ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, rất có thể bạn sẽ dành phần lớn thời gian của mình trong một phiên đầu cuối được kết nối với máy chủ của bạn thông qua SSH.
Trong bài hướng dẫn này, chúng tôi sẽ tập trung vào việc thiết lập khóa SSH để cài đặt Ubuntu 18.04. Khóa SSH cung cấp một cách đăng nhập an toàn vào máy chủ của bạn và được khuyến nghị cho tất cả người dùng.
Bước 1 - Tạo Cặp khóa RSA
Bướ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ục bộ của bạn):
ssh-keygen
Theo mặc định ssh-keygen
, sẽ tạo một cặp khóa RSA 2048-bit, đủ an toàn cho hầu hết các trường hợp sử dụng (bạn có thể tùy chọn chuyển vào cờ -b 4096
để tạo khóa 4096-bit lớn hơn).
Sau khi nhập lệnh, bạn sẽ nhận được kết quả 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 của bạn hoặc chỉ định một đường dẫn thay thế.
Nếu trước đây bạn đã tạo cặp khóa SSH, bạn có thể nhận được lời nhắc sau:
Output
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
Nếu bạn chọn ghi đè khóa trên đĩa, bạn sẽ không thể xác thực bằng khóa trước đó nữa. Hãy rất cẩn thận khi chọn có, vì đây là một quá trình phá hủy không thể đảo ngược.
Lời nhắc tiếp theo sẽ yêu cầu bạn nhập cụm mật khẩu an toàn:
Output
Enter passphrase (empty for no passphrase):
Tại đây, bạn có tùy chọn để nhập cụm mật khẩu an toàn, rất được khuyến khích. Cụm mật khẩu bổ sung một lớp bảo mật để ngăn người dùng trái phép đăng nhập.
Tất cả cùng nhau, lệnh ssh-keygen
sẽ trả về kết quả đầu ra 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:
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 khóa công khai và riêng tư mà bạn có thể sử dụng để xác thực. Bước tiếp theo là đặt khóa công khai trên máy chủ của bạn để bạn có thể sử dụng xác thực dựa trên khóa SSH để đăng nhập.
## Bước 2 - Sao chép Khóa Công khai sang Máy chủ Ubuntu
Cách nhanh nhất để sao chép khóa công khai của bạn vào máy chủ Ubuntu là sử dụng một 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
cho bạn trên máy khách của mình, 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 khóa theo cách thủ công).
Sao chép khóa công khai bằng cách sử dụng ssh-copy-id
Công cụ ssh-copy-id
này được bao gồm theo mặc định trong nhiều hệ điều hành, vì vậy bạn có thể có nó trên hệ thống cục bộ của mình.
Lưu ý: Để 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, bạn chỉ định máy chủ lưu trữ 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 SSH công khai của bạn sẽ được sao chép.
Cú pháp như sau:
ssh-copy-id username@remote_host
Bạn có thể nhận được 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ục bộ của bạn không nhận dạng được máy chủ từ xa. Điều này sẽ xảy ra lần đầu tiên bạn kết nối với máy chủ mới. Viết “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 chìa khóa, 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 (sẽ không có gì đượ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 khóa ~/.ssh/id_rsa.pub
của bạn vào một tệp trong thư mục chính của tài khoản từ xa ~/.ssh
được gọi là authorized_keys
.
Bạn sẽ nhận được kết quả 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.
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 khóa công khai bằng SSH
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 tài khoản trên máy chủ của mình, bạn có thể tải lên các khóa của mình bằng phương pháp SSH thông thường. Hãy nhớ rằng, điều này sẽ chỉ hoạt động nếu bạn có 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 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 SSH công khai trên máy tính cục bộ của mình và chuyển thông qua kết nối SSH đến máy chủ từ xa.
Mặt khác, bạn 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 trong tài khoản bạn đang sử dụng.
Sau đó, bạn có thể xuất nội dung bạn đã truyền vào một tệp có tên authorized_keys
trong thư mục này. Sử dụng biểu tượng chuyển hướng >>
để nối nội dung thay vì ghi đè lên. Điều này sẽ cho phép bạn thêm các khóa mà không phải hủy các khóa đã thêm trước đó.
Toàn bộ lệnh hiển thị 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:
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 dạng được máy chủ từ xa. Điều này sẽ xảy ra lần đầu tiên bạn kết nối với máy chủ mới. Viết “yes” và nhấn ENTER
để tiếp tục.
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:
Output
username@203.0.113.1's password:
Sau khi nhập mật khẩu, nội dung của khóa 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 từ xa. Tiếp tục sang Bước 3 nếu việc này thành công.
Sao chép khóa công khai theo cách thủ công
Nếu bạn không có 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 theo cách thủ công.
Phần này trình bày cách nối thủ công nội dung tệp id_rsa.pub
của bạn vào file ~/.ssh/authorized_keys
trên máy tính từ xa của bạn.
Để hiển thị nội dung id_rsa.pub
của bạn, hãy chạy lệnh sau trên máy tính cục bộ của bạn:
cat ~/.ssh/id_rsa.pub
Thao tác này sẽ trả về nội dung của khóa trong đầu ra của lệnh:
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 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 rằng 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 file authorized_keys
trong thư mục này. Bạn có thể thêm nội dung file id_rsa.pub
của mình vào cuối file authorized_keys
, tạo nội dung đó nếu cần. Đối với lệnh này, hãy 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ó phải bắt đầu bằng ssh-rsa AAAA...
:
echo public_key_string >> ~/.ssh/authorized_keys
Cuối cùng, đảm bảo rằng thư mục ~/.ssh
và file authorized_keys
có các quyền thích hợp được đặt:
chmod -R go= ~/.ssh
Điều này sẽ loại bỏ một cách đệ quy 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 khóa cho tài khoản người dùng, thì điều quan trọng là thư mục ~/.ssh
thuộc về người dùng chứ không phải root. Trong hướng dẫn này, người dùng của chúng tôi có tên sammy nhưng bạn nên thay thế tên người dùng thích hợp thành lệnh sau:
chown -R sammy:sammy ~/.ssh
Bây giờ bạn 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.
Bước 3 - Xác thực máy chủ Ubuntu bằng phím SSH
Nếu bạn đã hoàn thành thành công một trong các quy trình ở Bước 2, bạn sẽ có thể đăng nhập vào máy chủ từ xa mà không cần mật khẩu của tài khoản từ xa.
Quá trình này 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 thủ công), bạn có thể 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
Điều này có nghĩa là máy tính cục bộ của bạn không nhận dạng được máy chủ từ xa. Viết “yes” và sau đó 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 cá nhân 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 cá nhân khi tạo khóa, bạn sẽ được nhắc nhập cụm mật khẩu đó (lưu ý rằng các lần nhấn phím của bạn sẽ không hiển thị trong phiên đầu cuối để bảo mật). Sau khi xác thực, một phiên shell mới sẽ mở cho bạn với 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.
Bước 4 - Tắt xác thực mật khẩu trên máy chủ của bạn
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 khóa SSH 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 đang hoạt động, có nghĩa là máy chủ của bạn vẫn bị tấn công brute-force.
Trước khi hoàn thành 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 khóa SSH cho tài khoản gốc trên máy chủ này hoặc tốt hơn là bạn đã định cấu hình xác thực dựa trên khóa SSH cho tài khoản không phải gốc trên máy chủ này. máy chủ với các đặc quyền sudo
. Bước này sẽ khóa các đăng nhập dựa trên mật khẩu, đả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.
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 của bạn bằng khóa SSH, với tư cách là người chủ hoặc bằng tài khoản có đặc quyền sudo
. Sau đó, mở tệp cấu hình SSH daemon:
sudo nano /etc/ssh/sshd_config
Bên trong tệp, tìm kiếm lệnh được gọi là PasswordAuthentication
. Điều này có thể được nhận xét với một #
ở đầ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 của bạn bằng mật khẩu tài khoả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
và ENTER
để thoát nano
. Để kích hoạt những thay đổi này, bạn 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ổ đầu cuối 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:
ssh username@remote_host
Khi bạn đã xác minh rằng dịch vụ SSH của mình đang 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 khóa SSH và xác thực dựa trên mật khẩu đã bị vô hiệu hóa.
Phần kết luận
Bây giờ, bạn đã định cấu hình xác thực dựa trên khóa SSH 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.