远程连接Jupyter Notebook服务器及搭建可远程访问服务的方法
如何远程连接Jupyter Notebook服务器?
假设你已经在服务器上搭好了可远程访问的Jupyter服务,那本地连接其实很简单,分这几步:
- 先开本地终端,用SSH做端口转发,命令是这样的:
ssh -L 本地端口:localhost:服务器端Jupyter端口 你的服务器用户名@服务器IP
举个例子,服务器Jupyter用默认8888端口,你本地也用8888的话,就输ssh -L 8888:localhost:8888 john@192.168.0.10 - 转发成功后,打开本地浏览器,输入
http://localhost:你刚才设的本地端口 - 最后输入服务器端Jupyter设置的密码或者启动时给出的token,就能正常使用远程的Notebook了
如果服务器端配置了允许直接访问(比如设了0.0.0.0的IP),你也可以直接在浏览器输http://服务器IP:Jupyter端口,但强烈不建议这么做,除非你配了SSL加密,不然传输的数据是明文的,不安全,还是用SSH隧道更稳妥。
已拥有SSH访问权限且本地可运行Notebook,如何搭建配置远程访问的Jupyter服务器?
既然已经能SSH连服务器,还能本地跑Notebook,那配置远程服务就很顺了,跟着这几步来:
- 生成Jupyter配置文件:在服务器终端输
jupyter notebook --generate-config,这个文件会存在~/.jupyter/jupyter_notebook_config.py,后面要改这个文件里的参数 - 设置访问密码:两种方式选一个就行:
- 简单版:直接输
jupyter notebook password,然后按提示输入两次密码,系统会自动把加密后的密码存在配置里,省事 - 自定义哈希版:如果想手动配置,先进Python环境,输:
输入密码后会生成一串哈希字符串,把它复制下来,后面要用from notebook.auth import passwd passwd()
- 简单版:直接输
- 修改配置文件:用文本编辑器打开
~/.jupyter/jupyter_notebook_config.py,找到下面这些配置项,取消注释(删掉前面的#)然后修改:c.NotebookApp.ip = '0.0.0.0':允许所有外部IP访问服务器的Jupyterc.NotebookApp.password = '你刚才复制的哈希字符串':把哈希值填进去(如果用的简单版密码设置,这一步可以跳过,系统已经帮你弄好了)c.NotebookApp.open_browser = False:服务器上不用打开浏览器,毕竟是远程用c.NotebookApp.port = 8888:可以改成你喜欢的端口,比如8889,避免和其他服务冲突- 可选:
c.NotebookApp.notebook_dir = '/home/john/my_notebooks':设置启动Jupyter时默认进入的工作目录,找文件更方便
- 启动Jupyter服务器:
- 直接输
jupyter notebook就能启动,但如果断开SSH连接,服务就停了,所以建议后台运行:- 用
nohup jupyter notebook &:后台运行,输出会存在nohup.out里 - 或者用
screen/tmux:先开一个screen会话,在里面启动Jupyter,就算断开SSH,会话还在,下次连上去可以恢复
- 用
- 直接输
- 本地连接测试:按照第一个问题里的SSH端口转发方法,就能远程访问服务器上的Jupyter了
内容的提问来源于stack exchange,提问作者nico




