本地打开远程jupyter notebook

一般安装Anaconda时会自动安装jupyter,安装好以后直接在命令行输入“jupyter notebook”便可以在浏览器中使用。(本文默认在linux上已经按照好了完整的Anaconda)
但是它默认只能在本地访问,如果想把它安装在服务器上,然后在本地远程访问,则需要进行如下配置:

1.生成配置文件:jupyter_notebook_config.py

在终端输入以下命令:

[chengaoxiang@terminal-rn-cxzenicu-0-xyjwmdib-65c5c6c668-mxk67:~]$>> jupyter notebook --generate-config
Writing default config to:/data/home/chengaoxiang/.jupyter/jupyter_notebook_config.py

注意:新生成的配置文件通常在用户主目录的“.jupyter”目录下,如下图所示:

文件位置.png

2. 生成配置密文和远程浏览器密码

在终端输入“python”,创建在浏览器上登录jupyter notebook时的密码,同时生成密文。

[chengaoxiang@terminal-rn-cxzenicu-0-xyjwmdib-65c5c6c668-mxk67:~]$>>python
Python 3.7.1 | packaged by conda-forge | (default, Feb 18 2019, 01:42:00) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from notebook.auth import passwd   #输入该命令
>>> passwd()  #输入该命令
Enter password:    #输入你记得住的密码(和linux用户密码相同也行)
Verify password:   #再次输入
'sha1:14a76eb914b4:0831e97f99fe1024a08f07f260644232ec28134d'    #自动生成的密文(复制保留,后面要用)
>>> exit()  #退出python

3.修改配置文件:jupyter_notebook_config.py

用vim打开上述配置文件,并查找到下面几行信息进行修改和保存(注意初次打开时所有行前面都带有“#”,处于被注释状态,被我们修改的相关语句必须将其前面的“#”去掉,否则不起作用):
c.NotebookApp.allow_remote_access = True;(允许远程访问)
c.NotebookApp.ip = '*' ;(允许任意ip访问此服务器)
c.NotebookApp.password = 'sha1:14a76eb914b4:0831e97f99fe1024a08f07f260644232ec28134d';(第2步生成的密文)
c.NotebookApp. open_browser = False;(运行时不打开本机浏览器)
c.NotebookApp.allow_root =True;(允许使用root权限运行
c.NotebookApp.port = 9999;(指定jupyter notebook 使用的端口,注意有可能会出现冲突可随意换,比如9998)
以下两条也可以不设置,用默认路径即可:
c.ContentsManager.root_dir = '/data/home/chengaoxiang/jupyter_cgx';(指定ipynb等文件的保存目录,目录“jupyter_cgx”必须提前建好,位置随意,这里选择在用户根目录下即chengaoxiang/jupyter_cgx)
c.NotebookApp.notebook_dir = ' /data/home/chengaoxiang/jupyter_cgx';(工作目录,项目根目录)

修改配置文件.png

4.先在服务器上启动jupyter notebook

要想从本地打开远程服务器上的jupyter notebook,首先必须在服务器上先将jupyter notebook启动起来。


服务器上启动jupyternotebook.png

注意:上图中的链接最后面的“9999”正是我们第3步中指定的端口号;如果指定的这个端口号有冲突,则此处会自动分配一个端口号。

5.从本地电脑建立ssh通道,实现远程访问

在本地打开命令窗口输入:
ssh -p 10042 [email protected] -L 127.0.0.1:1234:127.0.0.1:9999
(上述命令相当于,从本地连接到服务器,同时将本地的127.0.0.1:1234与远程的127.0.0.1:9999进行了绑定,即在本地浏览器打开127.0.0.1:1234就会链接到远程服务器的127.0.0.1:9999,也就打开了远程jupyter notebook了)
10042:是远程连接linux用户chengaoxiang的端口号,是个固定不变的端口,在生成用户时就已确定;
chengaoxiang:linux用户名;
10.101.4.87:主机(服务器)IP;
1234:本地端口号,随便指定,只要不冲突就行;
9999:远程浏览器端口(**注意,该端口号必须与第4步图中连接最后端口号相同,而不是前面设置的端口号,因为设置的有可能会冲突。)

ssh连接.png

6.本地打开浏览器,实现远程打开服务器上jupyter notebook

打开浏览器,并在地址栏输入:
http://127.0.0.1:1234/+回车
注意:该链接的“127.0.0.1:1234”必须与第5步中设置的完全相同。

本地登录.png

点击“Log in”成功登录:
登录后.png

注意第3步中我们设置了文件存储路径:/data/home/chengaoxiang/jupyter_cgx,因此登录后的路径默认就是此路径。由于此时jupter_cgx目录下还没有文件,因此登录后也没有文件,我们从其他地方拷贝一个文件:multi_gpu_test_cgx.ipynb到jupyter_cgx下,此时就有了:
有文件.png

几点说明
1)点击上图右上角的“Quit”则远程服务器的jupyter notebook会被关闭,如果要继续远程使用jupyter notebook则必须在服务器上重新启动。
2)而“Logout”仅仅只是退出当前的远程连接,不会关闭服务器上正在运行的jupyter notebook的。
3)如何将其他python环境加入jupyter notebook,见cgx的:https://www.jianshu.com/writer#/notebooks/47895375/notes/46231499

7.在第6步中,可能出现无法连接的情况,127.0.0.1拒绝访问

可能的处理方法见下面连接:
https://www.cnblogs.com/rulasann/p/9442420.html

参考连接:

https://blog.csdn.net/qq_30011277/article/details/103473934
https://zhuanlan.zhihu.com/p/307753741
https://blog.csdn.net/chb4715/article/details/109128121
https://www.jb51.net/article/262203.htm
https://zhuanlan.zhihu.com/p/161221247
https://blog.csdn.net/qq_30011277/article/details/103473934
https://stackoverflow.com/questions/50374710/oserror-errno-99-cannot-assign-requested-address
https://blog.csdn.net/qq_45056135/article/details/123960321?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-123960321-blog-79604446.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-123960321-blog-79604446.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=1

你可能感兴趣的:(本地打开远程jupyter notebook)