VSCode通过RemoteSSH直连后端服务器

Tuesday, December 19, 2023

TOC

风险提示!!! 生产环境谨慎操作!!!

跳板机(堡垒机)是生产环境中的安全网关,所有对内网服务器的访问都必须通过跳板机中转。传统方式需要先SSH到跳板机,再从跳板机SSH到目标服务器,操作繁琐且无法使用VSCode的远程开发功能。本文介绍一种通过VSCode Remote-SSH插件连接后端服务器的配置方法。

安装插件

Extensions(插件)面板中搜索Remote - SSH,安装。

该插件允许VSCode通过SSH连接到远程服务器,在远程环境中直接编辑代码、运行程序和调试,就像在本地开发一样。

插件安装后,

  1. 左下角点击Open a Remote Window
  2. 选择Connect to Host... -> Configure SSH Hosts,选择一个Remote-SSH配置文件开始配置 Connect to Host

第一步:连上跳板机

首先确保能够正常连接到跳板机,这是整个方案的基础。如果无法连接跳板机,后续的代理转发就无法实现。

配置跳板机连接信息:

Host JumpServer          # RemoteSSH资产名称, 随便取
 HostName jumpserver.com # 跳板机地址
 User jumpUser           # 跳板机用户
 Port 31100              # 跳板机端口

建议先测试这个配置,确保能通过VSCode Remote-SSH成功连接到跳板机。任何能够SSH访问且有权限连接目标服务器的机器都可以充当跳板机角色。

第二步:通过跳板机连上后端服务器

根据实际情况配置:

Host JumpServer          # RemoteSSH资产名称, 随便取
 HostName jumpserver.com # 跳板机地址
 User jumpUser           # 跳板机用户
 Port 31100              # 跳板机端口

Host myServer            # RemoteSSH资产名称, 随便取
 HostName 10.1.1.1       # 后端服务器地址
 Port 31100              # 后端服务器端口
 User myUser             # 后端服务器用户
 ProxyCommand ssh -W %h:%p JumpServer # {JumpServer}需与上面的配置一致

配置保存后重新点击Open a Remote Window选择Connect To Host...选择开发机(myServer)输入密码即可。

工作原理

注意到这里ProxyCommand ssh -W %h:%p JumpServer 是核心配置:

  1. VSCode尝试连接myServer
  2. SSH客户端执行ProxyCommand,先连接到JumpServer
  3. 在跳板机上建立到目标服务器的隧道(ssh -W 10.1.1.1:31100
  4. 所有SSH流量通过跳板机转发到目标服务器

实现效果:VSCode → JumpServer → myServer,VSCode感觉像直接连接目标服务器。

除了VSCODE连上生产环境之外(一般也不这样做,没有谁会在生产环境的机器上开发吧),还有一个非常实用的场景,就是VSCODE到一个开发服务器上,通过devcontainer在目标机器上进行开发 – 即不占用本地机器的资源,又保证了开发环境的一致(任何地方都可以SSH回同一台机器进行开发),还能够快速搭建开发环境(基于docker)。