配置:本地访问远程Linux系统服务器的Jupyter Notebook
环境情况
- 远程服务器上配置了anaconda
- 本地主机没有安装anaconda(其实安不安装都无所谓,有浏览器就行)
配置步骤如下
-
登录远程服务器
-
生成配置文件
jupyter notebook --generate-config
-
生成密码
输入
ipython
打开ipython生成密钥:In [1]: from notebook.auth import passwd In [2]: passwd() Enter password: Verify password: Out[2]: 'sha1:ce23d945972f:34769685a7ccd3d08c84a18c63968a41f1140274' #这段是密钥
把生成的密钥'sha1:ce2…'复制下来后面用,password是远程登录时需要输入的密码,要记住。
-
修改配置文件
使用vim打开配置文件
vim ~/.jupyter/jupyter_notebook_config.py
修改如下地方:
c.NotebookApp.ip = '*' c.NotebookApp.password = u'sha:ce...刚才复制的那个密文' c.NotebookApp.open_browser = False c.NotebookApp.port = 8888 #随便指定一个端口,但是要记住 c.NotebookApp.allow_remote_access = True c.NotebookApp.notebook_dir = u'目录' #这个是根目录,不想配置就不配置,默认是用户家目录
-
启动jupyter notebook
正常启动:
jupyter notebook
但是我们可能通常想要在后台启动jupyter,然后关闭终端,在本地电脑上用浏览器访问:
nohup jupyter notebook &
-
远程访问
在本地打开浏览器访问
http://address_of_remote:8888
就可以访问jupyter的登录界面了,输入密码就可以正常登录了。
意外情况
有些服务器可能只开放一个对外的端口,但是我们通过终端访问服务器需要一个对外端口,开启jupyter服务又需要一个端口,这样就需要同时占用两个端口才行。举个栗子,服务器为了保证安全性只开放了一个对外的端口,22号端口,我们使用终端通过22号端口登录到服务器上打开jupyter,jupyter创建的端口是8888号,但是服务器没有对外开放8888号端口,所以即使打开了jupyter,外面也无法正常访问。如果把jupyter的端口号改为22号,由于我们登录终端的时候正在占用22号,所以jupyter就会提示端口已被占用,无法创建。网上有很多教程说可以通过修改防火墙设置来开放端口,修改防火墙设置一般都需要管理员权限,但是通常我们使用服务器的时候大多数情况下是不可能有管理员权限的,这时候我们可以使用端口映射来解决这个问题。
-
首先登录终端打开jupyter,这时根据配置信息jupyter占用的是8888端口。
-
然后我们在本地上使用命令行输入:
ssh -N -f -L localhost:9999:localhost:8888 -p 端口号 username@远程地址
例如
ssh -N -f -L localhost:9999:localhost:8888 -p 22 yzr@202.48.29.23
这里说明一下:
locahost:9999
是指本地地址,localhost:8888
是指远程地址,其中8888
是jupyter notebook中设置的端口号,-p 22
是指登录服务器的端口号 后面是用户名和服务器ip。 -
打开浏览器,输入
localhost:9999
就可以看到jupyter notebook的登录界面了。
这里原理上就是将服务器上的8888端口映射到本机的9999端口。