远程访问服务器Jupyter Notebook的两种方法
方法1. ssh远程使用jupyter notebook
1.在远程服务器上,启动jupyter notebooks服务:
jupyter notebook --no-browser --port=8889
2.在本地终端中启动SSH:
ssh -N -f -L localhost:8888:localhost:8889 [email protected]
其中: -N 告诉SSH没有命令要被远程执行; -f 告诉SSH在后台执行; -L 是指定port forwarding的配置,远端端口是8889,本地的端口号的8888。
注意:[email protected]替换成服务器的对应账号。
最后打开浏览器,访问:http://localhost:8888/
方法2. 利用jupyter notebook自带的远程访问功能
1.生成默认配置文件
默认情况下,配置文件 ~/.jupyter/jupyter_notebook_config.py 并不存在,需要自行创建。使用下列命令生成配置文件:
jupyter notebook --generate-config
2.生成密码sha1值
开启远程访问的话意味着你的 Jupyter Notebook 服务会暴露在公网中,所以为了安全我们需要设置一下页面密码。
在 Jupyter 的配置文件中要填写的并不是密码的明文,而是想要设置密码的sha1值。在这里我们使用 ipython 的 passwd 库来生成密码的 sha1 值。
输入 ipython
,进入 ipython 的交互界面,然后依次输入及其输出如下,按输出说明填写密码:
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:xxxx # 这个是自己输入的密码,后面要用这个登录
Verify password:xxxx
Out[2]: 'sha1:xxxxxxxxxxxxxxxxx'
把 out[2] 的内容复制下来备用。
3.修改配置文件
vim ~/.jupyter/jupyter_notebook_config.py
vim 后面换成你自己的配置文件路径。
将如下几项内容去除注释后修改值如下并保存:
# 服务ip地址,0.0.0.0代表绑定到本机所有的ip上
c.NotebookApp.ip='0.0.0.0'
# 密码设置,前面的u是表示对单引号内的内容不转义
c.NotebookApp.password = u'sha:ce...刚才复制的那个out[2]的内容'
# 启动时是否打开本地浏览器,我们远程访问的话自然不需要
c.NotebookApp.open_browser = False
# 工作端口
c.NotebookApp.port =8888 #随便指定一个端口
4.启动服务
在想要工作的目录下输入 jupyter notebook 即可启动服务,但这样的前台服务在 ssh 断开后也会中断。若是想要保持其运行状态的话,可以用 screen 命令将其挂在后台运行。当然,也推荐使用 tmux
管理包
# 新建一个 screen 窗口,若报错则可能需先安装 screen
screen -S jupyter
# 启动 jupyter notebook 服务
jupyter notebook
之后同时按下键盘上的 ctrl+a+d 键即可将当前 screen 窗口挂到后台,这样即使 ssh 连接断开了也不会导致服务中断。
在服务启动后用浏览器访问 http://你的服务ip地址:你的端口
即可打开 Jupyter Notebook
的密码页面,输入前面设置的密码
(即Enter password那里的输入)后就可以跟本地一样正常使用啦。
如果后续涉及到配置、切换虚拟环境,你可能还需要:Jupyter Notebook 中添加 conda 虚拟环境 这篇
如果觉得有用请点个赞谢谢!
感谢,参考自:
https://www.jianshu.com/p/8fc3cd032d3c
https://xirikm.net/2019/321-1