Trong hướng dẫn này, bạn sẽ tập trung vào việc thiết lập SSH Key CentOS 7. SSH keys mang lại một cách đăng nhập trực tiếp và bảo mật cho máy chủ của bạn, và đây là phương pháp được khuyến nghị dành cho tất cả người dùng.
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ủ CentOS, khả năng cao bạn sẽ dành phần lớn thời gian của mình trong một phiên làm việc trên terminal được kết nối với máy chủ qua SSH.
Bước 1 — Tạo Cặp Key RSA – Các bước tạo SSH Key CentOS 7
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ủa bạn):
ssh-keygen
Mặc định, lệnh ssh-keygen
sẽ tạo ra một cặp khóa RSA với độ dài 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 truyền vào tham số -b 4096
để tạo khóa dài hơn với 4096 bit).
Sau khi nhập lệnh, bạn sẽ thấy lời nhắc 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 khác.
Nếu trước đó bạn đã tạo cặp khóa SSH, có thể bạn sẽ thấy lời nhắc sau:
Output
/home/your_home/.ssh/id_rsa already exists. Overwrite (y/n)?
Nếu bạn chọn ghi đè lên khóa có sẵn, bạn sẽ không thể xác thực bằng khóa cũ nữa. Hãy cẩn thận khi chọn “yes”, vì đây là quá trình phá hủy không thể hoàn tác.
Sau đó, bạn sẽ thấy lời nhắc sau:
Output
Enter passphrase (empty for no passphrase):
Tại đây, bạn có thể nhập một passphrase bảo mật (khuyến khích nên sử dụng) để thêm một lớp bảo vệ bổ sung nhằm ngăn chặn người dùng trái phép đăng nhập. Để biết thêm thông tin về bảo mật, hãy tham khảo hướng dẫn “How To Configure SSH Key-Based Authentication on a Linux Server.”
Sau đó, bạn sẽ thấy kết quả 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 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ủ để bạn có thể sử dụng xác thực bằng SSH-key-based để đăng nhập.
Bước 2 — Sao chép Public Key lên Máy chủ CentOS – Các bước tạo SSH Key CentOS 7
Cách nhanh nhất để sao chép Public Key của bạn lên máy chủ CentOS là sử dụng tiện ích có tên 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 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 bằng mật khẩu hoặc sao chép thủ công).
Sao chép Public Key Sử dụ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ó thể trên hệ thống của bạn đã có sẵn. Để 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 đến 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 bằng mật khẩu. Đây chính là tài khoản mà Public SSH key của bạn sẽ được sao chép vào.
Cú pháp:
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ục bộ của bạn không nhận diện đượ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 đến một máy chủ mới. 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 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:
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, các ký tự sẽ không 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 bằng mật khẩu bạn vừa nhập, sau đó sao chép nội dung của file ~/.ssh/id_rsa.pub
vào file authorized_keys
nằm 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.
Tại thời điểm này, Public Key (id_rsa.pub
) của bạn đã được tải lên tài khoản từ xa. Bạn có thể chuyển 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 vẫn có quyền truy cập SSH bằng mật khẩu đến tài khoản trên máy chủ, bạn có thể tải khóa lên bằng phương pháp SSH thông thường.
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 tính cục bộ và chuyển nội dung đó qua kết nối SSH tới 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 đúng cho tài khoản bạn đang sử dụng.
Sau đó, bạn sẽ chuyển nội dung được truyền qua vào một file có tên authorized_keys
trong thư mục đó. Bạn sử dụng ký hiệu chuyển hướng >>
để nối nội dung vào cuối file thay vì ghi đè nó, cho phép bạn thêm khóa mà không làm mất các khóa đã có.
Câu 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
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. Lần đầu tiên kết nối tới máy chủ mới, gõ “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 trên máy chủ:
Output
username@203.0.113.1's password:
Sau khi nhập mật khẩu, nội dung của Public 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 quá trình 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 hoàn thành quá trình này thủ công.
Bạn sẽ phải tự 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 Public Key, hãy nhập lệnh sau trên máy tính cục bộ:
cat ~/.ssh/id_rsa.pub
Bạn sẽ thấy nội dung của khóa, 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
Đăng nhập vào máy chủ từ xa bằng phương pháp có sẵn của bạn.
Sau khi truy cập đượ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 nó chưa có, hoặc không làm gì nếu đã 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. Thêm nội dung của file id_rsa.pub
vào cuối file authorized_keys
(tạo mới 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 kết quả đầu ra của lệnh cat ~/.ssh/id_rsa.pub
mà bạn đã thực hiện trên máy cục bộ. Nội dung 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 thích hợp:
chmod -R go= ~/.ssh
Lệnh trên sẽ xóa đệ quy tất 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, cũng cần đảm bảo rằng thư mục ~/.ssh
thuộc về người dùng chứ không phải root. Ví dụ, nếu tên người dùng là sammy
(hãy thay thế bằng tên phù hợp), sử dụng lệnh:
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ủ CentOS của mình.
Bước 3 — Xác Thực với Máy Chủ CentOS 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 mật khẩu của tài khoản từ xa.
Quy trình cơ bản vẫ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ủ (đặc biệt nếu bạn dùng phương pháp thủ công ở trên), bạn có thể thấy 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 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 lúc này. Sau khi xác thực, một phiên shell mới sẽ mở cho bạn với tài khoản được cấu hình trên máy chủ CentOS.
Nếu xác thực bằng SSH key thành công, hãy chuyển sang bước tiếp theo để tăng cường bảo mật hệ thống bằng cách tắt 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 có thể đăng nhập vào tài khoản của mình qua 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-based cho tài khoản của mình. Tuy nhiên, cơ chế xác thực 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 dễ 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 đã cấu hình xác thực bằng SSH key cho tài khoản root trên máy chủ, hoặc tốt hơn là, đã cấu hình xác thực bằng SSH key cho tài khoản người dùng không phải root có quyền sudo. Bước này sẽ khóa việc đăng nhập qua mật khẩu, vì vậy hãy đảm bảo rằng bạn vẫn có thể truy cập với quyền quản trị.
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, dưới dạng root hoặc tài khoản có quyền sudo. Sau đó, mở file cấu hình của daemon SSH:
sudo vi /etc/ssh/sshd_config
Bên trong file, tìm directive có tên PasswordAuthentication
. Có thể dòng này đang bị chú thích. Nếu vậy, nhấn phím i
để vào chế độ chèn, và bỏ chú thích dòng bằng cách xóa dấu #
ở đầu dòng. Khi tìm thấy directive, hãy đặt giá trị của nó 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:
File cấu hình /etc/ssh/sshd_config
sẽ có nội dung như sau:
/etc/ssh/sshd_config ... PasswordAuthentication no ...
Khi bạn đã xong chỉnh sửa, nhấn ESC rồi gõ :wq
để lưu thay đổi và thoát khỏi trình soạn thảo. Để áp dụng các thay đổi, bạn cần khởi động lại dịch vụ sshd:
sudo systemctl restart sshd.service
Để đảm bảo an toàn, hãy mở một cửa sổ terminal mới và kiểm tra rằng dịch vụ SSH đang hoạt động bình thường trước khi đóng phiên làm việc hiện tại:
ssh username@remote_host
Khi đã xác nhận dịch vụ SSH hoạt động ổn định, bạn có thể đóng tất cả các phiên làm việc hiện tại.
Daemon SSH trên máy chủ CentOS của bạn giờ chỉ phản hồi với SSH keys. Xác thực bằng mật khẩu đã được vô hiệu hóa thành công.
Kết luận
Bây giờ, bạn đã cấu hình thành công xác thực bằng SSH-key-based 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 cho tài khoản.