如何远程访问在WSL运行的Jupyter Notebook

远程访问在 WSL 中运行的 Jupyter Notebook 是一个非常常见的需求,比如你想用你的笔记本电脑或者平板来访问你台式机上运行的计算任务。

这比在本地访问要多几个步骤,主要是因为需要进行网络配置和安全设置。

我们将分为两大部分:

  1. 在局域网内远程访问 (例如,在同一个 WiFi 下的另一台电脑或平板访问)。
  2. (进阶)从外网访问 (通过互联网从任何地方访问,较专业)。

Part 1: 在局域网内远程访问

默认情况下,Jupyter 为了安全,只允许从本机(localhost)访问。要实现远程访问,我们需要做三件事:

  1. 让 Jupyter 监听所有网络接口的请求,而不仅仅是 localhost
  2. 设置一个密码,而不是使用一次性的 token,这样更安全也更方便。
  3. 配置 Windows 防火墙,允许外部设备访问 WSL 的端口。
步骤一:生成 Jupyter 配置文件

如果你还没有配置文件,需要先生成一个。在你的 WSL Ubuntu 终端 中(确保你已经激活了虚拟环境 source venv/bin/activate),运行:

bash 复制代码
jupyter notebook --generate-config

这会在你的 home 目录下的 .jupyter 文件夹中创建一个名为 jupyter_notebook_config.py 的文件。路径是 ~/.jupyter/jupyter_notebook_config.py

步骤二:设置访问密码

为了安全,我们不应该把一个带 token 的链接暴露在网络中。设置一个固定的密码是最好的方式。

激活了虚拟环境的终端中运行:

bash 复制代码
jupyter notebook password

系统会提示你输入并确认密码。这个命令会生成一个加密后的密码,并保存在 ~/.jupyter/jupyter_server_config.json 文件中。Jupyter 启动时会自动读取这个密码。

步骤三:修改配置文件

