三步搞定!让你的 WSL2 变身局域网内的 SSH 服务器

   局域网内的其他电脑通过 SSH 连接到你 Windows 11 上的 WSL (Ubuntu),这个需求非常实用。这比默认的本机连接要复杂一些,因为涉及到**端口转发**和**防火墙设置**。

整个过程可以分为三个主要步骤:

  1. 在 WSL (Ubuntu) 中配置和运行 SSH 服务。
  2. 在 Windows 中设置端口转发,将外部请求转发到 WSL。
  3. 在 Windows 防火墙中添加入站规则,允许外部访问。

下面是详细的操作指南。


第1步:在 WSL (Ubuntu) 中配置和运行 SSH

这一步和之前我们讨论的类似,但要确保配置能接受外部连接。

  1. 安装 OpenSSH Server
    如果你的 WSL 中还没有安装 SSH 服务,先安装它。打开 WSL 终端:

    sudo apt update
    sudo apt install openssh-server
    
  2. 配置 SSH 服务
    编辑 SSH 配置文件,确保它允许密码登录并且监听在正确的端口。

    sudo nano /etc/ssh/sshd_config
    

    在编辑器中,找到并确认(或修改)以下几行:

    # 确保监听在所有网络接口上,这是默认值,通常不用改
    # ListenAddress 0.0.0.0
    
    # 你可以自定义端口,也可以使用默认的 22 端口。这里以 22 为例。
    # 如果你想用其他端口,比如 2222,就写 Port 2222
    Port 22
    
    # 为了方便,先允许密码登录
    PasswordAuthentication yes
    
    # (可选)如果你不想每次都输入 sudo 启动服务,可以修改此项
    # UsePrivilegeSeparation no # 设为 no 可能降低安全性,但能避免一些权限问题
    

    Ctrl + X,然后按 YEnter 保存并退出。

  3. 启动 SSH 服务

    sudo service ssh start
    

    你可以检查一下状态,确保它正在运行:

    sudo service ssh status
    

    如果看到 * sshd is runningActive: active (running) 就表示成功了。

  4. 获取 WSL 的 IP 地址
    这个 IP 地址后面会用到。在 WSL 终端中运行:

    ip a | grep "inet .* scope global"
    

    你会看到类似 inet 172.21.123.45/20 ... 这样的输出,记下这个 IP 地址(例如 172.21.123.45)。


第2步:在 Windows 中设置端口转发

这是最关键的一步。WSL2 运行在一个虚拟网络中,局域网内的其他电脑无法直接访问到 WSL 的 IP。我们需要在 Windows 主机上创建一个端口转发规则,将发往 Windows 主机某个端口的流量,转发给 WSL 的 SSH 端口。

  1. 以管理员身份打开 PowerShell

    • 在开始菜单上右键点击,选择 “终端 (管理员)” 或 “Windows PowerShell (管理员)”。
  2. 执行端口转发命令
    我们将使用 netsh 命令来创建转发规则。命令的格式是:
    netsh interface portproxy add v4tov4 listenport=<Win端口> listenaddress=<WinIP> connectport=<WSL端口> connectaddress=<WSL-IP>

    • listenport: 你希望局域网其他电脑访问的 Windows 端口(例如 2222)。
    • listenaddress: 你的 Windows 主机在局域网中的 IP 地址。你可以在 PowerShell 中用 ipconfig 命令找到它(通常是 192.168.x.x)。为了方便,也可以用 0.0.0.0 表示监听所有网络接口。
    • connectport: 你在 WSL 中配置的 SSH 端口(例如 22)。
    • connectaddress: 你在第1步中获取到的 WSL 的 IP 地址(例如 172.21.123.45)。

    示例命令:
    假设你的 Windows IP 是 192.168.1.100,WSL IP 是 172.21.123.45,你希望局域网其他电脑通过访问 192.168.1.1002222 端口来连接 WSL 的 22 端口。

    netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=172.21.123.45
    

    执行后,如果没有任何错误信息,就表示规则添加成功。

  3. 查看已有的转发规则 (可选)

    netsh interface portproxy show all
    

重要提示:WSL2 的 IP 地址在重启后可能会改变。如果重启后发现无法连接,你需要重新获取 WSL 的 IP,并更新这条端口转发规则。可以先删除旧规则再添加新规则:

# 删除旧规则
netsh interface portproxy delete v4tov4 listenport=2222 listenaddress=0.0.0.0
# 添加新规则 (用新的 WSL IP)
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=<新的WSL-IP>

(有自动化脚本可以解决这个问题,但我们先手动完成流程。)


第3步:在 Windows 防火墙中创建入站规则

现在,端口转发设置好了,但 Windows 防火墙默认会阻止外部设备访问 2222 端口。我们需要为它开一个“口子”。

  1. 以管理员身份打开 PowerShell (如果已打开则不用重复)

  2. 执行防火墙规则命令
    我们将使用 New-NetFirewallRule 命令。

    • DisplayName: 规则的名字,方便你识别。
    • Direction: Inbound (入站)。
    • Action: Allow (允许)。
    • Protocol: TCP
    • LocalPort: 你在端口转发中设置的 Windows 监听端口(例如 2222)。

    示例命令:

    New-NetFirewallRule -DisplayName "WSL2 SSH Access" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 2222
    

    执行成功后,防火墙规则就添加好了。


大功告成!现在进行测试

现在,从局域网内的另一台电脑上,打开终端或 SSH客户端,执行连接命令:

  • SSH 用户名: 你在 WSL (Ubuntu) 中的用户名。
  • IP 地址: 你的 Windows 主机在局域网的 IP 地址 (例如 192.168.1.100)。
  • 端口: 你在 Windows 上设置的监听端口 (例如 2222)。

连接命令示例:

ssh your_wsl_username@192.168.1.100 -p 2222

首次连接时,会提示你确认服务器的指纹,输入 yes。然后输入你在 WSL 中的用户密码,即可成功登录!

总结流程

  1. WSL 端:装好 openssh-server,改好配置,启动服务,记下 IP。
  2. Windows 端 (管理员 PowerShell):用 netsh 命令创建端口转发,将 WindowsIP:外部端口 转发到 WSL-IP:SSH端口
  3. Windows 端 (管理员 PowerShell):用 New-NetFirewallRule 命令在防火墙上为 外部端口 创建一个 TCP 入站允许规则。
  4. 其他电脑:使用 ssh <wsl用户名>@<windows主机IP> -p <外部端口> 进行连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值