APP下载
报价宝  ›  科技  › 

如何访问服务器的 Jupyter notebook

报价宝 来源:baojiabao.com 发布时间:2019-07-05 09:50:00 10月15日更新
报价宝综合消息如何访问服务器的 Jupyter notebook

写在前面

当我们拥有一台服务器的时候,通常服务器都可能包含比本地电脑比较好的配置,特别是如果做深度学习的,服务器通常意味着有好的 GPU;然后,Jupyter notebook 允许我们可以非常直观地除错程式码,每完成一个函式或者一部分程式码,执行一下,储存当前程式码的执行结果。

所以是否可以服务器上执行 Jupyter notebook,然后本地电脑连线,直接在本地电脑写,然后服务器上执行程式码呢?

官方文件给出了答案,可以。

下面会翻译下官方文件给出的方法,这里可能有的地方翻译不太到位,请见谅。

原文:https://jupyter-notebook.readthedocs.io/en/latest/public_server.html#notebook-server-security

Jupyter notebook[1]是一个基于服务器-客户端结构的网络应用,其服务器端是采用一个基于 ZeroMQ^2和Tornado^3双程序核心结构^4,其中后者 Tornado 负责处理 HTTP 的请求服务。

注意:预设 notebook 的服务器执行在本地的 IP 地址是 127.0.0.1:8888,并且也只能通过 localhost 进行访问,也就是可以在浏览器中输入 http://127.0.0.1:8888 进行访问

但本教程将介绍如何访问一个 notebook 的服务器,并且采用一个公开的界面。

这里提醒,这不是应用于多人服务器的教程,仅供用于只有一个人使用的服务器的情况,如果是希望多人使用的情况,可以采用 JupyterHub^5,如果要应用 JupyterHub,需要一台 Unix (通常就是 Linux)的服务器,然后可以连线网络。

接下来就介绍如何实现远端访问服务器的 Jupyter notebook 的方法。

配置 notebook 服务器

首先可以通过设定密码来保护你的 notebook 服务器,在 5.0 版本的 notebook,这一步可以自动化实现了。当然要手动设定密码的话,需要在档案 jupyter_notebook_config.py 中修改 NotebookApp.password 这里的内容。

1. 前置条件:一个配置档案

第一步就是先找到或者生成配置档案 jupyter_notebook_config.py ,预设的配置档案是在 Jupyter 资料夹中的,不同系统位置如下:

Windows:C:UsersUSERNAME.jupyterjupyter_notebook_config.pyOS X:/Users/USERNAME/.jupyter/jupyter_notebook_config.pyLinux:/home/USERNAME/.jupyter/jupyter_notebook_config.py如果上述位置没有这个档案,可以通过下列命令生成:

$ jupyter notebook --generate-config

如果是 root 使用者执行上面的命令,会发生一个问题:

Running as root it not recommended. Use --allow-root to bypass.

提示资讯很明显,root 使用者执行时需要加上 --allow-root 选项。

jupyter notebook --generate-config --allow-config

执行成功后,会出现下面的资讯:

Writing default config to: /root/.jupyter/jupyter_notebook_config.py

2. 生成密码

自动生成

从 notebook 5.3 版本开始,当第一次通过令牌(token)登入的时候,notebook服务器会让使用者有机会在使用者界面设定一个密码,这将通过一个表单来询问当前的令牌以及新的密码,输入并点选 Login and setup new password 。

下次登入时候就可以直接选择输入密码而不需要令牌。如果没有设定密码,也可以按照下面的操作通过命令列设定密码。此外,可以在配置档案中设定 --NotebookApp.allow_password_change=False 来禁止第一次登入时候修改密码。

在 notebook 5.0 版本开始,可以通过一个命令 jupyter notebook password设定密码并储存到档案 jupyter_notebook_config.json,如下所示:

$ jupyter notebook password

Enter password: ****

Verify password: ****

[NotebookPasswordApp] Wrote hashed password to /Users/you/.jupyter/jupyter_notebook_config.json

手动生成

