在Linux服务器上部署Jupyter Notebook并实现ssh无密码远程访问
Jupyter notebook版本7.4.2(这个版本AI提示我Jupyter7+(底层是 jupyter_server
2.x)
服务器开启服务
安装Jupyter notebook 7.4.2成功后,终端输入
jupyter notebook --generate-config
这将在 ~/.jupyter/
目录下生成 jupyter_notebook_config.py
文件。
进入目录将文件名修改为jupyter_server_config.py,内容的注释全部删除内容改为下面的
c = get_config()# 网络与端口设置
c.ServerApp.ip = '0.0.0.0' # 允许任意 IP 访问
c.ServerApp.port = 8888 # 监听端口
c.ServerApp.open_browser = False # 禁止自动打开浏览器
c.ServerApp.allow_remote_access = True # 允许远程访问
c.ServerApp.token = '' # 关闭 token 验证# 设置密码(格式:sha1:<salt>:<hashed_password>)
c.PasswordIdentityProvider.hashed_password = ''
然后通过下面的命令开启服务
jupyter notebook --no-browser --port=8888
这表示在服务器的8888端口开启服务
主机ssh连接
再打开一个主机的命令行,使用下面的命令
ssh -N -L 9913[这个地方可以自行设定四位十进制数字]:127.0.0.1:8888 ubuntu[这个地方要是你的服务器用户]@192.168.88.146[这个地方是你的服务器地址]
比如我的
ssh -N -L 9913:127.0.0.1:8888 ubuntu@192.168.88.146
这个命令表示将主机的9913和127.0.0.1 ip地址映射到远端(也就是服务器的8888端口)
然后通过主机浏览器输入下面的命令即可启用Jupyter的lab或者是输入tree启动传统界面
http://127.0.0.1:9913/lab
注意
在连接过程中遇到许多BUG会使得连接不成功,我记录一下我遇到的种种BUG
(1)服务器端口已被使用
当我们开启服务器端口后,希望关闭服务,使用非Ctrl+C的暴力方式退出,比如Ctrl+Z退出(实际上Ctrl+Z没有退出,只是挂起了程序),再次使用8888端口开启服务,就会自动在8889端口开启,如下图红框所示,这时我们如果还是拿主机连接,远端就要改为8889,但我似乎记得配置文件中写的是8888.。。。所以为了避免这种情况,我们固定拿Ctrl+C退出。
亦或者,emm,你已经一不小心挂起,而且不想重启服务器(实际上重新连接服务器即可)。那么是我们使用
jupyter notebook list
列出所有用作开启服务端口
OK,发现两个端口
逐个关闭所有端口,
#查看进程PID
lsof -n -i4TCP:<port-number>
#强制关闭PID
kill -9 <PID>
等下次使用时候,直接开启8888端口
(2)主机端口已被使用
就像刚刚所说的服务器8888端口退出不当,在下次使用8888端口开启服务的时候会默认开启8889端口,主机如果退出不当,也会产生这种现象。我们重启主机,或者更改主机ssh连接的端口即可。事实上我的9913也是因为不断连接而选取的数字,不过不用担心,当重启主机一切都会清空,事实上,也可以使用window下面的查看进程PID等操作,不过我不太熟悉,后面没有过多尝试
#查看进程PID
netstat -ano | findstr :<port-number>
(3)主机网页连接命令
看到网上绝大多数教程都是
loaclhost:8888
实际上这个localhost指的也是127.0.0.1(GPT告诉我的额)
我心想那我是不是这样就行了
loaclhost:9913
之后还是不行,可能是由于我是用版本的特殊性所致
Jupyter notebook版本7.4.2(这个版本AI提示我Jupyter(底层是
jupyter_server
2.x)
总之是一个让人窒息的版本。。。
(4)登陆密码
不管怎样,在配置文件中,我们可以给终端设置登陆密码
c.NotebookApp.password = 'sha1:fcf7f97ec219:fc3f70d16abf9626f6e8a9b1d84f297feebcf4f1'c.IdentityProvider.hashed_password = 'sha1:fcf7f97ec219:fc3f70d16abf9626f6e8a9b1d84f297feebcf4f1'
notebook是上面的,server是下面的,这里要注意密码的数值务必是哈希值,不然主机浏览器会一直显示密码输入不正确。我这个就是1234的哈希值。但是后来一直没有成功。配置文件中直接删除即可,就不用使用密码登陆了。