VS Code Remote-SSH通过跳板机连接目标服务器超时
VS Code Remote-SSH 跳板机连接超时排查方案
问题现象
- 网络访问限制:仅可通过跳板机连接目标服务器,本地到跳板机的SSH连接正常
- 报错表现:从跳板机尝试连接目标服务器时,VS Code弹出错误提示:Could not establish connection to "TargetMachine": The connection timed out.
- 卡顿阶段:报错触发前,VS Code长期停留在 Setting up SSH Host TargetMachine: (details) Initializing VS Code Server 状态
- 运行环境:本地设备为MacOS(darwin arm64),Remote-SSH插件版本为0.82.1
运行日志
[18:49:26.861] Log Level: 2 [18:49:26.862] remote-ssh@0.82.1 [18:49:26.862] darwin arm64 [18:49:26.864] SSH Resolver called for "ssh-remote+7b22686f7xxxxxxxxxx", attempt 1 [18:49:26.864] "remote.SSH.useLocalServer": false [18:49:26.864] "remote.SSH.showLoginTerminal": false [18:49:26.865] "remote.SSH.remotePlatform": {} [18:49:26.865] "remote.SSH.path": undefined [18:49:26.865] "remote.SSH.configFile": undefined [18:49:26.865] "remote.SSH.useFlock": true [18:49:26.865] "remote.SSH.lockfilesInTmp": false [18:49:26.865] "remote.SSH.localServerDownload": auto [18:49:26.865] "remote.SSH.remoteServerListenOnSocket": false [18:49:26.866] "remote.SSH.showLoginTerminal": false [18:49:26.866] "remote.SSH.defaultExtensions": [] [18:49:26.867] "remote.SSH.loglevel": 2 [18:49:26.867] "remote.SSH.enableDynamicForwarding": true [18:49:26.867] "remote.SSH.enableRemoteCommand": false [18:49:26.867] "remote.SSH.serverPickPortsFromRange": {} [18:49:26.867] "remote.SSH.serverInstallPath": {} [18:49:26.874] SSH Resolver called for host: TargetMachine [18:49:26.874] Setting up SSH remote "TargetMachine" [18:49:26.876] Using commit id "30d9c6cdxxxxxxxxxx" and quality "stable" for server [18:49:26.878] Install and start server if needed [18:49:27.602] PATH: /Users/songjia/.gem/ruby/3.1.1/bin:/Users/songjia/.gem/ruby/X.X.0/bin:/usr/local/opt/ruby/bin:/Users/songjia/.gem/ruby/3.1.1/bin:/Users/songjia/.rubies/ruby-3.1.1/lib/ruby/gems/3.1.0/bin:/Users/songjia/.rubies/ruby-3.1.1/bin:/opt/homebrew/Caskroom/miniforge/base/bin:/opt/homebrew/Caskroom/miniforge/base/condabin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/songjia/.rvm/bin [18:49:27.602] Checking ssh with "ssh -V" [18:49:27.611] > OpenSSH_8.1p1, LibreSSL 2.7.3 [18:49:27.612] Running script with connection command: ssh -T -D 56756 -o ConnectTimeout=40 'TargetMachine' bash [18:50:07.950] > Connection timed out during banner exchange [18:50:07.950] Got some output, clearing connection timeout [18:50:08.069] "install" terminal command done [18:50:08.070] Install terminal quit with output: Connection timed out during banner exchange [18:50:08.070] Received install output: Connection timed out during banner exchange [18:50:08.073] Resolver error: Error: The connection timed out at Function.Offline (/Users/songjia/.vscode/extensions/ms-vscode-remote.remote-ssh-0.82.1/out/extension.js:1:585270) at /Users/songjia/.vscode/extensions/ms-vscode-remote.remote-ssh-0.82.1/out/extension.js:1:582845) at Object.t.handleInstallOutput (/Users/songjia/.vscode/extensions/ms-vscode-remote.remote-ssh-0.82.1/out/extension.js:1:583059) at Object.t.tryInstall (/Users/songjia/.vscode/extensions/ms-vscode-remote.remote-ssh-0.82.1/out/extension.js:1:680958) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async /Users/songjia/.vscode/extensions/ms-vscode-remote.remote-ssh-0.82.1/out/extension.js:1:643905) at async Object.t.withShowDetailsEvent (/Users/songjia/.vscode/extensions/ms-vscode-remote.remote-ssh-0.82.1/out/extension.js:1:647221) at async Object.t.resolve (/Users/songjia/.vscode/extensions/ms-vscode-remote.remote-ssh-0.82.1/out/extension.js:1:644955) at async /Users/songjia/.vscode/extensions/ms-vscode-remote.remote-ssh-0.82.1/out/extension.js:1:727005) [18:50:08.085] ------
根因定位
日志核心报错为Connection timed out during banner exchange,说明SSH链路在跳板机转发到目标服务器的握手阶段就已经超时,连接根本没走到VS Code Server初始化环节,和VS Code Server安装包损坏、目标机权限不足类问题无关。
排查&解决步骤
按优先级从高到低操作:
- 先排除原生SSH链路故障
完全退出VS Code,打开本地Mac终端直接执行ssh TargetMachine,看是否能正常登录目标服务器:- 如果原生SSH也连不上,问题和VS Code无关:先检查
~/.ssh/config中TargetMachine的ProxyJump配置项是否正确,确认跳板机地址、用户名、端口、私钥路径无拼写错误;再手动登录跳板机,在跳板机终端内直接执行ssh <目标服务器IP>,确认跳板机到目标机的网络连通性、SSH端口开放状态、防火墙规则、私钥权限正常,排除目标机sshd服务宕机、路由不通的问题。 - 如果原生SSH可以正常登录,再进行后续VS Code相关配置调整。
- 如果原生SSH也连不上,问题和VS Code无关:先检查
- 调整VS Code Remote-SSH配置
- 调大连接超时阈值:打开VS Code设置,搜索
remote.SSH.connectTimeout,将默认的40秒修改为120秒,跨跳板机的多跳SSH链路网络延迟高时,40秒不足以完成SSH握手流程。 - 临时关闭动态转发:搜索
remote.SSH.enableDynamicForwarding,将值改为false,部分企业跳板机的安全策略会拦截动态端口转发请求,导致SSH握手卡住。 - 对齐SSH参数:检查
~/.ssh/config中TargetMachine的配置项,不要额外添加强制IPv6、自定义加密算法之类的特殊参数,和原生终端能正常连通时使用的SSH参数保持一致。
- 调大连接超时阈值:打开VS Code设置,搜索
- 清理残留锁文件
如果之前曾成功通过VS Code连接过目标服务器,先通过原生SSH登录目标机,执行rm -rf ~/.vscode-server/bin/*/lockfile删除残留的VS Code Server锁文件,避免旧进程占用导致初始化卡住。 - 高阶排查
以上操作都无效时,将remote.SSH.loglevel设置为3开启调试日志,重连时查看SSH握手的详细输出,定位具体是跳板机转发被拦截,还是目标机sshd响应超时。
内容的提问来源于stack exchange,提问作者sjchasel
相关产品推荐
相关产品推荐