现在,我们需要编辑第一步生成的配置文件,让 Jupyter 监听公网 IP。

  1. 用一个终端编辑器(如 nano)打开配置文件:

    bash 复制代码
    nano ~/.jupyter/jupyter_notebook_config.py
  2. 在文件中找到(可以使用 Ctrl + W 搜索)以下几行,取消它们的注释(删除行首的 # 号)并修改它们的值:

    python 复制代码
    # 找到这一行:
    # c.NotebookApp.ip = 'localhost'
    # 修改为 '0.0.0.0',表示监听所有 IPv4 地址
    c.NotebookApp.ip = '0.0.0.0'
    
    # (可选,但推荐) 阻止Jupyter在启动时自动打开浏览器
    # 因为在WSL中它也打不开图形界面浏览器
    # 找到这一行:
    # c.NotebookApp.open_browser = True
    # 修改为 False
    c.NotebookApp.open_browser = False
    
    # (可选) 如果你不想使用默认的 8888 端口,可以修改这里
    # c.NotebookApp.port = 8888
  3. 修改完成后,按 Ctrl + X,然后按 Y 保存,最后按 Enter 确认文件名退出 nano

步骤四:配置 Windows 防火墙

这是最关键的一步,因为 WSL 的网络流量需要通过 Windows 主机。你需要告诉 Windows 防火墙,允许外部设备访问你为 Jupyter 设置的端口(默认为 8888)。

  1. Windows 中(不是 WSL),打开 "开始" 菜单,搜索 "高级安全的 Windows Defender 防火墙" (Windows Defender Firewall with Advanced Security) 并打开它。

  2. 在左侧面板中,点击 "入站规则" (Inbound Rules)。

  3. 在右侧面板中,点击 "新建规则..." (New Rule...)。

  4. 规则类型: 选择 "端口" (Port),点击 "下一步"。

  5. 协议和端口 : 选择 "TCP",然后在 "特定本地端口" (Specific local ports) 中输入 8888 (或者你自定义的端口号),点击 "下一步"。

  6. 操作: 选择 "允许连接" (Allow the connection),点击 "下一步"。

  7. 配置文件:

    • 私有 (Private): 必须勾选,这适用于你的家庭或工作局域网。
    • 公用 (Public) : 不要勾选,除非你明确知道你在公共网络(如咖啡店的WiFi)上需要这样做,这有安全风险。
    • 域 (Domain): 如果你的电脑在公司域中,可以勾选。
    • 通常只勾选 "私有" 即可。点击 "下一步"。
  8. 名称 : 给规则起一个容易识别的名字,比如 Jupyter WSL Port,然后点击 "完成"。

步骤五:启动 Jupyter 并从远程设备访问
  1. 获取 Windows 主机的 IP 地址:

    • Windows 中打开命令提示符 (cmd) 或 PowerShell。
    • 运行 ipconfig
    • 在输出中找到你当前连接的网络(比如 "无线局域网适配器 WLAN" 或 "以太网适配器 Ethernet"),记下它的 "IPv4 地址",例如 192.168.1.105
  2. 在 WSL 中启动 Jupyter :

    回到你的 WSL 终端(确保虚拟环境已激活),像往常一样启动 Jupyter:

    bash 复制代码
    jupyter notebook

    或者启动 JupyterLab:

    bash 复制代码
    jupyter lab

    因为你修改了配置,它现在会监听来自局域网的请求。

  3. 从远程设备访问 :

    在你的另一台电脑、笔记本或平板的浏览器中,输入以下地址:
    http://<你Windows主机的IP地址>:8888

    例如:http://192.168.1.105:8888

    浏览器会打开 Jupyter 的登录页面,输入你在 步骤二 中设置的密码即可访问。


Part 2: (进阶) 从外网访问

⚠️ 极大的安全警告 : 将 Jupyter Notebook 直接暴露在公网上有很大的安全风险。任何人都有可能尝试破解你的密码。请确保你设置了极其复杂的密码,并考虑使用 SSH 隧道等更安全的方法。

如果你仍然想这样做,你需要进行端口转发 (Port Forwarding) 设置。

  1. 完成 Part 1 的所有步骤

  2. 登录你的路由器管理界面 。通常是在浏览器访问 192.168.1.1192.168.0.1

  3. 在路由器设置中找到 "端口转发"、"虚拟服务器" 或 "Port Forwarding" 等选项。

  4. 添加一条新的转发规则:

    • 外部端口 (External Port) : 你希望从外网访问的端口,比如 8888
    • 内部端口 (Internal Port) : 8888 (与 Jupyter 监听的端口一致)。
    • 内部 IP 地址 (Internal IP Address) : 填写你 Windows 主机的局域网 IP 地址 (例如 192.168.1.105)。
    • 协议 (Protocol) : TCP
    • 保存规则。
  5. 获取你的公网 IP 地址 。在浏览器中访问 whatismyip.com 或直接搜索 "my ip"。

  6. 现在,你可以从任何地方,通过 http://<你的公网IP地址>:8888 来访问你的 Jupyter Notebook了。

更安全的替代方案: 使用 SSH 隧道是比直接端口转发安全得多的方法。它会将远程端口安全地映射到你的本地机器上,所有流量都经过加密。这需要你在 Windows 上开启 SSH 服务器,配置稍微复杂一些,但安全性大大提高。

相关推荐
江沉晚呤时6 小时前
在 C# 中调用 Python 脚本:实现跨语言功能集成
python·microsoft·c#·.net·.netcore·.net core
Edward-tan7 小时前
CCPD 车牌数据集提取标注,并转为标准 YOLO 格式
python
老胖闲聊7 小时前
Python I/O 库【输入输出】全面详解
开发语言·python
倔强青铜三8 小时前
苦练Python第18天:Python异常处理锦囊
人工智能·python·面试
倔强青铜三8 小时前
苦练Python第17天:你必须掌握的Python内置函数
人工智能·python·面试
迷路爸爸1808 小时前
让 VSCode 调试器像 PyCharm 一样显示 Tensor Shape、变量形状、变量长度、维度信息
ide·vscode·python·pycharm·debug·调试
咸鱼鲸9 小时前
【PyTorch】PyTorch中的数据预处理操作
人工智能·pytorch·python
Dxy12393102169 小时前
Python ExcelWriter详解:从基础到高级的完整指南
开发语言·python
金玉满堂@bj9 小时前
Conda 安装包的用途
python