VS Code Remote SSH 如何选择远程工作区的默认终端
来源:17golang原创
时间:2026-09-12 11:36:16 292浏览 收藏
VS Code Remote SSH 连上服务器后,最容易遇到的不是 SSH 本身,而是“我明明改了默认终端,为什么新开的窗口还是另一个 shell”。原因通常是把本机 User 设置、Remote 设置和 Workspace 设置混在了一起。
官方地址:https://code.visualstudio.com/docs/remote/ssh
终端 profile 文档:https://code.visualstudio.com/docs/terminal/profiles
这篇文章用一个清晰的顺序解决它:先判断设置作用域,再定义远端 profile,最后用终端里的几个无副作用命令核对结果。文中的界面图是原创操作示意图,不是真实截图;命令和输出用于说明你应该观察什么。
先区分三个设置层级,再配置远端终端
Remote SSH 窗口左下角出现 SSH 主机后,当前窗口已经有了远程上下文。此时从 终端 菜单新建的集成终端,会在远程主机上运行,而不是回到本机 Terminal。
设置优先级可以简单理解为:默认设置是基础,User 设置影响全部窗口,Remote 设置只覆盖当前远程主机,Workspace 设置再覆盖当前项目。只想让某个服务器使用特定 shell 时,应优先打开命令面板中的 Preferences: Open Remote Settings,不要直接改本机 User Settings。

在 Remote Settings 中定义终端 profile
打开远程设置的 JSON 后,先定义一个 profile,再把默认 profile 指向同名配置。下面示例针对远程 Linux 主机,使用登录方式启动 Bash:
{
// 为远程 Linux 工作区定义一个登录 Bash,名称就是下方要引用的 profile 名
"terminal.integrated.profiles.linux": {
"Remote Bash": {
"path": "/bin/bash",
"args": ["-l"]
}
},
// 这里必须和上面的键名完全一致,否则新终端不会使用该 profile
"terminal.integrated.defaultProfile.linux": "Remote Bash"
}
path 是远端机器上的 shell 路径,不能填写你本机的路径;args: ["-l"] 表示用登录 shell 启动,便于读取远端用户的登录环境。如果你使用的是 zsh,只需把路径和 profile 名换成远端实际存在的值。
保存后不要继续复用已经打开的旧终端。旧终端是在设置修改前创建的,它不会自动切换 profile;关闭它,再新建一个终端更容易判断配置是否生效。
用命令面板选择并启动默认终端
在 Remote SSH 窗口按 F1,执行 Terminal: Select Default Profile,选择 Remote Bash。也可以点击终端面板右上角新建终端按钮旁的下拉箭头,检查带“默认”标记的 profile。
这里有一个常见误区:选择默认 profile 只决定“以后新建终端使用谁”,不会把当前已经打开的终端进程改造成另一个 shell。因此验证时要新建终端,并观察终端标签是否显示 Remote Bash。
如果下拉列表里没有这个名字,先检查当前窗口左下角是不是 SSH 主机,再检查配置键是否使用了远端平台对应的 linux。把 profiles.osx 写在远程 Linux 设置里,通常就是看不到 profile 的原因。
运行命令核对结果
终端启动后,可以用下面几条没有副作用的命令确认三个事实:shell 路径、工作区目录和当前主机。实际项目中把示例值替换成你的远程主机和目录即可。
# 先确认当前终端使用的 shell,再确认工作区目录 echo "$SHELL" pwd # 用固定文本标记当前 profile,便于在终端输出中快速核对 printf 'PROFILE=Remote Bash\nSTATUS=ready\n'
/bin/bash /workspace/remote-demo PROFILE=Remote Bash STATUS=ready

如果 pwd 显示的是远程项目目录,左下角也显示 SSH 主机,基本可以确认终端上下文正确。若 shell 对了但目录不对,应继续检查 Workspace 根目录,而不是反复修改 terminal profile。
任务终端和交互终端不是一回事
日常敲命令使用的是交互终端;运行任务、调试或某些扩展操作时,VS Code 还可能使用 automation profile。官方配置中可以单独设置 terminal.integrated.automationProfile.linux,例如让任务使用更精简的 POSIX shell。
{
// 交互终端继续使用 Remote Bash,保留登录环境
"terminal.integrated.defaultProfile.linux": "Remote Bash",
// 任务和调试单独使用 sh,减少复杂启动脚本带来的干扰
"terminal.integrated.automationProfile.linux": {
"path": "/bin/sh"
}
}
这两个设置不要混为一谈:你在终端面板里看到的 profile 正常,不代表任务一定读取同一套 shell 环境。排查“手动执行成功、任务执行失败”时,优先比较这两个作用域。
常见问题
为什么我改完设置,当前终端没有变化?
因为 profile 只影响新建终端。关闭旧终端后重新创建,再看终端标签和 echo "$SHELL" 的输出。
Remote SSH 里应该配置 User Settings 还是 Remote Settings?
只针对一台远程主机时用 Remote Settings;希望所有项目都保持相同 shell 时才放到 User Settings。某个项目必须特殊处理,再使用 Workspace Settings 覆盖。
小结
这件事可以记成三步:远程窗口先确认作用域,profiles 先定义名字,defaultProfile 再引用同一个名字。新建终端后用 shell、目录和主机标记核对结果,遇到任务差异时再检查 automationProfile。这样排查会比反复切换本机终端快捷得多。
-
文章 · 软件教程 | 33分钟前 | 使用教程 · AI工具 · LoRA · LiblibAI · Stable Diffusion · LiblibAI LoRA权重 LoRA模型下载 本地WebUI 底模匹配195 收藏
-
252 收藏
-
145 收藏
-
文章 · 软件教程 | 2小时前 | vs code · 软件教程 · 多根工作区 · 工作区配置 · 语言服务 · VS Code settings.json 语言服务 多根工作区 Folder Settings172 收藏
-
文章 · 软件教程 | 2小时前 | 故障排查 · AI工具 · LiblibAI · Stable Diffusion · 在线生图 · LiblibAI 提示词排查 stable diffusion在线 效果不好 参数排查312 收藏
-
文章 · 软件教程 | 2小时前 | 入门教程 · AI工具 · LiblibAI · Stable Diffusion · 在线生图 · 新手教程 文生图 WebUI LiblibAI stable diffusion在线485 收藏
-
399 收藏
-
182 收藏
-
123 收藏
-
113 收藏
-
220 收藏
-
270 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习