本地用浏览器远程访问服务器上的jupyter notebook或者jupyter lab,并解决启动时的PermissionError错误

大家都知道,对于从事数据科学或者机器学习的人来说,用jupyter做实验简直就是一个神器,但是往往许多算法和模型我们都希望利用远程的linux服务器进行实现和测试
这里介绍一种能用本地的浏览器访问服务器上架设的jupyter的方案,使得我们可以通过本地浏览器使用服务器的计算资源、访问服务器上的文件系统

下面正片开始:

  1. 官网下载anaconda,或者用pyenv下载都行,安装到服务器,个人用户的东西安装不要用sudo权限。(anaconda是一个很方面的python管理和集成包,里面包含一个python版本和对应的一些工具,其中就包括jupyter)
  2. 接下来,我们需要在当前用户的根目录创建一个名为nbserver的配置文件。
$ ipython profile create nbserver
  1. 这将创建一个文件夹,其中包含一些原始的配置文件。我们跳转到这个文件夹进行一些配置
$ cd ~/.ipython/profile_nbserver/
  1. 由于ipython Notebook要求https连接,因此我们需要创建一个ssl证书。
$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
  1. 启动ipython:(ipython其实就是jupyter的底层shell界面,所以我们装的anaconda里面会自带jupyter,同时也有了ipython)
$ ipython

创建远程连接密码:

In [1]: from notebook.auth import passwd; 
In [2]: passwd()

运行之后进入一个创建密码hash值的小程序,根据提示输入你想用的安全口令(这是之后在本地浏览器,登陆服务器所需要的密码):

Enterpassword:
Verifypassword:

然后会输出(下面是我的密码的hash值,后段被删除,你的密码得到的结果应该不同,这个hash值要记住,之后要写入配置文件):

Out [2]: sha1:b86e933199ad:a02e9592e59723da722..
  1. 然后退出ipython,开始编辑配置文件,通过vi编辑文件的命令如下:
vim ipython_notebook_config.py

这个文件可能不存在,那么这条命令会自动创建一个,配置文件的内容如下:

c=get_config()

# 所有matplotlib的图像都通过iline的方式显示
c.IPKernelApp.pylab='inline'

# 这一行指向我们刚刚创建的ssl证书,这里的路径要给绝对路径(反正我给相对路径报错)
c.NotebookApp.certfile=u'/home/XXX/.ipython/profile_nbserver/mycert.pem'

# 给出刚刚创建的密码的哈希值
c.NotebookApp.password=u'sha1:b86e933199ad:a02e9592e59723da722..'
c.NotebookApp.ip='*'

# 给出运行的端口,ipython默认为8888
c.NotebookApp.port=8888

# 禁止在运行ipython的同时弹出浏览器
c.NotebookApp.open_browser=False

复制粘贴进去之后,摁esc,然后 ‘:wq’ 保存退出。
7. 配置完毕以后就可以运行ipython notebook或者jupyter lab的服务端了:

$ jupyter notebook --config=~/.ipython/profile_nbserver/ipython_notebook_config.py #给出你刚才创建的nbserver路径
$ jupyter lab --config=~/.ipython/profile_nbserver/ipython_notebook_config.py #给出你刚才创建的nbserver路径


  1. 在你的本地浏览器地址栏输入:

https://192.168.xxx.X:8888(这里就输入你服务器的IP地址,加上配置的端口号8888,注意前面的https不能省,省了会报错,例如:SSL Error on 13(‘192.168.1.110’, 9349): [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:645))
注意:最好用chrome 浏览器

最后浏览器打开的根路径是之前在服务器上启动jupyter notebook时所在的服务器路径,所以你最好在服务器的用户根目录下启动你配置好的jupyter,然后就和我们使用本地的jupyter一样了。


注意有时候服务器启动jupyter的时候可能报类似下面的这种错误:

PermissionError: [Errno 13] Permission denied: '/Users/JDMac/Library/Jupyter/runtime'

可以通过在服务器配置文件中加下面这条语句解决:

$ export XDG_RUNTIME_DIR="" then start the jupyter $jupyter notebook
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章