Câu trả lời ngắn:
Sử dụng máy chủ Windows làm máy chủ lưu trữ ssh để truy cập WSL.
Thêm chi tiết:
Có một vài cạm bẫy khi cố gắng truy cập WSL (đặc biệt là WSL2) thông qua ssh:
Đầu tiên, bạn có thể gặp phải thực tế là WSL2 chạy trong một môi trường ảo hóa, với một NAT'd vNIC. Điều này có nghĩa là các dịch vụ chạy trong WSL2 không thể truy cập trực tiếp từ các máy khác trên mạng.
WSL cung cấp chuyển tiếp máy chủ cục bộ, cho phép truy cập từ chính máy chủ Windows đến các dịch vụ đang chạy trong WSL2 (thông qua máy chủ cục bộ: số cổng
). Nhưng điều này không mở rộng sang các máy khác trên mạng.
Bạn có thể thấy một chủ đề Github đầy đủ về điều này đây với liên kết trực tiếp đến nhận xét rằng nó tiêu biểu đề nghị để giải quyết điều này.
Nó bao gồm:
- Đặt quy tắc tường lửa
- Chuyển tiếp cổng từ Windows sang giao diện mạng ảo WSL2
- Thách thức lớn nhất ở đây là địa chỉ của vNIC thay đổi mỗi khi WSL khởi động lại. Vì vậy, tập lệnh phải xóa các quy tắc cũ và tạo lại chúng mỗi lần khởi động lại.
Tuy nhiên, với bản chỉnh sửa được cập nhật của bạn, dường như bạn đang thử điều gì đó hơi khác, có vẻ như bạn đang cố truy cập chia sẻ giả WSL thông qua Windows, có thể thông qua ssh trên chính máy chủ Windows.
Thật không may, điều này cũng sẽ không hoạt động vì \wsl$\...
bản thân nó là một hệ thống tập tin mạng (sử dụng giao thức 9P). Điều này có nghĩa là nó thực sự không hiện hữu trên chính máy chủ Windows khi được truy cập qua ssh.
Giải pháp ưa thích của tôi với ssh (và do đó sshfs
) là sử dụng một máy chủ lưu trữ ssh. Điều này giải quyết vấn đề "thay đổi địa chỉ vNIC" và không yêu cầu bạn chạy tập lệnh mỗi lần khởi động Windows.
Để thiết lập điều này:
- Cài đặt máy chủ Windows OpenSSH trên máy chủ Windows. Tôi sử dụng cổng 22 mặc định cho ssh "máy chủ", nhưng bạn không nhất thiết phải làm như vậy.
- Cài đặt và định cấu hình SSH trong phiên bản WSL của bạn. Ở đây, bạn sẽ cần sử dụng một số cổng khác với số cổng dành cho máy chủ lưu trữ Windows. Vì lợi ích của ví dụ này, chúng tôi sẽ sử dụng cổng
8022
. chỉnh sửa của bạn /etc/ssh/sshd_config
để thay đổi cổng.
- Tùy chọn, nhưng được khuyến nghị, hãy thiết lập cả phiên bản Windows OpenSSH và WSL bằng khóa công khai của bạn trong
../ssh/ủy quyền_keys
(trên Windows OpenSSH, đây là dưới %userprofile%/.ssh
danh mục. Tất nhiên, trong Linux/WSL, nó nằm trong ~/.ssh
.
Bây giờ, vì (như đã đề cập trước đó), máy chủ Windows có thể truy cập các phiên bản WSL2 trên máy chủ cục bộ
, bạn có thể sử dụng Windows SSH làm máy chủ lưu trữ cho các phiên SSH WSL2.
Giả sử rằng:
- Máy tính Windows của bạn được đặt tên
máy chủ cửa sổ
(thay thế bất cứ điều gì nó thực sự được gọi là)
- Bạn có Windows OpenSSH trên cổng 22
- Bạn có máy chủ SSH WSL của mình trên cổng 8022
Sau đó, bạn có thể gắn hệ thống WSL của mình bằng cách sử dụng:
sshfs -o ssh_command='ssh -J windowshost' -p 8022 localhost:/ <mountpoint>
Phiên bản WSL là "localhost" vì đây là địa chỉ theo quan điểm của jumphost (máy chủ Windows).