我在 WIN10 机器上的 WSL2 中运行 SSH 服务器。为了完成这项工作,我正在使用:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=22 connectaddress=172.19.237.178 connectport=22
这最初工作正常。172.19.237.178
是 WSL2 虚拟机的 IP。
只有一个问题。我将 sshd 设置为在 PC 启动时运行,并且每次启动机器时 WSL2 都有不同的 IP。有没有办法将 WSL2 配置为使用静态 IP?
编辑:有关确定 WSL 机器 IP 的解决方法,请参阅此问题。
WSL2 机器的 IP 地址不能设为静态,但可以使用
wsl hostname -I
基于此,我能够创建以下 powershell 脚本,该脚本将在我的 WSL 机器上启动 sshd 并将流量路由到它。
我通过 visudo 将以下内容添加到我的 sudoers 文件中,以避免需要密码来启动 sshd
最后,从一个管理 powershell 终端,我安排我的脚本在启动时运行
无需使用脚本获取 ip,只需使用适用于 windows 的 Openssh 服务器并将默认 shell 从 c:/system32/cmd.exe 更改为 c:/system32/bash.exe:
https://docs.microsoft.com/en-US/windows-server/administration/openssh/openssh_server_configuration
该解决方案帮助我设置了我的wsl的静态IP,请尝试:
在你的 Windows 主机上运行它:
这在您的 wsl linux 机器上:
但是要在重新启动系统后保留此 IP,您需要在启动脚本中设置这些命令。
同时使用 wsl 和 wsl2 给我带来了问题。无法从 powershell 命令获取正确的 wsl 主机名:
基于 Nick 的回答,我需要转发 web 80 和 443,以及其他一些应用程序端口。
我的头脑简单,每次需要将端口代理到 WSL 时,我都会手动运行此脚本(以管理员身份运行)。
代理端口.bat
然后在 WSL 终端中再执行一步:
希望它可以帮助像我这样的人。:)
我没有足够的声誉发表评论,然后我提出了自己的答案,但尼克批准的答案(https://superuser.com/a/1619390/1023342)对我来说是一个好答案,期待一个小细节,对我来说
wsl hostname -I
返回两个IP(“IP1 IP2”),我想要第一个,然后我做:这是一个非常紧凑的 WSL2 解决方案,它将自动启动 SSH 服务器。它消除了处理 Powershell 签名/执行策略和按计划运行它的麻烦。
运行
wsl sudo nano /etc/wsl.conf
并添加这些行:这将在每次 WSL 启动时自动启动 SSH 服务器。
(可选)如果您想
2022
为 SSH 使用自定义端口(如 )(例如,如果您使用多个 WSL 发行版),请运行:这是因为 WSL2 将端口从其发行版映射到 Windows 的 localhost。现在您可以使用
localhost:22
(或自定义端口)连接到您的主机。启动wsl
终端 (wsl)
sudo ifconfig eth0 172.27.100.100网络掩码 255.255.255.0 广播 172.27.255.255
恩 Powershell
netsh 接口 ip 设置地址名称="vEthernet (WSL)" 静态172.27.100.99 255.255.255.0 172.27.255.255
访问wls到windows 172.27.100.99 访问windows到wls 172.27.100.100