jupyter notebook 由于配置文件的优先冲突,password设置无用。.password字段在json中覆盖.py中的设置,token存在时优先考虑token;正确的做法是清空.json、在.password并置空token在py中明确设置。
直接用 jupyter notebook password 可以设置,但设置后不生效是正常的——根本原因是配置文件的优先冲突,token 未关闭,或密码被 .json 文件覆盖。
jupyter notebook password 设置了却没用?
这个命令确实会生成哈希密码并写入 .jupyter/jupyter_notebook_config.json,但是**不会自动修改 jupyter_notebook_config.py**。而且如果手动更改 .py 文件里的 c.NotebookApp.password,Jupyter 开始时会优先阅读 .json(高优先级),导致你改变 .py 无视配置。
-
jupyter_notebook_config.json优先级高于配置项jupyter_notebook_config.py - 如果
.json里有"password"即使值是空的或非法的,字段也会被屏蔽.py中的设置 - 同时存在 token 和 password 时,Jupyter 可能只认 token,还提示导致密码输送
Invalid credentials
绕过优先级陷阱,必须让步 password 成为唯一的认证方式:
- 先清空或删除
.jupyter/jupyter_notebook_config.json(特别是确认里面没有"password"或"token"字段) - 确保
jupyter_notebook_config.py注释已取消,赋值已明确:c.NotebookApp.password = u'sha1:xxx...'c.NotebookApp.token = '' - 重启前增加验证:操作:
jupyter notebook --debug,查看日志是否打印Using password: True和token: ''
不要手敲哈希,用 Python 原始函数生成最稳定。注意版本差异:
Jupyter Notebook 7.5.4
Jupyter Notebook 7.5.4 官方 PyPI wheel 包下载适用于本地交互式代码运行、数据分析、教学演示和文件配置实践。
下载- Jupyter Notebook ≥ 6.0(推荐):
python -c "from jupyter_server.auth import passwd; print(passwd())" - Jupyter Notebook
python -c "from notebook.auth import passwd; print(passwd())" - 执行后输入两个密码,输出类似
argon2:$argon2id$v=19$m=10240,t=10,p=8$...或sha1:ce23d945972f:3476685a7cd3d08cd84a18c63968a41f14,直接复制整串
否则,密码可以在本地输入,仍然可以远程跳跃 token 登录页或直接拒绝连接:
-
c.NotebookApp.ip = '0.0.0.0'或'*'(默认情况不能留下'127.0.0.1') -
c.NotebookApp.port = 8888(选择未被占用的端口) -
c.NotebookApp.open_browser = False(当服务器没有图形界面时,必须) -
c.NotebookApp.allow_password_change = False(防止别人在网页上点击“”Change password“绕过你的配置)
真正容易被忽视的是 .json 文件本身的存在——它就像一层无声的覆盖层,不删除,全部 .py 所有的努力都白费了。