菜鸟笔记
提升您的技术认知

Jupyter Lab 密码登录、远程访问

Jupyter Lab 是一款给予 Web 的可交互式集成开发环境(IDE)。 相信很多人已经用过 Jupter Notebook 了,其最令人诟病的可能就是 Jupter Notebook 无法图形化的访问地址,在需要切换路径的时候很不方便。

那么是时候使用 Jupyter Lab 了。只需要在终端输入 jupyter-lab,就会开启本地服务,并打开浏览器显示你熟悉的 Notebook 界面。

那么问题来了, 如何从远程访问这个服务呢?

文章内容:

  • JupyterLab 安装
  • JupyterLab 安全验证
  • 远程登录 JupyterLab

1. Jupyter Lab 安装

安装 JupyterLab 非常简单,只需一行命令即可:

  • conda 安装 [Miniconda]
    conda install -c conda-forge jupyterlab
    
  • pip 安装
    pip install jupyterlab
    

2. JupyterLab 安全验证

JupyterLab 使用密码保证服务的安全,从而确保其他用户无法登录使用。默认情况下,会自动生成随机密码,如 : http://127.0.0.1:8888/lab?Token=2cefb80900a38689d9d0d2c4927832fa4ae322b1e441c601,其中 token=密码

为方便远程登录,可手动设置密码,方法如下:

  • 生成配置文件
    jupyter server --generate-config
    

    该命令会在 ~/.jupyter 目录下生成配置文件 jupyter_server_config.py, 如果该配置文件已经存在,则会提示是否替换该文件。

  • 手动设置密码
    jupyter server password
    

    在终端输入密码后,会将该密码的哈希值写入配置文件。

    你现在就可以尝试打开 JupyterLab,你会发现你需要输入刚刚设定的密码才可以登录。

3. 远程登录 JupyterLab

JupyterLab 的服务器默认监听的 IP:PORTlocalhost:8888。我们可以修改这两个值,因为我们不希望我们开启的远程服务会干扰到其他用户开启的本地默认服务:

jupyter-lab --no-browser --port 5678

--no-browser : 不打开浏览器
--port : 监听端口
如果添加 --ip "IP地址" 则会指定IP

现在,你已经在开启了 JupyterLab 服务了,马上打开浏览器,输入 localhost:5678 试试看。

为了模拟远程登录的场景,假设现在 A 电脑已经在 IP=192.168.3.100Port=5678 上开启了服务。 你应该知道怎么开启了吧? 好吧,最后示范一次!

jupyter-lab --no-browser --ip "192.168.3.100" --port 5678

我们要在 电脑B 上登录 电脑AJupyterLab 服务,这里有两种情况:

  • BA 在同一网段,比如 192.168.3.200
  • B 可以通过网络连接到 A,但不是同一个网段

3.1 同一网段

这种情况非常简单,因为网段相同,显然 B可以直接访问 A的 IP。在 B 上打开浏览器,输入 192.168.3.100:5678,输入密码即可成功登录。

3.2 通过网络连接

虽然无法通过 192.168.3.100 直接访问,但我们可以做个正向代理(在B上执行命令),将本地端口绑定远程A的端口:

ssh -CNL localhost:5678:192.168.3.100:5678 usernameA@IPA
  • usernameA : 电脑 A 的用户名
  • IPA :电脑 A 的外网IP
  • 这句命令会将本地 localhost:5678 映射到远程电脑 5678
  • 使用 -f 参数可后台运行

现在,在电脑B 上打开浏览器,输入 localhost:5678 看效果吧。

在conda 虚拟环境中使用 JupyterLab:

$ conda activate cenv           # . ./cenv/bin/activate in case of virtualenv
(cenv)$ conda install ipykernel
(cenv)$ ipython kernel install --user --name=<any_name_for_kernel>
(cenv)$ conda deactivate