釜底抽薪: 从公网 SSH 直达多台内网 WSL

0. 问题与思路

目标: 建立一个稳定、可扩展的方案,从公网通过 SSH 访问局域网内一台或多台机器上的 WSL 环境。

典型障碍:

  1. 端口冲突: Windows 自带的 SSH 服务已占用 22 端口,导致 WSL 内的 SSH 服务启动失败。
  2. 配置混淆: 在 frp 中,local_portremote_port 的关系理解不清。
  3. 扩展困难: 添加第二台机器时,frp 服务端因代理名称冲突而拒绝连接。

解决思路:

  • 隔离: 修改 WSL 内 SSH 服务的默认端口,与 Windows 系统服务解耦。
  • 映射: 通过 frpc 将公网服务器的特定端口,精确映射到 WSL 内部的新 SSH 端口。
  • 唯一化: 为每一台需要穿透的机器分配唯一的代理名称和唯一的公网端口。

1. 基础构建:单机 WSL 穿透

此节解决单台机器的 0 -> 1 问题。

1.1. 配置 WSL 内部 SSH 服务

首先,确保 WSL 自身是一个合格的 SSH 服务器。

  1. 安装服务 (若未安装)
    • sudo apt update
    • sudo apt install openssh-server -y
  2. 修改端口 (核心步骤)
    编辑 SSH 配置文件,避开与 Windows 的 22 端口冲突。
    • sudo nano /etc/ssh/sshd_config
    • 找到 #Port 22,修改为一个自定义端口,例如 2222
    • # Port 22 Port 2222 为方便初始调试,确保密码登录是开启的。 PasswordAuthentication yes 保存并退出。
  3. 启动并验证 # 重启服务以应用新配置 sudo service ssh --full-restart # 检查服务是否在 2222 端口监听 ss -tlnp | grep sshd 预期输出应包含 *:2222,证明 WSL 的 SSH 服务已在 2222 端口正常工作。

1.2. 配置 frpc 客户端 (TOML 格式)

在 WSL 内创建或编辑 frpc.toml 文件,建立连接的桥梁。

# frpc.toml for a single machine

server_addr = "x.x.x.x"  # 你的公网服务器 IP
server_port = 7000       # frps 服务端监听的端口

# 定义一个 SSH 代理

[wsl-main-ssh]

type = “tcp” local_ip = “127.0.0.1” # 转发到 WSL 内部 SSH 服务的端口 local_port = 2222 # 从公网访问时使用的端口 remote_port = 6001

配置解读:

  • [wsl-main-ssh]: 代理的唯一名称。
  • local_port = 2222: frpc 接收到流量后,将其转发至本地 (127.0.0.1) 的 2222 端口,即 WSL SSH 服务。
  • remote_port = 6001: frps 将监听其公网 IP 的 6001 端口,等待外部连接。

2. 扩展:多机 WSL 并行穿透

此节解决 1 -> N 的问题。

2.1. 核心原则:唯一性

frps 通过 代理名称 识别和管理所有连接。操作系统通过 端口号 监听网络。因此,要让多台机器的 frpc 共存于同一个 frps 下,必须遵守:

  1. 代理名称 ([proxy_name]) 必须唯一
  2. 远程端口 (remote_port) 必须唯一

2.2. 实践配置

假设现在要新增一台 “实验机 (Lab PC)”。

机器 A (主力机) 的 frpc.toml: (同 1.2 节)

server_addr = "x.x.x.x"
server_port = 7000

[wsl-main-ssh]

type = “tcp”

local_ip = “127.0.0.1”

local_port = 2222

remote_port = 6001

机器 B (实验机) 的 frpc.toml:

server_addr = "x.x.x.x"
server_port = 7000

# 使用一个全新的、唯一的代理名称

[wsl-lab-ssh]

type = “tcp” local_ip = “127.0.0.1” # 这台机器的 WSL SSH 端口也可以是 2222,因为它们在不同机器上,互不影响 local_port = 2222 # 分配一个全新的、唯一的公网端口 remote_port = 6002


3. 执行与加固

3.1. 启动与连接

  1. 启动 frpc
    在每台机器的 WSL 环境中,分别使用对应的配置文件启动 frpc。为保证长期运行,建议使用 nohupsystemd# 在主力机 WSL 中 nohup ./frpc -c ./frpc.toml & # 在实验机 WSL 中 # (使用其各自的 frpc.toml) nohup ./frpc -c ./frpc.toml &
  2. 远程连接
    • 连接到主力机 (A):
      bash ssh wsl_user_a@x.x.x.x -p 6001
    • 连接到实验机 (B):
      bash ssh wsl_user_b@x.x.x.x -p 6002
      输入对应 WSL 用户的密码即可登录。

3.2. 安全加固:切换到 SSH 密钥登录

密码登录存在安全风险。配置密钥登录是标准操作。

  1. 在你的本地电脑 (即发起 SSH 连接的机器) 上生成密钥对。 ssh-keygen -t rsa -b 4096
  2. 分发公钥
    将你本地电脑 ~/.ssh/id_rsa.pub 文件中的 全部内容,复制并追加到 目标 WSL 环境~/.ssh/authorized_keys 文件中。对每一台需要免密登录的 WSL 都执行此操作。
  3. 禁用密码登录 (在目标 WSL 中)
    再次编辑 /etc/ssh/sshd_config
    PasswordAuthentication no
    重启 SSH 服务:sudo service ssh restart

此后,所有连接都将通过密钥验证,更加安全和便捷。


已发布

分类

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注