Máy chủ SSH của GitHub Giờ Yêu Cầu Tệp .pub – Đây Là Lý Do
Một lập trình viên gặp lỗi git pull khi giao diện SSH của GitHub bắt đầu từ chối yêu cầu publickey ký trực tiếp. Giải pháp: tạo tệp .pub từ khóa riêng tư.
Một lập trình viên báo cáo rằng git pull đột nhiên thất bại với lỗi Permission denied (publickey) trên một máy không có gì thay đổi. Khóa riêng tư hợp lệ, thuật toán chữ ký là rsa-sha2-512, và các máy khác với khóa khác hoạt động bình thường. Thủ phạm? Một tệp .pub bị thiếu.
Hố Thỏ Gỡ Lỗi
Khóa đã vượt qua openssl rsa -check, ~/.ssh/config sạch sẽ, và trang trạng thái của GitHub hiển thị xanh. Tuy nhiên, xác thực vẫn thất bại. Giải pháp là tạo tệp khóa công khai từ khóa riêng tư:
$ ssh-keygen -y -f ~/.ssh/github_rsa > ~/.ssh/github_rsa.pubTác giả đã thử nghiệm điều này sáu lần, có và không có tệp .pub. Không có nó: bị từ chối mọi lần. Có nó: được chấp nhận mọi lần.
Tại Sao Tệp .pub Thay Đổi Hành Vi
OpenSSH sử dụng hai luồng xác thực theo RFC 4252. Khi có tệp .pub, máy khách trước tiên thăm dò bằng cách cung cấp khóa công khai và chờ xác nhận từ máy chủ trước khi ký. Không có tệp .pub, OpenSSH bỏ qua bước thăm dò và gửi trực tiếp yêu cầu xác thực đã ký đầy đủ. Một sshd tiêu chuẩn chấp nhận cả hai — nhưng giao diện SSH của GitHub giờ từ chối luồng ký trực tiếp.
Điều Gì Đã Thay Đổi Ở Phía GitHub
Banner máy chủ trong nhật ký gỡ lỗi hiển thị 6a2c000, trong khi giao diện SSH của GitHub trước đây sử dụng babeld-<hash>. Điều này cho thấy phần mềm máy chủ mới không còn chấp nhận phương thức publickey ký trực tiếp. Thời điểm — hoạt động một giờ, hỏng giờ tiếp theo — phù hợp với một bản triển khai phía máy chủ.
Nếu bạn gặp vấn đề này, hãy tạo lại tệp .pub của bạn. Và nếu bạn biết 6a2c000 là gì, cộng đồng rất muốn nghe.
Thảo luận
0 bình luận
Hãy là người đầu tiên thảo luận.