用SSL/TLS和XShell远程访问 Jupyter Notebook 的方法

1. 生成配置文件

$ jupyter notebook --generate-config

2. 获取密码哈希值

先打开ipython

$ ipython
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out [1]: 'sha1:XXXXXXX:9ffede0825894254b2e042ea597d771089e11aed'

复制得到的哈希值'sha1:XXXXXXX......'。

3. 生成openssh的证书

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

将得到的mykey.key和mycert.pem放入一个特定文件夹,比如~/.jupyter/secret/。

4. 修改jupyter_notebook_config.py文件

# Set options for certfile, ip, password, and toggle off browser auto-opening
# 设置证书、ip、密码并关闭自动打开浏览器
# 设置证书地址
c.NotebookApp.certfile = u'/通向/证书/的/绝对/地址/mycert.pem'
c.NotebookApp.keyfile = u'/通向/密钥/的/绝对/地址/mykey.key'
# Set ip to 'localhost' to bind on localhost for the private usage
# 用localhost域名来访问jupyter notebook
c.NotebookApp.ip = 'localhost'
c.NotebookApp.password = u'sha1:bcd259ccf...<密码的哈希值>'
c.NotebookApp.open_browser = False
# 为了网络安全,设置一个不常用的端口
c.NotebookApp.port = 88888

5. 将本地端口映射到服务器上

在XShell上的设置方法

点击上图的Properties。

用SSL/TLS和XShell远程访问 Jupyter Notebook 的方法_第1张图片

点击左边的Tunneling,然后点击Add。

用SSL/TLS和XShell远程访问 Jupyter Notebook 的方法_第2张图片

Type选择Local(Outgoing),源主机Source Host写localhost,监听端口Listening Port填你设置的Port,目标主机Destination Host填localhost,目标端口Destination Port填你设置的端口Port。

用这样的设置远程连接服务器,然后本地就可以访问服务器上的jupyter notebook。

用SSL/TLS和XShell远程访问 Jupyter Notebook 的方法_第3张图片

由于是自己使用openssl生成证书,firefox会有个certificate exception警告。


参考文献

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

2. https://www.jianshu.com/p/8fc3cd032d3c

 

你可能感兴趣的:(笔记)