Computer >> Hướng Dẫn Máy Tính >  >> Xử Lý Sự Cố >> Linux

Sửa lỗi: "No Matching Key Exchange Method Found" khi SSH

Khi dùng ssh kết nối server từ xa, bạn có thể nhận lỗi no matching key exchange method found kèm gợi ý thuật toán mã hóa nên dùng. Bạn không thể kết nối khi gặp lỗi này. Quy trình này khá chán nản, nhưng lỗi phổ biến đến mức bạn thường thấy dân Unix nói về nó và đưa ra cùng lời khuyên để thoát khỏi rắc rối.

Các cách sửa dưới đây đã test trên mọi nền tảng chạy ssh, nhưng bạn nhiều khả năng gặp trên Unix/Linux. Bạn có thể dùng cùng quy trình sửa nếu chạy ssh trên Windows hoặc nền tảng exotic, nhưng tùy chọn switch có thể hơi khác.

Cách 1: Kết nối lại server và tái tạo khóa

Trước hết, đảm bảo bạn tái hiện được lỗi. Đôi khi thông báo này chỉ do dịch vụ phía server chưa chạy, có thể đã tự sửa giữa chừng. Chúng tôi chạy ssh trong VM cho phép kết nối đến địa chỉ server giả example.org (theo tài liệu), nhưng bạn thay bằng địa chỉ mạng thật.

Sửa lỗi:  No Matching Key Exchange Method Found  khi SSH

Nếu vẫn nhận lỗi, thử tái tạo khóa bằng ssh-keygen -A từ prompt. Điều này làm mới cache ssh dùng để kết nối server từ xa. Nếu chưa, thử khởi động lại ssh bằng service ssh restart và chờ chút.

Nếu vẫn gặp vấn đề, nghĩa là server và client chưa bao giờ thương lượng được giao thức phù hợp. OpenSSH triển khai hàng loạt giao thức khác nhau, nhưng vô hiệu hóa một số vì đã biết bị xâm phạm và không an toàn. Bạn muốn cập nhật tất cả gói ssh phía server, nên hãy báo cho quản trị viên hệ thống. Nếu là server của bạn, hãy cập nhật ngay.

Nếu không thể cập nhật server và bạn nhận ra rủi ro dùng thuật toán bị xâm phạm, có cách bypass lỗi phía client.

Cách 2: Bật tùy chọn cũ (legacy) trong OpenSSH

Xem lỗi báo sau từ Their offer: để biết thuật toán server ưu tiên. Hầu hết hệ thống dùng openssh 7, đã vô hiệu hóa diffie-hellman-group1-sha1 cũ kỹ, nhưng bạn sẽ được bảo dùng sha1 nếu server còn dùng openssh 6 hoặc tương tự.

Chạy ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 testhost@example.org với host/IP thực của server từ xa để sửa phía client. Nếu khắc phục được, nghĩa là server tìm giao thức sha1 cũ. Giải pháp sha1 cũ bị vô hiệu hóa có lý do an toàn, nhưng bạn có thể bypass vĩnh viễn hơn bằng cách dùng nano/vim mở ~/.ssh/config và thêm:

Host example.org
KexAlgorithms +diffie-hellman-group1-sha1

Lưu ý: dấu cộng (+) quan trọng vì nó có nghĩa ssh sẽ thêm vào chứ không thay thế mặc định an toàn hơn. Khi server cập nhật gói, bạn sẽ dùng giao thức an toàn hơn trong hầu hết trường hợp.

Nếu lỗi trước nhắc đến giao thức ssh-dss thay vì sha1, bạn có thể thử lệnh theo sau host: ssh -oHostKeyAlgorithms=+ssh-dss, nếu chạy được bạn lại sửa ~/.ssh/config. Sau dòng Host, thêm tab và:

HostKeyAlgorithms +ssh-dss

Nhớ rằng giống như hệ sha1, khóa ssh-dss đã bị deprecated vì vấn đề bảo mật cực kỳ hợp lý. Dùng cách này có thể mở lỗ hổng cho kết nối, nên chỉ xem như fix tạm thời (nếu kể là fix). Hãy cập nhật server sớm nhất có thể.