目录
- 前提:
- 实验性方法:
- 方法升级:
- 注意事项
- 推荐阅读:
由于实验室服务器部署在内网。我运行在实验室服务器的jupyter服务无法直接通过ip+端口号的方法访问。于是想到了借助一个具有公网地址的华为云服务器(新用户一年100块钱)进行远程转发。我的目标是:通过这个公网地址+端口号 随时随地使用我在实验室机器上的jupyter。
前提:
- 内网服务器是可以访问外网的。
- 云服务器已经配置好了安全组设置。允许外部的访问。
- 配置从内网服务器访问外网的免密认证。
- 已经使用screen使得jupyter notebook服务在服务器后台稳定运行。指定了端口号,本例为8888。并且配置好jupyter允许外部ip的访问。
实验性方法:
在内网服务器上,运行如下代码:
ssh -fCNR port:localhost:8888 testuser@113.4.67.278
解释如下:
port : 自定义一个云服务器的端口,比如9999
8888: 实际想访问的本地端口
root和ip地址根据实际情况改写
-f : 表示SSH连接在后台运行
-C : 表示压缩数据传输
-N : 用于端口转发,表示建立的SSH只用于端口转发,不能执行远程命令
-R : 指定远程端口转发
但是,以上方法存在一个问题是,ssh会超时断联。我参考了下面这篇文章来解决。
ssh 设置超时时间
方法升级:
(真男人要持久)
ssh -fCNR port:localhost:321 root@113.4.67.278 -o ServerAliveInterval=60
注意事项
要区分远程转发-R 和本地转发 -L
本地转发(local forwarding)指的是,SSH 服务器作为中介的跳板机,建立本地计算机与特定目标网站之间的加密连接。本地转发是在本地计算机的 SSH 客户端建立的转发规则。建立本地计算机到远程计算机的 SSH 隧道以后,本地转发是通过本地计算机访问远程计算机
远程转发指的是在远程 SSH 服务器建立的转发规则。远程转发是通过远程计算机访问本地计算机。
本文使用的是远程转发的方法。
如果嫌这个设置繁琐的话,可以使用vs code进行本地转发。只要你的jupyter服务是挂在screen上持久运行的,就没有问题。要注意防止vs code的ssh超时断连。这个是可以通过下图的文件加上ClientAliveInterval进行设置的。
每一分钟,sshd都和ssh client打个招呼,检测它是否存在,不存时即断开连接。
推荐阅读:
SSH 端口转发 https://wangdoc.com/ssh/port-forwarding.html 内网服务器外网连接SSH远程端口转发实战详解