使用 Python 和 Jupyter Notebook 构建远程管理控制台

将 Jupyter 变成远程管理控制台。
72 位读者喜欢这篇文章。
Computer laptop in space

Opensource.com

安全外壳 (SSH) 是一个强大的远程管理工具,但它缺少一些便利性。编写一个功能齐全的远程管理控制台听起来会是一项艰巨的工作。 难道开源社区中没有人已经写过一些东西吗?

他们有,它的名字是 Jupyter。 您可能会认为 Jupyter 是数据科学家用来分析一周内广告点击趋势的工具之一。 这没错——他们确实使用它,而且它在这方面是一个很棒的工具。 但这只是它的冰山一角。

关于 SSH 端口转发

有时,有一台服务器,您可以通过端口 22 SSH 连接到它。 没有理由假设您可以连接到任何其他端口。 也许您正在通过另一个具有更多访问权限的“跳板”服务器进行 SSH 连接,或者存在限制端口的主机或网络防火墙。 当然,限制 IP 范围以进行访问是有充分理由的。 SSH 是一种安全的远程管理协议,但允许任何人连接到任何端口是完全没有必要的。

这里有一个替代方案:运行一个简单的 SSH 命令,使用端口转发将本地端口转发到远程本地连接。 当您运行像 -L 8111:127.0.0.1:8888 这样的 SSH 端口转发命令时,您是在告诉 SSH 将您的本地端口 8111 转发到远程主机认为的 127.0.0.1:8888。 远程主机认为 127.0.0.1 是它自己。

就像在芝麻街中一样,“这里”是一个微妙的词。

地址 127.0.0.1 是您在网络中拼写“这里”的方式。

通过实践学习

这听起来可能令人困惑,但运行它比解释它更简单

$ ssh -L 8111:127.0.0.1:8888 moshez@172.17.0.3
Linux 6ad096502e48 5.4.0-40-generic #44-Ubuntu SMP Tue Jun 23 00:01:04 UTC 2020 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Aug  5 22:03:25 2020 from 172.17.0.1
$ jupyter/bin/jupyter lab --ip=127.0.0.1
[I 22:04:29.771 LabApp] JupyterLab application directory is /home/moshez/jupyter/share/jupyter/lab
[I 22:04:29.773 LabApp] Serving notebooks from local directory: /home/moshez
[I 22:04:29.773 LabApp] Jupyter Notebook 6.1.1 is running at:
[I 22:04:29.773 LabApp] http://127.0.0.1:8888/?token=df91012a36dd26a10b4724d618b2e78cb99013b36bb6a0d1
<MORE STUFF SNIPPED>

将端口 8111 转发到 127.0.0.1,并在远程主机上启动 Jupyter,该主机正在监听 127.0.0.1:8888

现在您需要理解 Jupyter 在撒谎。 它认为您需要连接到端口 8888,但您已将其转发到端口 8111。 因此,在您将 URL 复制到浏览器后,但在单击 Enter 之前,将端口从 8888 修改为 8111

在那里:您的远程管理控制台。 正如您所看到的,底部有一个“终端”图标。 单击它以获得终端

您可以运行命令。 创建文件将在侧面的文件浏览器中显示它。 您可以单击该文件以在本地运行的编辑器中打开它

您还可以下载、重命名或删除文件

单击小的向上箭头将允许您上传文件。 为什么不上传上面的屏幕截图?

作为一个不错的最终花絮,Jupyter 允许您通过双击直接查看远程图像。

哦,对了,如果您想使用 Python 进行系统自动化,您也可以使用 Jupyter 打开笔记本。

因此,下次您需要远程管理防火墙环境时,为什么不使用 Jupyter 呢?

接下来阅读什么
标签
Moshe sitting down, head slightly to the side. His t-shirt has Guardians of the Galaxy silhoutes against a background of sound visualization bars.
自 1998 年以来,Moshe 一直参与 Linux 社区,在 Linux“安装聚会”中提供帮助。 自 1999 年以来,他一直在编写 Python 程序,并为核心 Python 解释器做出了贡献。 Moshe 自从 DevOps/SRE 这些术语出现之前就一直是 DevOps/SRE,他非常关心软件可靠性、构建可重复性以及其他此类事情。

4 条评论

很棒的文章。 这提醒我需要学习更多 Python,尤其是这个 Jupyter。

大家好,我不太明白您将如何访问防火墙后的远程并在此处启动 Jupiter。 我假设 Jupiter 内核已经在远程作为一项服务运行,可以通过端口 8888 访问。

我的意思是,如果您已经可以使用 SSH 访问远程(即远程端口 22 未被阻止),那么使用终端已经可以实现大多数远程管理 - 那么为什么我们需要使用在远程运行的 Jupiter 访问远程终端。

干杯,bou

Jupyter 终端体验很糟糕。 如果您只需要一种上传文件的方式,可以使用 scp 或 rsync,或者带有 sftp 的 filezilla 用于 gui,甚至可以使用 ssh user@server -XC4,然后使用 nautilus,恭喜您,您正在 Linux 文件管理器中浏览远程文件。 拖放也应该有效。 或者设置 samba 并将您的远程挂载为本地文件夹。 或者,或者,或者。

Jupyter 除了笔记本之外,其他任何东西都很糟糕。

至于防火墙后的访问,除非您 a) 暴露 IP 使其不在防火墙后,b) 获取反向代理,或 c) 通过从远程到外部本地发起 ssh 连接并端口转发 ssh 端口来反向隧道,以便您可以 ssh 到该端口上的 localhost,否则您显然无法访问。

c) 是唯一真正的选择,因为 IT 不会提供 a) 或 b),但 c) 绝对违反规则,甚至可能违法。

回复 作者:bou

感谢您提出的关于仅在您的计算机上安装浏览器即可远程控制网络主机的想法。
对于那些只想使用浏览器/Jupyter 的人来说,这可能很有用。 尽管如此,他们仍然需要运行端口转发 ssh 命令并启动 Jupyter 服务,但之后他们就处于舒适区了。
对于我们其他人来说,有很多其他选择和工具。 在带有命令行界面的旧终端和大量能够建立 SSH 连接的开源 GUI 工具之间。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.