除了上述方法,也可以手动生成密码,方法如下所示:

In [1]: from notebook.auth import passwd

In [2]: passwd()

Enter password:

Verify password:

Out[2]: 'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'

passwd() 方法在没有传入引数时候,会如上所示提示输入和验证密码,它也可以传入一个字串作为密码,即 passwd('mypassword') ,但不建议这种做法,因为本来输入命令都会被储存起来,直接输入密码,相当于密码以明文方式储存在输入历史。

新增到配置档案

最后一步,就是需要将杂凑密码新增到配置档案 jupyter_notebook_config.py,也就是刚刚手动生成的例子中的 sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed,如下所示:

c.NotebookApp.password = u'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'

3. 采用 SSL 加密通讯

采用密码的时候,配合带有网站证书的 SSL 是一个好办法,可以避免杂凑的密码被非加密的形式传送给浏览器。

可以通过设定引数 certfile 来开启 notebook 服务器,进行一次安全协议模式的通讯,其中 mycert.perm 是自签(self-signed)证书。

$ jupyter notebook --certfile=mycert.pem --keyfile mykey.key

自签证书可以通过 openssl 生成,如下所示,生成一个有效期为 365 天,将 key 和 证书资料都储存在同个档案中:

$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem

当开启浏览器连线服务器的时候,浏览器会提示你的自签证书是不安全或者无法识别的,如果你希望获取不会产生警告的自签证书,可以根据教程^6所说来操作。此外,也可以通过采用 Let's Encrypt ^7来得到免费的 SSL 证书,然后根据教程[8]来配置服务器。

执行 notebook 服务器

上述步骤介绍了如何进行配置,接下来就是开始执行服务器,然后远端访问。这里首先还是需要进行如下操作,也就是修改配置档案 jupyter_notebook_config.py,找到下面几个资讯修改并去掉注释:

# 证书的资讯

c.NotebookApp.certfile = u'/absolute/path/to/your/certificate/mycert.pem'

c.NotebookApp.keyfile = u'/absolute/path/to/your/certificate/mykey.key'

# ip 设定为 *

c.NotebookApp.ip = '*'

c.NotebookApp.password = u'sha1:bcd259ccf...'

c.NotebookApp.open_browser = False

# 设定一个固定的界面

c.NotebookApp.port = 80

这里官方教程是建议 c.NotebookApp.ip 设定为 * ,但实际上这样操作可能会连线失败,所以可以选择设定为 0.0.0.1 或者就是服务器的 IP

我这边最终主要配置如下:

c.NotebookApp.ip = '服务器IP'

c.NotebookApp.password = u'sha:ce...刚才复制的那个密文'

c.NotebookApp.open_browser = False

c.NotebookApp.port =80 #可自行指定一个埠, 访问时使用该埠

接着执行命令,如果是 root 使用者,需要再加上 --allow-root ,

$ jupyter notebook

然后本地浏览器输入 服务器IP:80,接着就是输入刚刚设定的密码,即可访问 Jupyter notebook,然后就和在本地电脑操作 Jupyter notebook 一样,建立档案,执行。

需要注意的是不能在隐藏目录 (以 . 开头的目录)下启动 Jupyter notebook, 否则无法正常访问档案。

如果访问失败了,则有可能是服务器防火墙设定的问题,此时最简单的方法是在本地建立一个 ssh 通道:

在本地终端中输入

$ ssh [email protected]_of_remote -L 127.0.0.1:1234:127.0.0.1:8888

便可以在 localhost:1234 直接访问远端的 jupyter notebook了。

关于 ssh 通道的知识,可以检视:

https://www.zsythink.net/archives/2450

参考:

[1]: https://jupyter-notebook.readthedocs.io/en/latest/notebook.html [8]: https://jupyter-notebook.readthedocs.io/en/latest/public_server.html#using-lets-encrypt

https://blog.csdn.net/simple_the_best/article/details/77005400https://www.jianshu.com/p/7cac2e5ec35b

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 数码相机价格 电视机价格 小米手机价格 红米手机价格 耳机价格