再探 ssh 和 VScode((双重)远程转发和本地转发)

注: 本文使用的 7890/7891/7892 端口只是为了区分,实际转发时可以相同。

远程转发(反向代理):

基本指令:

'-R' 代表 RemoteForward(远程转发,也叫反向代理),意义为使得远程服务器在访问远程某端口时,等于访问本机的某端口。

指令形如:

ssh -R 7890:localhost:7891 RemoteB

设本机为 LocalA,在 Remote B 上访问 7891 上,等价于访问 LocalA 的 7890 端口。

注意这是一个简写,7890 的前面还可以加具体的 IP 地址,省略的话默认为 localhost:

不省略例如:

ssh -R 192.168.1.100:7890:localhost:7891 RemoteB

VSCode 指令:

Host RemoteB
  HostName RemoteB
  User user_of_RemoteB
  Port 22
  RemoteForward localhost:7891 localhost:7890

注意 RemoteForward 和 -R 的顺序是反过来的。

应用:

远程转发可以让远程服务器使用本机的端口(例如 VPN)
之间讲的转发到本地 VPN 工具的见:
https://www.cnblogs.com/coldchair/p/18050457

双重远程转发:

有的时候我们会有一个登录节点,需要通过登录节点才能连接到计算节点。
我们先用上面的方法登录到 RemoteB,再用同样的方法登录到 Remote C 即可实现双重转发:

ssh -R 7891:localhost:7892 RemoteC

此时 RemoteC 上访问 7892 端口,等价于访问 RemoteB 7891 端口,等价于访问 LocalA 7890 端口。

本地转发(前向代理)

基本指令

'-L' 代表 LocalForward(本地转发,也叫前向代理),意义为使得本地访问某端口时,等于访问远程服务器某端口。

指令形如:

ssh -L 7890:localhost:7891 RemoteB

访问本机 LocalA 的 7890 端口时,等价于访问 RemoteB 的 7891 端口。

VSCode 指令:

其余不变

  LocalForward localhost:7890 localhost:7891

注意这次顺序没反,所以 VScode 的 .ssh/config 中的顺序是 ???Forward <要被转发的端口> <转发到的端口>
而 -L/R 的顺序是 <本机端口>:<远程端口>

应用:

假设远程节点上开了个 tensorboard,我们想在本地的浏览器打开,就需要本地转发。
或者远程节点开了个 jupyter 后端,我们想在本地的编辑器打开。

一般来说,只有一层转发的话,VSCode 会自己帮你转发(例如在运行 tensorboard 指令时),在编辑器下面 [终端] 旁边的 [端口] 中。

双重本地转发:

有登录节点,在计算节点打开某后端,在本机运行需要双重本地转发。

第一层连接时,VSCode 不用预先设置 -L 或者 LocalForward,直接弄好第二层连接时,再在 [端口] 中设置一个即可。

posted @ 2024-11-04 23:56  Cold_Chair  阅读(241)  评论(0编辑  收藏  举报