再探 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,直接弄好第二层连接时,再在 [端口] 中设置一个即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2019-11-04 【NOIP2019模拟11.01】Game(贪心+线段树)