#jupyter #命令行工具 #远程 #会话 #SSH #服务器

应用 remote_jupyter

通过SSH隧道管理在远程服务器上运行的多个Jupyter会话

3个版本

0.1.2 2023年10月3日
0.1.1 2023年9月7日
0.1.0 2023年9月7日

#281 in 科学

MIT许可证

130KB
417 代码行

远程Jupyter会话管理工具

Crates.io Crates.io (latest)

a screenshot of the rjy command line tool

rjy Rust命令行工具,用于通过SSH隧道管理多个Jupyter笔记本和实验室实例。该命令行工具启动一个后台SSH进程,并通过~/.remote_jupyter_sessions中的缓存来管理会话信息。

首先,在服务器上使用以下命令创建远程Jupyter会话,

$ jupyter lab --no-browser --port=8904

其中8904是一个随机的高端口号码。

然后,复制它提供的链接,并使用rjy new <链接> 以及你的远程服务器主机名来将此会话注册到你的本地计算机上,

$ rjy new http://localhost:8904/lab?token=b1fc6[...]b7a40 remote
Created new session ponderosa:8906.

你也可以使用IP地址,但我强烈建议如果你经常通过SSH与服务器交互,请将它们添加到你的~/.ssh/config文件中(例如,参见这个页面),并通过主机名来引用它们。你还应该使用ssh-add,这样你就不必每次都输入密码。这些可能看起来像是令人沮丧的额外步骤,但这两个提示将极大地简化与远程服务器的工作!

然后,我们可以看到这个Jupyter会话是“已注册”的,SSH隧道是通过rjy list来建立的。

$ rjy list
 Key (host:port) | Process ID | Status    | Link                              
-----------------+------------+-----------+-----------------------------------------------
 ponderosa:8906  | 68190      | connected | http://localhost:8906/lab?token=5e2f[...]8467
 sesame:8906     | 67087      | connected | http://127.0.0.1:8906/lab?token=3aa1[...]bee1

大多数好的终端都允许你直接点击此链接(例如,在Mac的iTerm2中,如果你按住并将鼠标悬停在链接上,它将变为可点击的)。

我们可以使用rjy dc <密钥>来断开会话,其中密钥是列表输出中的那个。如果没有指定密钥,则断开所有会话。

$ rjy dc remote:8904
Disconnected 'sesame:8906' (Process ID=67087).

现在我们可以看到它已断开连接

$ rjy list
 Key (host:port) | Process ID | Status       | Link                              
-----------------+------------+--------------+-----------------------------------------------
 ponderosa:8906  | 68190      | connected    | http://localhost:8906/lab?token=5e2f[...]8467
 sesame:8906     |            | disconnected | http://127.0.0.1:8906/lab?token=3aa1[...]bee1

我们可以使用rjy rc重新连接。如果没有密钥,则重新连接所有已注册的会话。如果有密钥,则只连接那个会话。

$ rjy rc remote:8904
Reconnected session sesame:8906.

现在如果我们检查,

$ rjy list
 Key (host:port) | Process ID | Status    | Link
-----------------+------------+-----------+----------------------------------------------------------------------------------
 sesame:8906     | 69233      | connected | http://127.0.0.1:8906/lab?token=3aa1[...]bee1
 ponderosa:8906  | 68883      | connected | http://localhost:8906/lab?token=5e2f[...]8467

它已按预期重新连接。最后,要从一个注册的缓存中删除会话(保存在~/.remote_jupyter_sessions中),请使用rjy drop <密钥>

$ rjy drop ponderosa:8906
Disconnected 'ponderosa:8906' (Process ID=68883).

您还可以通过以下命令断开所有连接:rjy drop --all。有关更多信息,请参阅内置指令:rjy --help

安全

此功能将Jupyter创建的令牌存储在~/.remote_jupyter_sessions中,并设置权限,仅允许所有者具有读写权限。这和将认证令牌保存在shell历史记录中一样安全,但仍然需要谨慎处理。不要在不信任的系统上使用。

安装

$ cargo install remote_jupyter

依赖项

约10–22MB
约293K SLoC