Với máy chủ truy cập qua Internet, SSH key là lựa chọn nên ưu tiên khi người quản trị có thể bảo vệ khóa riêng và quản lý quyền truy cập. Tài liệu Ubuntu đánh giá xác thực bằng khóa có lợi thế trước việc dò đoán mật khẩu. Tuy nhiên, chuyển sang khóa không đồng nghĩa máy chủ tự động an toàn: GitHub cảnh báo người chiếm được máy tính chứa khóa có thể tiếp cận các hệ thống sử dụng khóa đó.
Khác biệt nằm ở cách chứng minh danh tính
Theo hướng dẫn OpenSSH, đăng nhập bằng mật khẩu vẫn diễn ra trong kết nối mã hóa. Không nên hiểu rằng chọn mật khẩu sẽ khiến người nghe lén mạng đọc được nó dưới dạng văn bản rõ. Điểm khác biệt là mật khẩu được gửi tới máy chủ để kiểm tra, còn xác thực bằng khóa yêu cầu máy khách chứng minh mình có khóa riêng tương ứng với khóa công khai được cấp quyền.
Cặp SSH key gồm khóa công khai và khóa riêng. Trong cách triển khai bằng tệp thông thường, khóa công khai nằm trong ~/.ssh/authorized_keys của tài khoản trên máy chủ; khóa riêng được giữ ở máy dùng để đăng nhập. Vì vậy, người quản trị chỉ chuyển tệp có đuôi .pub lên máy chủ. Không gửi khóa riêng cho người hỗ trợ kỹ thuật hoặc đặt nó vào cùng thư mục chia sẻ với khóa công khai.
Passphrase là lớp bảo vệ khóa riêng khi lưu trên thiết bị, khác với mật khẩu tài khoản máy chủ. GitHub hướng dẫn dùng passphrase và ssh-agent để giảm việc nhập lại mỗi lần kết nối. Agent giữ khóa phục vụ xác thực, nên tiện lợi này vẫn đòi hỏi bảo vệ máy làm việc. Khi đánh giá hai phương án, cần xét cả nơi giữ bí mật, thay vì chỉ nhìn việc người dùng có phải gõ mật khẩu hay không.
Một bước riêng biệt là xác minh đúng máy chủ. OpenSSH sử dụng host key và dữ liệu trong known_hosts để kiểm tra danh tính phía nhận kết nối. Khi kết nối lần đầu, nên đối chiếu fingerprint qua kênh quản trị đáng tin cậy. Nếu xuất hiện cảnh báo host key thay đổi, hãy xác minh nguyên nhân trước khi chấp nhận; không tắt kiểm tra chỉ để đăng nhập nhanh hơn.

Chuyển sang SSH key theo từng bước kiểm chứng
Ví dụ dưới đây dành cho máy khách có công cụ OpenSSH và máy chủ Ubuntu dùng dịch vụ ssh.service; thay admin và server.example.com bằng thông tin thực tế. Trước khi sửa cấu hình, hãy giữ phiên quản trị đang hoạt động và chuẩn bị đường console khôi phục. Ubuntu cảnh báo cấu hình sai có thể khiến dịch vụ không khởi động hoặc làm mất quyền truy cập từ xa. Đây là hướng dẫn tham khảo, không phải kết quả thử nghiệm trên máy chủ của bạn.
Bước 1 — tạo khóa trên máy khách: ssh-keygen -t ed25519 -f ~/.ssh/fox9_admin. Ubuntu hiện khuyến nghị Ed25519, và tài liệu GitHub cũng hướng dẫn tạo loại khóa này. Chọn passphrase khi được hỏi; nếu tên tệp đã tồn tại, dừng để kiểm tra trước khi đồng ý ghi đè. Với ví dụ này, fox9_admin là khóa riêng, còn fox9_admin.pub là khóa công khai.
Bước 2 — thêm khóa công khai: ssh-copy-id -i ~/.ssh/fox9_admin.pub [email protected]. Theo tài liệu Debian, tùy chọn -i chỉ định khóa cần cài và công cụ thường thêm khóa vào authorized_keys. Bước này cần một phương thức đăng nhập đang được phép. Nếu hệ thống chưa có ssh-copy-id, có thể thêm nội dung khóa công khai vào authorized_keys bằng kênh quản trị hiện có, sau khi sao lưu tệp.
Bước 3 — mở cửa sổ mới và thử riêng phương thức khóa: ssh -o IdentitiesOnly=yes -o PreferredAuthentications=publickey -o PasswordAuthentication=no -o KbdInteractiveAuthentication=no -i ~/.ssh/fox9_admin [email protected]. Các tùy chọn này giới hạn danh tính và phương thức xác thực phía máy khách. Nếu kết nối thất bại, chưa tắt mật khẩu trên máy chủ; có thể thêm -v để xem thông tin chẩn đoán. Cần phân biệt yêu cầu passphrase mở khóa cục bộ với yêu cầu mật khẩu tài khoản từ xa.
Bước 4 — chỉ sau khi thử thành công mới điều chỉnh chính sách máy chủ. Với mục tiêu chỉ dùng khóa, không triển khai OTP qua keyboard-interactive, cấu hình tham khảo gồm ba dòng riêng: PubkeyAuthentication yes; PasswordAuthentication no; KbdInteractiveAuthentication no. Dấu chấm phẩy ở đây chỉ để phân cách khi trình bày, không chép thành một dòng cấu hình. Nếu đang dùng MFA qua keyboard-interactive, cần giữ và cấu hình phương thức đó theo chính sách hiện có.

Kiểm tra cấu hình và giữ đường khôi phục
Trước khi sửa, sao lưu sshd_config và từng tệp cấu hình bổ sung bị thay đổi. Trên Ubuntu, các tệp trong sshd_config.d có thể quyết định giá trị trước tệp chính; OpenSSH cũng có khối Match áp dụng theo điều kiện. Sau khi sửa, chạy sudo sshd -t để kiểm tra tính hợp lệ, rồi sudo sshd -T để xem cấu hình hiệu lực. Với quy tắc Match, cần kiểm tra thêm bằng tham số -C tương ứng người dùng và địa chỉ kết nối.
Nếu kiểm tra báo lỗi, sửa hoặc phục hồi bản sao lưu trước khi áp dụng. Khi hợp lệ, ví dụ Ubuntu dùng sudo systemctl restart ssh.service. Sau đó mở thêm một kết nối mới để xác nhận khóa vẫn hoạt động và phương thức đã tắt không còn được chấp nhận, rồi mới đóng phiên cũ. Nếu cấu hình mới gây lỗi, dùng phiên còn truy cập được hoặc console để phục hồi đúng các tệp đã sửa, kiểm tra lại bằng sshd -t và khởi động lại dịch vụ.
Quản lý khóa còn bao gồm xử lý thiết bị mất hoặc khóa lộ. Với hệ thống cấp quyền bằng authorized_keys, hãy loại bỏ đúng khóa công khai cũ tại những nơi đã cài và thay bằng khóa mới. Đổi passphrase của bản khóa đang giữ không thay thế việc thu hồi một bản khóa đã bị sao chép. Nếu quên passphrase, OpenSSH không cung cấp cách khôi phục nó; cần tạo cặp khóa mới và cấp quyền lại thông qua đường truy cập còn hợp lệ.


