SSH, hay secure shell, là một giao thức được mã hóa 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ủ Debian, khả năng cao bạn sẽ dành phần lớn thời gian trong phiên làm việc terminal kết nối đến máy chủ qua SSH.
Trong tài liệu này, DataOnline sẽ tập trung vào việc thiết lập SSH Keys cho một cài đặt Debian 10 nguyên bản. SSH Keys cung cấp một cách đăng nhập dễ dàng và bảo mật cho máy chủ của bạn, do đó được khuyến nghị sử dụng cho tất cả người dùng.
Bước 1 – Tạo bộ 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ủa bạn):
ssh-keygen
Theo mặc định, lệnh ssh-keygen
sẽ tạo ra một cặp khóa RSA 2048-bit, đủ bảo mật cho hầu hết các trường hợp sử dụng (bạn có thể tùy chọn truyền thêm tham số -b 4096
để tạo một khóa 4096-bit lớn hơn).
Sau khi nhập lệnh, bạn sẽ thấy đầu ra như sau:
Output
Nhấn ENTER để lưu cặp khóa vào thư mục con .ssh/
trong thư mục home của bạn, hoặc chỉ định đường dẫn thay thế.
Nếu trước đó bạn đã tạo một cặp SSH Key, bạn có thể thấy thông báo như sau:
Output
Cảnh báo: Nếu bạn chọn ghi đè lên khóa đã có, 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ể đảo ngược.
Sau đó, bạn sẽ thấy thông báo:
Output
Tiếp theo, bạn sẽ thấy đầu ra sau:
Output
Giờ đây, bạn đã có một cặp khóa gồm public và private key để sử dụng trong việc xác thực. Bước tiếp theo là đưa public key lên máy chủ của bạn để có thể sử dụng xác thực dựa trên SSH Key để đăng nhập.
Bước 2 – Sao chép Public Key sang máy chủ Debian
Cách nhanh nhất để sao chép public key sang máy chủ Debian là sử dụng tiện ích ssh-copy-id. Phương pháp này được khuyến nghị vì tính đơn giản của 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ế dưới đây (sao chép qua SSH dùng mật khẩu, hoặc sao chép thủ công).
Sao chép Public Key sử dụng ssh-copy-id
Công cụ ssh-copy-id
được cài sẵn trong nhiều hệ điều hành, vì vậy có thể máy tính của bạn đã có sẵn. Để sử dụng phương pháp này, bạn phải có quyền truy cập SSH bằng mật khẩu vào máy chủ của mình.
Để 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 là tài khoản mà public SSH key của bạn sẽ được sao chép vào.
Cú pháp là:
ssh-copy-id username@remote_host
Bạn có thể thấy thông báo sau:
Output
Tiếp theo, tiện ích sẽ quét tài khoản cục bộ của bạn để tìm file id_rsa.pub
mà bạn đã tạo. Khi tìm thấy, nó sẽ 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:
Output
Bạn sẽ thấy thông báo:
Output
và kiểm tra xem chỉ những SSH key mà bạn mong muốn đã được thêm vào hay chưa.
Ở điểm này, file 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ó ssh-copy-id
nhưng có quyền truy cập SSH bằng mật khẩu vào máy chủ, bạn có thể tải khóa lên bằng cách sử dụng phương pháp SSH truyền thống.
Chúng ta sẽ dùng lệnh cat
để đọc nội dung của public SSH key trên máy tính cục bộ và chuyển nó qua kết nối SSH đến máy chủ từ xa.
Ở phía máy chủ, chúng ta cần đảm bảo thư mục ~/.ssh
tồn tại và có quyền truy cập đúng cho tài khoản đang sử dụng.
Sau đó, chúng ta sẽ chuyển nội dung được truyền qua vào file có tên authorized_keys
trong thư mục đó. Sử dụng ký hiệu chuyển hướng >>
để thêm nội dung mà không ghi đè lên các khóa đã 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:
Output
Đ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 máy chủ từ xa. Lần đầu kết nối đến máy chủ mới, gõ “yes” và nhấn ENTER.
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ủ:
Output
Nhập mật khẩu và sau đó 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. Nếu 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 vào máy chủ, bạn sẽ phải thực hiện quá trình trên theo cách thủ công.
Chúng ta sẽ thêm thủ công nội dung của file id_rsa.pub
vào file ~/.ssh/authorized_keys
trên máy từ xa.
Để hiển thị nội dung của file id_rsa.pub
trên máy cục bộ, gõ:
cat ~/.ssh/id_rsa.pub
Bạn sẽ thấy nội dung của khóa, trông sẽ giống như sau:
Output
Sau khi sao chép khóa công khai, hãy truy cập vào máy chủ từ xa bằng phương pháp có sẵn.
Khi đã truy cập vào 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 cần hoặc không làm gì nếu đã tồn tại:
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. Hãy thêm nội dung của file id_rsa.pub
vào cuối file authorized_keys
(nếu file chưa có, nó sẽ được tạo mới) bằng lệnh:
Trong lệnh trên, thay thế public_key_string
bằng nội dung đầu ra từ lệnh cat ~/.ssh/id_rsa.pub
mà bạn đã chạy trên máy cục bộ. Nội dung này sẽ bắt đầu với 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 này sẽ loại bỏ quyền “group” và “other” cho thư mục ~/.ssh
theo cách đệ quy. 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, điều quan trọng là thư mục ~/.ssh
phải thuộc về tài khoản người dùng đó chứ không phải root:
chown -R sammy:sammy ~/.ssh
Trong hướng dẫn này, tên người dùng của chúng ta là sammy
, nhưng bạn hãy thay thế bằng tên tài khoản phù hợp của mình.
Bây giờ, bạn có thể thử đăng nhập không cần mật khẩu vào máy chủ Debian.
Bước 3 – Xác thực đăng nhập vào máy chủ Debian sử dụng SSH Keys
Nếu bạn đã hoàn thành thành công một trong những 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 cho tài khoản đó.
Quá 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
Điều này có nghĩa là máy tính của bạn chưa nhận diện 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 khóa, bạn sẽ được yêu cầu nhập passphrase (lưu ý rằng phím bấm 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 shell mới sẽ được mở với tài khoản đã cấu hình trên máy chủ Debian.
Nếu việc xác thực bằng SSH Key thành công, bạn có thể chuyển sang bước tiếp theo để tăng cường bảo mật hệ thống 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 vào tài khoản mà không cần mật khẩu bằng SSH Key, tức là bạn đã cấu hình xác thực dựa trên SSH Key thành công cho tài khoản đó. Tuy nhiên, cơ chế xác thực bằng mật khẩu vẫn còn hoạt động, đồng nghĩa với việc 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, cho một tài khoản không phải root nhưng có quyền sudo. Bước này sẽ khóa phương thức đăng nhập bằng mật khẩu, vì vậy việc đảm bảo rằng bạn vẫn có thể truy cập quản trị là điều vô cùng quan trọng.
Sau khi xác nhận rằng 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ủ bằng SSH Key, dưới quyền root hoặc tài khoản có quyền sudo. Sau đó, mở file cấu hình của daemon SSH:
sudo nano /etc/ssh/sshd_config
Trong file này, tìm dòng có chỉ thị PasswordAuthentication
. Dòng này có thể đang bị comment. Hãy bỏ comment và đặt giá trị thành “no”. Việc này sẽ vô hiệu hóa khả năng đăng nhập qua SSH bằng mật khẩu:
Lưu và đóng file khi hoàn tất bằng cách nhấn CTRL + X
, sau đó nhấn Y
để xác nhận lưu file, và cuối cùng nhấn ENTER để thoát khỏi nano. Để áp dụng thay đổi, hãy khởi động lại dịch vụ sshd:
sudo systemctl restart ssh
Để đề phòng, mở một cửa sổ terminal mới và kiểm tra dịch vụ SSH có hoạt động đúng không trước khi đóng phiên đăng nhập hiện tại:
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 kết nối hiện tại.
Daemon SSH trên máy chủ Debian giờ đây chỉ chấp nhận kết nối qua SSH Keys. Việc đăng nhập 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 đã hoàn tất việc cấu hình xác thực bằng SSH Keys trên máy chủ, cho phép đăng nhập an toàn mà không cần phải nhập mật khẩu cho tài khoản. Việc áp dụng SSH Keys không chỉ nâng cao bảo mật hệ thống mà còn giúp tối ưu hóa trải nghiệm quản trị từ xa của bạn. Nếu bạn muốn tìm hiểu sâu hơn về cách làm việc với SSH và khám phá thêm các kỹ thuật quản trị nâng cao, hãy tham khảo các tài liệu Hướng Dẫn Cơ Bản Về SSH của chúng tôi.