Theo như tôi có thể nói, đây là một lỗi trong WSL. Hy vọng, Microsoft sẽ sửa nó trong bản dựng tiếp theo. Nhưng hiện tại, chúng ta có thể sử dụng bản hack hơi xấu xí này.
Cập nhật # 1 : Chắc chắn là một lỗi. Tìm thấy vấn đề này trên Github. Thier đã đề xuất cách giải quyết việc khởi chạy lại vỏ cho tôi nếu bạn không muốn trải qua tất cả những điều này.
TL; DR Thêm phần này để KẾT THÚC cấu hình SSH của bạn (thường được đặt tại ~/.ssh/config
):
Host *
ProxyCommand nc %h %p %r
Đây là lý do tại sao nó hoạt động: Vấn đề SSH của chúng tôi không phải là vấn đề tường lửa bởi vì nc
và telnet
hoạt động với cùng một máy chủ và cổng (thử telnet <host> <port>
hoặc nc <host> <port>
: bạn sẽ thấy một cái gì đó như SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.7
). Điều này chúng ta có thể sử dụng để lợi thế của chúng tôi.
SSH cho phép sử dụng các proxy lấy đầu vào tiêu chuẩn và gửi nó đến cổng của máy chủ thông qua ProxyCommand
tùy chọn. Điều này thường được sử dụng để tạo đường hầm vào các mạng đến một máy chủ được bảo vệ bằng cách sử dụng máy chủ SSH ở giữa, đôi khi được gọi là máy chủ nhảy (xem liên kết này để biết thêm thông tin).
Bản hack này cho SSH sử dụng proxy không có (các) máy chủ nhảy. Vì vậy, nó xoay quanh việc phân bổ tài nguyên TCP không thành công của SSH bằng cách đẩy tất cả phân bổ tài nguyên mạng lên Netcat, hoạt động. SSH chỉ thực hiện điều SSH mà không cần bất kỳ kết nối mạng nào và Netcat gửi dữ liệu thô qua kết nối TCP đến máy chủ SSH.
CẢNH BÁO: Vì điều này sửa đổi ProxyCommand
tất cả các máy chủ, tôi không biết nó tương tác với các máy chủ cấu hình SSH khác sử dụng như thế nào ProxyCommand
. Tôi có một vài máy chủ mà tôi có thể kiểm tra điều này và tôi sẽ cập nhật câu trả lời này với kết quả. Có một cơ hội là không có tác dụng phụ bất lợi, nhưng tôi không thể đảm bảo điều đó.
Cập nhật # 2: Tôi đã thực hiện một số thử nghiệm với một vài máy chủ của mình và điều này dường như hoạt động. SSH sử dụng mục trên cùng trong cấu hình khi áp dụng nhiều mục. Do đó, một ProxyCommand
món quà hiện có ở trên bản hack này sẽ ghi đè lên nó. Khi lệnh SSH mới được thực thi, nó sẽ đọc lại cấu hình SSH và nếu không có lệnh nào khác ProxyCommand
, SSH sử dụng bản hack của chúng tôi ProxyCommand
, cho phép nó chỉ áp dụng cho phiên SSH "ngoài cùng". Lời cảnh báo: nếu bạn đặt hack ở đầu tệp cấu hình (hoặc phía trên mục bạn đang cố gắng SSH), các phiên SSH yêu cầu ProxyCommand
sẽ bỏ qua cái khác ProxyCommand
và thay vào đó cố gắng giải quyết địa chỉ của máy chủ và kết nối trực tiếp với Netcat.