目录

  • 前提:
  • 实验性方法:
  • 方法升级:
  • 注意事项
  • 推荐阅读:


由于实验室服务器部署在内网。我运行在实验室服务器的jupyter服务无法直接通过ip+端口号的方法访问。于是想到了借助一个具有公网地址的华为云服务器(新用户一年100块钱)进行远程转发。我的目标是:通过这个公网地址+端口号 随时随地使用我在实验室机器上的jupyter。

前提:

  1. 内网服务器是可以访问外网的。
  2. 云服务器已经配置好了安全组设置。允许外部的访问。
  3. 配置从内网服务器访问外网的免密认证。
  4. 已经使用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远程端口转发实战详解