Nguyên nhân và cách khắc phục lỗi "Permission denied (publickey)" khi kết nối SSH
Lỗi "Permission denied (publickey)" là một trong những thông báo lỗi phổ biến nhất mà quản trị viên hệ thống gặp phải khi thiết lập kết nối SSH. Lỗi này xuất hiện khi máy chủ từ chối xác thực khóa công khai của bạn, ngăn cản việc truy cập từ xa vào hệ thống. Bài viết này sẽ hướng dẫn bạn cách xác định và khắc phục vấn đề này một cách hiệu quả.
Hiểu rõ về cơ chế xác thực SSH và lỗi publickey
SSH (Secure Shell) là giao thức mạng bảo mật cho phép truy cập từ xa an toàn vào máy chủ. Khi cấu hình SSH sử dụng xác thực khóa công khai, máy chủ sẽ kiểm tra xem khóa được cung cấp có khớp với khóa được ủy quyền hay không. Lỗi "Permission denied (publickey)" xuất hiện khi quá trình xác thực này thất bại, thường do cấu hình không chính xác hoặc vấn đề về quyền truy cập.
Kiểm tra cấu hình SSH cơ bản
Bước đầu tiên khi khắc phục lỗi này là xác minh rằng dịch vụ SSH đang hoạt động và cấu hình cơ bản đã chính xác. Kiểm tra trạng thái của dịch vụ SSH bằng lệnh sau:
sudo systemctl status sshd # hoặc sudo service ssh status
Đảm bảo dịch vụ đang hoạt động và không có thông báo lỗi nào khác. Tiếp theo, kiểm tra file cấu hình SSH tại "/etc/ssh/sshd_config" để xác nhận các thiết lập xác thực:
sudo nano /etc/ssh/sshd_config
Tìm và kiểm tra các dòng sau để đảm bảo xác thực khóa công khai được bật:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
Kiểm tra và sửa quyền truy cập của thư mục và file SSH
Một trong những nguyên nhân phổ biến nhất của lỗi "Permission denied (publickey)" là quyền truy cập không đúng đối với thư mục .ssh và các file bên trong. SSH yêu cầu các quyền truy cập nghiêm ngặt để đảm bảo an ninh. Thực hiện các lệnh sau để thiết lập quyền chính xác:
# Thiết lập quyền cho thư mục home chmod 755 ~ # Thiết lập quyền cho thư mục .ssh mkdir -p ~/.ssh chmod 700 ~/.ssh # Thiết lập quyền cho file authorized_keys touch ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
Đảm bảo rằng chủ sở hữu của các file này là người dùng đang cố gắng đăng nhập, không phải là root hoặc người dùng khác:
chown -R username:username ~/.ssh
Xác minh và cập nhật khóa SSH
Đảm bảo rằng khóa công khai của bạn đã được thêm chính xác vào file authorized_keys trên máy chủ. Nếu bạn chưa tạo cặp khóa SSH, thực hiện lệnh sau trên máy khách:
ssh-keygen -t rsa -b 4096
Sau đó, sao chép khóa công khai vào máy chủ. Có nhiều cách để làm điều này, nhưng phương pháp đơn giản nhất là sử dụng lệnh ssh-copy-id:
ssh-copy-id username@remote_host
Nếu không thể sử dụng ssh-copy-id, bạn có thể thêm khóa thủ công bằng cách sao chép nội dung từ ~/.ssh/id_rsa.pub và thêm vào ~/.ssh/authorized_keys trên máy chủ.
Kiểm tra cấu hình SSH nâng cao trên máy chủ
Đôi khi, các thiết lập SSH nâng cao có thể gây ra lỗi xác thực. Kiểm tra các cài đặt sau trong file sshd_config:
# Kiểm tra các cài đặt liên quan đến xác thực PasswordAuthentication yes # Tạm thời bật để kiểm tra nếu cần ChallengeResponseAuthentication no UsePAM yes # Kiểm tra các hạn chế truy cập AllowUsers username AllowGroups sshusers
Sau khi thực hiện thay đổi, khởi động lại dịch vụ SSH:
sudo systemctl restart sshd # hoặc sudo service ssh restart
Sử dụng chế độ debug để xác định lỗi chính xác
Khi các biện pháp trên không giải quyết được vấn đề, việc sử dụng chế độ debug của SSH có thể cung cấp thông tin chi tiết về lỗi. Thêm cờ -v (có thể lặp lại để tăng mức độ chi tiết) khi kết nối:
ssh -vvv username@remote_host
Đọc kỹ kết quả đầu ra để tìm thông tin về quá trình xác thực và các lỗi cụ thể. Thông thường, thông báo lỗi sẽ chỉ ra chính xác vấn đề và cách khắc phục.
Các trường hợp đặc biệt cần lưu ý
Ngoài các vấn đề phổ biến, có một số trường hợp đặc biệt có thể gây ra lỗi "Permission denied (publickey)":
- SELinux hoặc AppArmor: Các hệ thống bảo mật nâng cao có thể chặn truy cập SSH dù cấu hình đã đúng. Kiểm tra và điều chỉnh chính sách nếu cần.
- Tường lửa: Đảm bảo cổng SSH (thường là 22) không bị chặn bởi tường lửa.
- Định dạng file authorized_keys: File này nên có mỗi khóa trên một dòng, không có dấu cách thừa.
- Thư mục home được mã hóa: Trên một số hệ thống với thư mục home được mã hóa, SSH có thể không truy cập được file authorized_keys.
Kết luận và các biện pháp phòng ngừa
Lỗi "Permission denied (publickey)" thường có thể khắc phục bằng cách kiểm tra cẩn thận cấu hình SSH, quyền truy cập file và quá trình xác thực khóa. Để tránh gặp lại vấn đề này trong tương lai, hãy thiết lập quy trình kiểm tra khi cấu hình SSH mới, luôn giữ bản sao lưu của các cặp khóa quan trọng, và xem xét sử dụng các công cụ quản lý SSH chuyên dụng cho môi trường nhiều máy chủ.
Với những hướng dẫn chi tiết trên, quản trị viên hệ thống có thể hiệu quả khắc phục lỗi "Permission denied (publickey)" và đảm bảo kết nối SSH an toàn, ổn định cho hệ thống của mình.