Ngày đăng: 30 tháng 10 năm 2023
Secure Shell Protocol (hoặc SSH) là giao thức mạng mật mã cho phép người dùng truy cập an toàn vào máy tính từ xa qua mạng không bảo mật.
Mặc dù SSH hỗ trợ xác thực dựa trên mật khẩu nhưng thông thường bạn nên sử dụng SSH key để thay thế. SSH key là một phương pháp đăng nhập vào máy chủ SSH an toàn hơn vì chúng không dễ bị tấn công bởi các cuộc tấn công hack mật khẩu brute-force thông thường.
Việc tạo cặp SSH keys sẽ tạo ra hai chuỗi ký tự dài: public key và private key. Bạn có thể đặt public key trên bất kỳ máy chủ nào, sau đó kết nối với máy chủ bằng ứng dụng khách SSH (SSH client) có quyền truy cập vào private key.
Khi public key và private key khớp nhau, máy chủ SSH sẽ cấp quyền truy cập mà không cần mật khẩu. Bạn có thể tăng cường tính bảo mật cho cặp khóa của mình hơn nữa bằng cách bảo vệ private key bằng cụm mật khẩu tùy chọn (nhưng rất được khuyến khích).
Bước đầu tiên là tạo một cặp khóa trên máy khách. Đây có thể sẽ là máy tính cục bộ của bạn. Nhập lệnh sau vào dòng lệnh cục bộ của bạn:
- ssh-keygen -t ed25519
OutputGenerating public/private ed25519 key pair.
Bạn sẽ thấy thông báo xác nhận rằng quá trình tạo khóa đã bắt đầu và bạn sẽ được nhắc cung cấp một số thông tin mà chúng ta sẽ thảo luận trong bước tiếp theo.
Lưu ý: nếu bạn đang sử dụng hệ thống cũ hơn không hỗ trợ tạo cặp khóa ed25519
hoặc máy chủ bạn đang kết nối không hỗ trợ chúng, thay vào đó, bạn nên tạo một cặp khóa rsa
mạnh:
- ssh-keygen -t rsa -b 4096
Điều này thay đổi cờ -t
“type” thành rsa
và thêm cờ -b 4096
“bit” để tạo khóa 4096 bit.
Lời nhắc đầu tiên từ lệnh ssh-keygen
sẽ hỏi bạn nơi lưu khóa:
OutputEnter file in which to save the key (/home/sammy/.ssh/id_ed25519):
Bạn có thể nhấn ENTER
tại đây để lưu tệp vào vị trí mặc định trong thư mục .ssh
của thư mục chính của bạn.
Ngoài ra, bạn có thể chọn tên tệp hoặc vị trí khác bằng cách nhập tên tệp hoặc vị trí đó sau lời nhắc và nhấn ENTER
.
Lời nhắc thứ hai và cuối cùng từ ssh-keygen
sẽ yêu cầu bạn nhập cụm mật khẩu:
OutputEnter passphrase (empty for no passphrase):
Bạn có muốn sử dụng cụm mật khẩu hay không là tùy thuộc vào bạn, nhưng chúng tôi đặc biệt khuyến khích: tính bảo mật của một cặp khóa, bất kể sơ đồ mã hóa, vẫn phụ thuộc vào thực tế là không ai khác có thể truy cập được nó.
Nếu private key không có cụm mật khẩu rơi vào quyền sở hữu của người dùng trái phép, họ sẽ có thể đăng nhập vào bất kỳ máy chủ nào mà bạn đã định cấu hình bằng public key được liên kết.
Nhược điểm chính của việc có cụm mật khẩu - nhập cụm mật khẩu - có thể được giảm thiểu bằng cách sử dụng dịch vụ ssh-agent
, dịch vụ này sẽ tạm thời lưu trữ khóa đã mở của bạn và giúp máy khách SSH có thể truy cập được. Nhiều tác nhân trong số này được tích hợp với chuỗi khóa (keychain) gốc của hệ điều hành của bạn, giúp quá trình mở khóa trở nên liền mạch hơn.
Tóm lại, toàn bộ quá trình tạo khóa trông như thế này:
- ssh-keygen -t ed25519
OutputGenerating public/private ed25519 key pair.
Enter file in which to save the key (/home/sammy/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sammy.ssh/id_ed25519
Your public key has been saved in /home/sammy/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:EGx5HEXz7EqKigIxHHWKpCZItSj1Dy9Dqc5cYae+1zc sammy@hostname
The key's randomart image is:
+--[ED25519 256]--+
| o+o o.o.++ |
|=oo.+.+.o + |
|*+.oB.o. o |
|*. + B . . |
| o. = o S . . |
|.+ o o . o . |
|. + . ... . |
|. . o. . E |
| .. o. . . |
+----[SHA256]-----+
Public key hiện nằm ở /home/sammy/.ssh/id_ed25519.pub
. Khóa riêng hiện nằm ở /home/sammy/.ssh/id_ed25519
.
Sau khi cặp khóa được tạo, đã đến lúc đặt public key trên máy chủ mà bạn muốn kết nối.
Bạn có thể sao chép public key vào tệp ủy quyền của máy chủ bằng lệnh ssh-copy-id
. Đảm bảo thay thế tên người dùng và địa chỉ ví dụ:
- ssh-copy-id sammy@your_server_address
Sau khi lệnh hoàn tất, bạn sẽ có thể đăng nhập vào máy chủ thông qua SSH mà không bị nhắc nhập mật khẩu. Tuy nhiên, nếu bạn đặt cụm mật khẩu khi tạo SSH key, bạn sẽ được yêu cầu nhập cụm mật khẩu vào thời điểm đó. Đây là ứng dụng khách ssh
cục bộ của bạn yêu cầu bạn giải mã private key, đây không phải là máy chủ từ xa yêu cầu mật khẩu.
Khi bạn đã sao chép các SSH key của mình vào máy chủ, bạn có thể muốn cấm hoàn toàn việc đăng nhập bằng mật khẩu bằng cách định cấu hình máy chủ SSH để tắt xác thực dựa trên mật khẩu.
Cảnh báo: trước khi tắt xác thực dựa trên mật khẩu, hãy chắc chắn rằng bạn có thể đăng nhập thành công vào máy chủ bằng SSH key của mình và không có người dùng nào khác trên máy chủ sử dụng mật khẩu để đăng nhập.
Để tắt xác thực SSH dựa trên mật khẩu, hãy mở tệp cấu hình SSH. Nó thường được tìm thấy ở vị trí sau:
- sudo nano /etc/ssh/sshd_config
Lệnh này sẽ mở tệp trong trình soạn thảo văn bản nano
. Tìm dòng trong tệp bao gồm PasswordAuthentication
(hoặc tạo dòng nếu nó không tồn tại), đảm bảo rằng nó không bị nhận xét bằng #
ở đầu dòng và thay đổi thành no
:
PasswordAuthentication no
Lưu và đóng tập tin khi bạn hoàn tất. Trong nano
, sử dụng CTRL+O
để lưu, nhấn ENTER
để xác nhận tên tệp, sau đó nhấn CTRL+X
để thoát.
Tải lại dịch vụ sshd
để những thay đổi này có hiệu lực:
- sudo systemctl reload sshd
Trước khi thoát phiên SSH hiện tại, hãy tạo kết nối thử nghiệm trong một thiết bị đầu cuối khác để xác minh rằng bạn vẫn có thể kết nối.
Trong hướng dẫn này, chúng tôi đã tạo một cặp SSH key, sao chép public key của chúng tôi vào máy chủ và (tùy chọn) đã tắt hoàn toàn xác thực dựa trên mật khẩu.
Để biết thêm thông tin về SSH và dịch vụ SSH, bao gồm cách thiết lập xác thực đa yếu tố, vui lòng đọc hướng dẫn liên quan của chúng tôi: