Jupyter Notebook 无一键分享功能,需依场景选择方案:只读展示用 nbviewer+GitHub raw 链接;临时执行用 ngrok 暴露本地服务;长期可控共享宜用 JupyterHub 或 jupyter-server-proxy + Nginx 反向代理,并做好权限与安全隔离。

直接生成可点击、能被他人访问的 Jupyter Notebook 分享链接,**没有一键按钮**。Jupyter 本身不提供公开外链服务,所有“分享链接”都依赖额外配置或第三方工具,且必须明确区分使用场景:是给同事临时看一眼?还是发给学生永久访问?是否允许执行代码?
本地运行时用 nbviewer 生成只读链接
这是最安全、最常用的方式,适合把已有的 .ipynb 文件公开展示,不暴露本地环境,也不允许运行代码。
操作很简单:
- 把 notebook 上传到 GitHub、GitLab、Gist 或任意支持公开 HTTP 访问的静态托管(如 raw.githubusercontent.com)
- 复制该文件的原始 URL(不是网页版地址,而是以
.ipynb结尾的 raw 链接) - 把 URL 粘贴到 https://www.php.cn/link/ab69eb58f78519cabaeb6c1344384521 输入框,点 Go
- nbviewer 会返回一个形如
https://www.php.cn/link/ab69eb58f78519cabaeb6c1344384521github/username/repo/blob/main/notebook.ipynb的链接 —— 这就是你的分享链接
注意:nbviewer 不缓存内容,每次打开都重新抓取;如果源文件设为私有或链接失效,页面会报错 404 Not Found。
用 ngrok 暴露本地 Jupyter 服务(含执行能力)
当你需要别人实时连接你的本地 notebook 并运行代码(比如远程教学、结对调试),就得把本地服务“透出”到公网。ngrok 是最轻量的选择,但需谨慎对待安全风险。
步骤要点:
- 先确保 Jupyter 启动时加了
--no-browser --port=8888,并设置了密码(jupyter notebook password) - 运行
ngrok http 8888(需提前注册、登录、下载 ngrok) - 终端会输出类似
https://abcd1234.ngrok-free.app的转发地址 —— 这就是可分享的链接 - 对方访问该链接后,会看到和你本地完全一致的 Jupyter 界面,包括文件列表、新建、运行等全部功能
⚠️ 关键限制:ngrok free 的域名每小时轮换一次,链接不能长期有效;且默认允许任意用户登录(只要知道密码),切勿在公网环境长期开启。
用 JupyterHub 或 Jupyter Server Proxy 实现可控共享
如果你要管理多个用户、设置权限、固定域名,就别硬扛 ngrok 了。JupyterHub 是正解,但部署成本高;更现实的折中方案是 jupyter-server-proxy + 反向代理(如 Nginx)。
例如,在已有 Web 服务(如 Flask/Django)里集成 notebook:
pip install jupyter-server-proxy- 重启 Jupyter server,它会自动在
/proxy/8888/下挂载 notebook 实例 - 配合 Nginx 把
/jupyter/路径反向代理过去,并启用基础认证或 IP 白名单 - 最终分享的链接形如
https://yourdomain.com/jupyter/tree,稳定、可控、可审计
这种路径下,你真正控制的是谁能看到、谁能进、哪些目录可见 —— 而不是靠“别把链接发错人”来兜底。
真正容易被忽略的一点:所有带执行能力的分享(ngrok / JupyterHub / 反向代理),都默认继承你本地 kernel 的权限。如果 notebook 里写了 !rm -rf / 或读取敏感文件的代码,执行者就能触发。不要假设“别人不会乱点”,而要在服务层做隔离(如容器化 kernel、禁用 shell 命令、使用非 root 用户启动)。


















