本地ssh连接远程服务器jupyter notebook - ssh端口转发
做深度学习的人通常要在服务器运行代码,而jupyter notebook会是一个很好的交互工具,那么如何在本地浏览器访问服务器的jupyter notebook呢?上面我是通过打开安全组的8081端口,来实现用公网ip:8081在本地浏览器访问远端jupyter notebook但是这有一点风险性。比较好的方法是公网只开放22端口(用于登录服务器界面),而私网的所有端口都是开放的,用本地端口转发。
文章目录
o(*≧▽≦)ツ:做深度学习的人通常要在服务器运行代码,而jupyter notebook会是一个很好的交互工具,那么如何在本地浏览器访问服务器的jupyter notebook呢?
一、安装jupyter notebook
在服务器上安装 jupyter notebook
pip3 install jupyter (我不喜欢用conda来安装)
报错解决 OSError [Errno 99] Cannot assign requested address
直接输入 jupyter notebook 会有如下报错
解决方法:jupyter notebook --ip=0.0.0.0 --port=8080,具体请看 这里
二、启动 jupyter notebook
在远程服务器上运行下面命令
jupyter notebook --no-browser --ip=0.0.0.0 --port=8080 --allow-root
现在远程云主机B运行了一个jupyter notebook服务,端口为8080,本地主机A需要访问这个jupyter notebook服务。
法一:开放公网安全组端口
在B的安全组开放8080端口
点击下面的地址,就可以在本地浏览器(因为有公网ip,所以任何电脑都行,只要token正确)打开服务器的jupyter notebook服务了
如果再打开一个jupter notebook的话,它会自动开启另一个端口,如8081,这时如果你打不开,大概率是因为你服务器的端口没有开放,可以在阿里云的防火墙里设置
法二:本地端口转发
上面我是通过打开安全组的8081端口,来实现用公网ip:8081在本地浏览器访问远端jupyter notebook
但是这有一点风险性。
比较好的方法是公网只开放22端口(用于登录服务器界面),而私网的所有端口都是开放的,用本地端口转发。
比如:这里我没有在防火墙开放5600端口,那我就不能用公网:5600访问了,只能用localhost:5600访问了,但是远程服务器又没有浏览器界面!!!
本地浏览器当然也无法访问私网
解决方法:本地端口转发
语法:
ssh -L [本地IP]:本地Port:远程IP:远程Port root@xxx
上图来自:5分钟学会SSH端口转发,远程工作用得着 | 如何充分利用云服务器
执行下面命令:
ssh -L 7080:127.0.0.1:5600 wsh
现在你就可以用本地的7080端口访问远程服务器的jupyter notebook服务了
本地浏览器输入:
http://127.0.0.1:7080/?token=1f3bb3220b3aeb244733d43aaf801034a93500a65a42d192
注意:后面的token要和服务器显示的一致,所以为了方便,你本地和远程的端口设成同一个比较好。
三、进阶1:ssh命令直接进docker容器
请看:利用远程服务器和docker容器端口映射-p 3361:22 实现ssh命令直接进docker容器
四、进阶2:本地访问远程服务器中docker容器的Jupyter
20.11.7 今天在本地跑了个CIFAR10的数据集,大概50000条数据吧,结果博主的电脑内存直接从7GB飙到了15GB,炸掉死机,所以博主决定用实验室服务器跑实验了。
在远程服务器启动docker的时候做好端口映射,我把服务器的3050端口映射为的docker容器的8888端口在容器内启动 jupyter notebook (最好用conda jupyter来安装,因为我的pytorch是用的conda环境)
jupyter notebook --no-browser --ip=0.0.0.0 --NotebookApp.token= --port=8888 --allow-root
说明:
- 一定要配置参数
--ip=0.0.0.0
,如果不配置该参数,jupyter默认是不给容器外部访问的。--ip=0.0.0.0
不要写成--ip=127.0.0.1
,容易连不上 --NotebookApp.token=
设置免密登录
接下来你有两种方法访问jupyter
方法一:
你可以直接在本地浏览器用 服务器ip:3050 进行访问(前提是你电脑ip和这个服务器ip在同一个局域网内)
方法二:
也可以用将服务器的3050端口转发到本地的8888端口,然后用127.0.0.1:8080访问(即使你的ip和服务器ip不在同一个局域网也ok)
大功告成!!!
–
附:如果按照上面步骤操作了,但出现了下面的情况,可能是我proxy插件daili的问题,改成直接连接就行了!
五、相关参考
更多推荐
所有评论(0)