VSCode连接远程容器报错‘shell server terminated code 255’求助
问题详情
原本通过本地VSCode远程资源管理器访问主机的远程容器,生成另一台主机的SSH密钥后,出现报错无法打开两台主机的容器文件夹,报错内容如下:
Shell server terminated (code: 255, signal: null)
XSL 파일 경로의 파일 이름이 잘못되었습니다.
node:child_process:925
throw err;
^
Error: Command failed: wmic process where (commandline like "%ssh-askpass.bat%") get processid,parentprocessid /format:"%WINDIR%\System32\wbem\en-us\csv"
XSL 파일 경로의 파일 이름이 잘못되었습니다.
at checkExecSyncError (node:child_process:848:11)
at Object.execSync (node:child_process:922:15)
at Object.(node:electron/js2c/asar_bundle:5:12704)
at Object.(c:\Users\USER.vscode\extensions\ms-vscode-remote.remote-containers-0.266.1\dist\common\sshAskpass.js:5:808)
at Module._compile (node:internal/modules/cjs/loader:1165:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1220:10)
at Module.load (node:internal/modules/cjs/loader:1035:32)
at Module._load (node:internal/modules/cjs/loader:876:12)
at c._load (node:electron/js2c/asar_bundle:5:13343)
at Function.executeUserE...
已尝试移除主机SSH密钥、重装本地VSCode,均无效。目前docker attach命令可用,但只能用vi编辑器,操作不便。
解决方法
修复WMIC的XSL文件路径
报错核心是wmic调用的CSV格式XSL路径错误:- 打开文件资源管理器,导航到
C:\Windows\System32\wbem\en-US目录(注意是大写的en-US,不是报错里的en-us) - 如果
csv.xsl文件存在,找到远程容器扩展的sshAskpass.js文件(路径:c:\Users\USER.vscode\extensions\ms-vscode-remote.remote-containers-0.266.1\dist\common\sshAskpass.js),把里面的%WINDIR%\System32\wbem\en-us\csv改成%WINDIR%\System32\wbem\en-US\csv.xsl - 如果文件不存在,从正常Windows机器复制
csv.xsl到该目录,或者从Windows安装镜像里提取对应文件。
- 打开文件资源管理器,导航到
重置VSCode远程连接配置
- 进入
C:\Users\USER\.vscode\user-data\Machine目录,备份settings.json后删除里面和远程容器、SSH相关的配置;或者直接备份整个Machine文件夹后删除,重启VSCode会自动生成默认配置 - 打开
C:\Users\USER\.ssh\config,暂时注释掉新增的另一台主机配置,尝试重新连接原主机容器,看是否恢复正常。
- 进入
替换SSH-Askpass工具
VSCode依赖的ssh-askpass.bat可能存在问题:- 下载第三方SSH-Askpass工具(比如win-ssh-askpass)
- 设置系统环境变量
SSH_ASKPASS指向新工具的路径,重启VSCode后再尝试连接。
降级远程容器扩展
当前使用的0.266.1版本可能存在bug:- 在VSCode扩展市场找到「Remote - Containers」,点击「安装另一个版本」
- 选择一个较旧的稳定版本(比如0.250.0),安装后重启VSCode测试连接。
内容的提问来源于stack exchange,提问作者Sojung Kim

