Ubuntu服务器部署Jupyter Notebook遇权限问题,求安全远程访问方案
我之前也卡在过这个问题上:想在Ubuntu服务器上用普通用户跑Jupyter Notebook做远程访问,SSH隧道搞不定(权限不够),又不敢把服务直接暴露到公网,用root跑虽然能成,但总觉得心里发慌——毕竟root权限太敏感了。下面是我亲测有效的几个解决办法:
方案1:给普通用户配置Jupyter,限制访问范围
首先在普通用户账号下生成Jupyter配置文件:
jupyter notebook --generate-config
然后打开生成的配置文件~/.jupyter/jupyter_notebook_config.py,修改这几个关键参数:
- 让Jupyter监听服务器的本地回环地址(避免直接对外暴露):
c.NotebookApp.ip = 'localhost' - 设置一个大于1024的端口(因为1024以下的端口需要root权限,普通用户用不了):
c.NotebookApp.port = 8889 # 随便选个没被占用的端口就行 - 禁止自动打开服务器端的浏览器:
c.NotebookApp.open_browser = False - 设置登录密码(比默认的token更方便安全):
在终端直接运行jupyter notebook password,按提示设置密码,配置文件会自动生成加密后的密码条目,不用手动改。
方案2:用SSH反向隧道绕开权限限制
如果之前正向SSH隧道因为权限问题没法用,试试反向隧道——这种方式不需要服务器端开放对外端口,全程通过SSH加密传输,安全又省心:
- 先在本地机器上运行这条命令(把
your_user换成你服务器的普通用户名,server_ip换成服务器地址):ssh -R 8889:localhost:8889 your_user@server_ip - 然后在服务器的普通用户终端里启动Jupyter:
jupyter notebook --ip=localhost --port=8889 - 最后在本地浏览器打开
http://localhost:8889,输入你之前设置的密码就能访问服务器上的Jupyter了。
为什么绝对不要用root跑Jupyter?
用root运行Jupyter的风险真的很高:如果你的Notebook里不小心执行了危险命令(比如rm -rf /),或者被恶意代码利用,直接就能拿到服务器的最高权限,搞不好整个服务器都要崩。普通用户运行的话,最多影响你自己的账号目录,安全得多。
内容的提问来源于stack exchange,提问作者An0n




