VSCode脚本共享本身不安全,必须主动关闭危险开关、限制执行范围并确认协作方可信;Live Share默认允许来宾访问终端、调试器和文件系统,tasks.json和launch.json等配置文件被同步后可能在主机静默执行命令,需通过.vsls.json禁用allowGuestTerminal、设terminal为view或false,并严格审查工作区信任状态。

VSCode 脚本共享本身不安全——除非你主动关掉危险开关、限制执行范围,并确认协作方可信。Live Share 默认允许来宾访问终端、调试器和文件系统,而脚本(比如 tasks.json、launch.json 或自定义 Shell/PowerShell 脚本)一旦被共享,就可能在主机环境里静默执行。
为什么 tasks.json 和 launch.json 是高危入口
这两类配置文件在共享时会被自动同步给来宾,且 VSCode 会在“受限模式”解除后尝试加载并运行其中定义的任务或调试配置。问题在于:
- 它们可以调用任意本地命令:
"command": "npm run build"或"command": "sh ./deploy.sh"都会直接在你的机器上执行 - 调试配置中
preLaunchTask可能触发构建脚本,而env字段可注入恶意环境变量 - 若工作区未设为“可信”,VSCode 本应禁用这些功能;但 Live Share 会话一旦启动,部分限制会被绕过——尤其是当主机已手动信任该工作区时
- 来宾即使没有编辑权限,只要终端被开启(
"terminal":"interact"),仍可通过复制粘贴执行脚本
liveshare.allowGuestTerminal 必须显式设为 false
这是最常被忽略的一条防线。Live Share 默认开启终端共享,且来宾终端拥有与主机相同的用户权限(不是沙箱)。你不设这个值,等于把 shell 直接交出去。
正确做法是:在工作区根目录下创建 .vsls.json(注意不是 .vscode/settings.json),写入:
{
"permissions": {
"terminal": "view",
"debug": false,
"chat": true
}
}
或者更彻底地禁用:
{
"sharing": {
"allowGuestTerminal": false
}
}
-
"terminal": "view"允许来宾看输出,但不能输入命令 -
allowGuestTerminal: false在会话级彻底关闭终端共享,优先级高于permissions中的设置 - 别依赖全局
settings.json—— Live Share 只读取工作区级的.vsls.json或.vscode/settings.json中以liveshare.开头的配置项
共享前必须检查工作区是否处于“受限模式”
VSCode 的“可信工作区”机制和 Live Share 权限是两套独立系统,但会互相影响。如果工作区本身是“不可信”的(比如从 GitHub clone 下来、U盘拷贝、邮件附件解压),即使你开了只读共享,VSCode 仍可能阻止任务/调试启动——但这不等于安全,因为来宾仍可通过其他方式(如手动打开终端 tab)试探边界。
- 右下角出现“此工作区处于受限模式”提示时,不要急着点“信任此工作区”再开共享——先审查
.vscode/tasks.json、.vscode/launch.json、.vscode/extensions.json是否含可疑命令或远程下载逻辑 - 若必须共享不可信项目,应在
.vscode/settings.json中加:"security.workspace.trust.untrustedFiles": "open"
并配合.vsls.json锁死终端和调试 - 切记:
security.workspace.trust.untrustedFiles是用户级配置,不会被共享;它只影响你本地行为,对来宾无效
PowerShell 脚本权限和 Set-ExecutionPolicy 不是 Live Share 的问题,但会放大风险
很多人遇到 xxx.ps1 cannot be loaded because running scripts is disabled 就去改策略,结果把整个开发机暴露了。Live Share 共享的是终端会话,不是 PowerShell 策略本身——但一旦你把策略设成 RemoteSigned 或 Unrestricted,来宾只要拿到终端交互权,就能运行任意本地脚本。
- 不要为适配共享而降低 PowerShell 执行策略;相反,应确保主机策略保持
Restricted(默认),并通过allowGuestTerminal: false阻断执行路径 - 如果项目真依赖 PowerShell 脚本,改用
Command Prompt或Git Bash作为默认终端,并在.vsls.json中禁用终端共享,比放开策略更可控 - WSL 环境下尤其要注意:
./script.sh的执行权限(chmod +x)和 Windows 文件系统映射可能导致行为不一致,这种模糊地带更容易被利用
真正的安全不在“能不能共享”,而在“共享时有没有让脚本能跑起来”。所有脚本类入口(tasks.json、终端、调试预启动任务)都必须按需关闭,而不是靠信任协作方来兜底。Live Share 没有“脚本白名单”机制,只有“全关”或“全开”——你得自己选好那一道门焊死。











