Jupyter非常好用。之前使用都是单机使用,有时回家了就先远程上学校的电脑(主要是因为要用的数据只有学校的电脑里有)来使用Jupyter,但是网络时好时不好,有时远程的效果并不好。因为Jupyter本身就都可以支持跨网络访问,所以学习了下让Jupyter支持跨网络访问的方法。学习时发现网上的资料说得并不是非常清楚,因此重新归纳总结写下此文。
此文的目标是简洁地说明在Windows上己能用Jupyter的情况下,配置Jupyter以支持外网远程访问。
Jupyter开启服务器有3种安全性级别,如下,括号中给出了配置估计需要的时间:
- 完全开放,任何人都可以访问;(2分钟)
- 需要输入密码访问,传输不加密;(3分钟)
- 需要输入密码访问,传输基于ssh;(5~120分钟)
以下依次说明如何进行设置。
- 完全开放,任何人都可以访问
先创建一个profile:
$ ipython profile create nbserver
修改创建的profile目录中的ipython_notebook_config.py文件:
c.NotebookApp.ip = '*' #支持其它IP访问,关键
c.NotebookApp.open_browser = True
c.NotebookApp.port = 8035
后两项都可以保存不改,配置完成。启动测试:
$ ipython notebook --profile=nbserver
- 需要输入密码访问,传输不加密
在以上配置上继续。
创建hash密码:
In [1]: from IPython.lib import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aea'
再次更改profile目录中的ipython_notebook_config.py文件:
c.NotebookApp.password = u'sha1:bcd259ccf...your hashed password here'
配置完成,以同上方式启动后可见要先输入密码才可进入。
- 需要输入密码访问,传输基于ssh
此步的关键在于ssh验证文件的生成,我自己先下了openssl的windows版本,生成时却报错了。尝试使用所附在线服务生成,好像也没成功。最终让朋友在linux机器上帮我生成出来。我把生成的过程和结果包括在下面,读者既可以直接使用,也可以自己尝试。
$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout key_cert.pem -out key_cert.pem
此命令把key和cert都输出到key_cert.pem文件里,内容如下:
-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALXspYXESrhNWKRC
c74v2P8Dzxelctfuk8xRZEquxmxpjLEox6fuCz2H3v58atXqObsLbVdeMhMnA6a+
zfU+s8WekEYbM9N3AHcBd0jG0EkYDXdYcy+I4JdMWF52bwZtqrx8vzNTA8jsQAU8
InaCDcLbIgOL+ofU9lo+XjDkvsxRAgMBAAECgYALTxyzBhLHBjfebisXxY2tvKTh
CW3sMm6Jov2jDt5S2vTeBnTy4X9dYdbg5wcVKSxRjlJLvhVKz4AQm4feGPm/0la8
JqxE4RlsWOJPNnkGXuvQdVVaulE4B2pZhxTUlOdGxHullr247MUCwlQVAYjyc6wo
iVzNqN5xvnJLADkfiQJBAN02qeho0FFmZJUHYyeXf+2YgFYCXXebgOVPVTVGwJZ7
pPdcA5RpX+h7B3VZuqvaTERag2TIPM6QHs9adAc1AkMCQQDSiFSZ0fParjb5x7za
prLMkOdajPfKZHwIoStZI4Sx3g1bQqHVRJhdALdwpNUfGHGmEsRMkDvWwxFGy9jb
xV/bAkEAloeADvpj50A56X9hZaueDdvcWKq7V4ylpWTaoqpGmyAAHaKrfO5HqTcu
2Bf7Ar5Fb634AziOyDEiBg+TLORRaQJACjmi2kGvNUzG0MTZsEjuYC8dfXFhS4wr
1gN15oNqG3VscqU+1Ova9pFlV2w6CaOXSXiZ3hoXPewFd8nIw4vHhwJBAM0VFBdc
akx9GaROvZw9+4B1n4JR7MBBawb5WuED4QG3hfNZSd9gJMLWDVi09xyVhfRG8cXP
40daS6gsVCWgnS0=
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIB8jCCAVugAwIBAgIJAOTdGC2PBgDBMA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNV
BAMMB0ppYXdlaTEwHhcNMTYxMDIxMDY0MjA3WhcNMTcxMDIxMDY0MjA3WjASMRAw
DgYDVQQDDAdKaWF3ZWkxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC17KWF
xEq4TVikQnO+L9j/A88XpXLX7pPMUWRKrsZsaYyxKMen7gs9h97+fGrV6jm7C21X
XjITJwOmvs31PrPFnpBGGzPTdwB3AXdIxtBJGA13WHMviOCXTFhedm8Gbaq8fL8z
UwPI7EAFPCJ2gg3C2yIDi/qH1PZaPl4w5L7MUQIDAQABo1AwTjAdBgNVHQ4EFgQU
GRz9q9lsbpINOs/lNbidCBT8dTYwHwYDVR0jBBgwFoAUGRz9q9lsbpINOs/lNbid
CBT8dTYwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQCiDN9jr1ZeRLhd
7UxPkJ6rKK522+pEx6od1fioGRku2aD2BDqYgZw0w8LRFLOnOUllp5E84dVPihAt
Z+qGeTzSeFtS9PvpURpVxm7TIsjIJjqtNXBn+T1liLdphYtiU22YS0KNmrt8L9iI
bYAzfCdmmX7yhHrojldA8e9x7LScqw==
-----END CERTIFICATE-----
有了key_cert.pem文件后可以先测试下正确性,使用如下方式启动Jupyter:
$ ipython notebook --certfile=key_cert.pem
如果浏览器打开的地址为https开头,那就成功了。
最后再次更改profile目录中的ipython_notebook_config.py文件:
c.NotebookApp.certfile = u'/absolute/path/to/your/certificate/key_cert.pem'
Okay,配置完成。启动服务:
$ ipython notebook --profile=nbserver
附:
在线生成ssl验证地址:
http://www.mobilefish.com/services/ssl_certificates/ssl_certificates.php#ssl_certificates_output