在网上查找了很多资料,试了很多方法,踩了不少坑,现在记录下最终的可行方案。
主要参考这2篇:https://cloud.tencent.com/developer/article/1488507
https://www.cnblogs.com/qiangzi0221/p/8933722.html
1、生成配置文件,有的服务器是已经生成了配置文件,这步就可以省略。root用户需要加上--allow-config.
$:jupyter notebook --generate-config # jupyter notebook --generate-config --allow-config
2、生成密钥,打开python解释器
$:python
>>>from notebook.auth import passwd
>>>passwd()
#输入新的登陆密码(本地访问的时候使用)
#再次确认
#生成key,复制留存并修改到配置文件中去
比如我生成的key是 : 'sha1:69a5200a8cca:fc886d755620d9ddaec077439ca272fg048ec416'
3、采用 SSL 加密通信(非必要)
输入下面的命令,会让你输入一些地理位置信息,这些可以随便填
$:openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem
完成后输出以下命令
$:jupyter notebook --certfile=mycert.pem --keyfile mykey.key
4、修改配置文件,就是第一步中生成的配置文件的路径。
$:vim ~/.jupyter/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 = '*' # 这里设置成'0.0.0.1' 也可以 我就是这样的 或者 '服务器IP'
c.NotebookApp.password = u'sha1:bcd259ccf...<your hashed password here>'
c.NotebookApp.open_browser = False # 不打开浏览器,后台运行
# 设置一个固定的接口
c.NotebookApp.port = 49999
5、最后一步,在服务端开启notebook
$ jupyter notebook
6、 此时notebook已经打开,回到自己本机,需要先建立一次ssh连接,不然有的服务器会拒绝
$:ssh username@address -L 127.0.0.1:1234:127.0.0.1:8888
$:ssh username@address -p 800 -L 127.0.0.1:1234:127.0.0.1:49999
username是你远程服务器账号的名字,address是服务器的ip地址 ,如果服务器开放端口不是默认的22 ,比如是800,那就在adress后面添加 -p 800,127.0.0.1:1234是本地映射的地址和端口,127.0.0.1:49999是远程服务器的地址和端口.
现在就可以在自己浏览器中输入 localhost:1234
直接访问远程的 jupyter notebook
了 或者 127.0.0.1:1234。
另外,windows用户无法用cmd使用ssh话,参考我这篇配置下ssh服务。
window 下用cmd使用ssh 教程(踩的坑总结):https://blog.csdn.net/qq_26593695/article/details/104533592
_________________________________________________________________
2020年7月4日
这里再补充各坑,是最近发现的
我有次重新连却连不上了,所以重新配置,但是发现还是没用,一直以为是SSH密匙问题。
报错:SSL Error on 14 ('127.0.0.1', 36136): [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:645)
后来解决是看了这篇:https://blog.csdn.net/jjwho/article/details/75098295
再访问的地址前面加上https://xxx 即可
---------------------------------------------------
2021年3月26日
解决使用tab健却没有代码补全提示的问题,需要卸载 jedi包
pip uninstall jedi --yes