Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>BastionShell SSHNew to Visual Studio Code? Get it now.
BastionShell SSH

BastionShell SSH

BastionShell

|
2 installs
| (1) | Free
SSH 堡垒机终端:一次 MFA + 连接复用,多开会话/批量部署/rz/sz 文件传输/端口转发/快捷命令,并提供 bastion.exec 让 VS Code 里的 AI 插件在服务器上执行命令
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

BastionShell SSH(VS Code 扩展)

站在 VS Code 的肩膀上的堡垒机终端:一次 MFA 认证 + 连接复用,之后多开会话、批量部署、文件上传都免二次认证。

核心能力

  • 连接复用:一条堡垒机连接认证一次(密码 + MFA),后续开 N 个 shell 会话直接复用,不再输 MFA。
  • MFA 在终端内输入:请求 MFA 时在终端里直接敲动态码(带倒计时),不弹窗。
  • rz/sz 文件传输:ZMODEM(zmodem.js)上传/下载,适配 lrzsz。
  • 部署任务:文件式任务(JSON),批量连接目标机器 → 前置命令 → 上传 → 脚本。
  • 快捷命令、端口转发、批量连接。
  • 个人习惯:把「你在这台机器上怎么干活」记成文件(提权方式 / 常用目录 / 口头习惯),AI 读一次就不再重复问你。
  • 选中内容一键发给 AI:终端里选中文字后按键直接送进 AI 聊天,和编辑器里选代码发给 AI 一个手感。
  • AI 桥接:bastion.exec 命令让运行在 VS Code 里的 AI 插件能在服务器上执行命令(详见下文)。

侧边栏视图

左侧活动栏点终端图标,容器里有四个分区:

视图 说明
连接档案 新建/连接/删除堡垒机档案(点击档案直接连)
部署任务 文件式任务;单击打开 JSON 编辑,右键运行/删除,顶部有 新建/批量执行/导出
快捷命令 点击把命令发送到当前会话
端口转发 本地端口 → 远端服务的 SSH 隧道

命令 ID(供 AI 插件 / 键盘绑定使用)

命令 ID 作用
bastion.connect 选档案并连接
bastion.addProfile 新建连接档案
bastion.batchConnect 批量连接(选档案 + 主机列表)
bastion.exec AI 桥接:在活动会话执行远程命令并回传输出
bastion.uploadToSession 上传文件到当前会话
bastion.addDeployTask / runDeployTask / batchRunDeployTasks 部署任务 新建/运行/批量执行
bastion.addQuickCommand / sendQuickCommand 快捷命令
bastion.addForwardRule / startForward 端口转发
bastion.sendSelectionToAI 把终端选中内容发给 AI(默认 Ctrl+Alt+I)
bastion.sendTailToAI 把终端最近输出发给 AI(默认 Ctrl+Alt+Shift+I)
bastion.openHabitsFile 打开个人习惯配置文件

把终端内容发给 AI

在堡垒机终端里选中一段报错或日志,按 Ctrl+Alt+I 就送进 AI 聊天;没选中东西时按 Ctrl+Alt+Shift+I 发最近若干行输出。

  • 这两个键只在焦点位于终端时生效,不影响编辑器里的 AI 快捷键。
  • 默认只把内容填进聊天输入框(你可以再补一句「这是什么问题」再回车);想直接发出去就把 bastion.sendToAiMode 改成 send。
  • 没装 / 没登录 AI 聊天时自动降级:内容复制到剪贴板,并弹提示。
  • 顺带一提:VS Code 自带「添加终端选中内容到聊天」(终端右键菜单),本扩展的命令是在它基础上补了一键快捷键和降级兜底。

个人习惯(habits.jsonc)

以前 AI 提权只能按写死的剧本走「先问要不要 sudo -i」,于是每台机器、每次会话都重复问同一件事;而 sudo -i 会换成交互式 shell,反而让「命令执行完」的判定失效。

现在把实际做法记进 ~/.bastionshell/habits.jsonc(顶部有完整中文说明,可手改):

{
  "privilege": "ask",            // 全局默认:none | sudo | sudo-i | ask
  "notes": ["改配置前先备份到 /tmp/bak"],
  "profiles": {
    "生产": {
      "privilege": "sudo",       // 账号免密 → 直接 sudo <命令>,不进 sudo -i
      "notes": ["jcssuser 的 sudo 免密"]
    }
  }
}
  • AI 连接后先读它,按记录执行;只有 ask 或没记录时才问你一次,问完立刻记下来。
  • bastion_habits 工具可以读写它(read / remember / setPrivilege),写入只改目标字段,手写的中文注释不会被冲掉。
  • 记成 privilege: "sudo" 还有个额外好处:sudo <命令> 也能用哨兵标记判定结束,不再依赖「输出静止 3 秒」的兜底猜测。

终端命名

每个会话的终端名为 用户名@主机(部署/批量连接的会话为 用户名@目标IP)。AI 或用户可据此识别会话。

AI 桥接(让 Copilot / Cursor / CodeBuddy 操作服务器)

堡垒机的 MFA 无法自动输入,是 AI 与服务器交互的最大障碍。本扩展用「一次认证 + 连接复用」解决它。

本扩展向 Copilot(agent 模式)等 AI 注册了五个语言模型工具:

工具 作用
bastion_connect 通过堡垒机菜单连接到目标机器(参数:profile 档案名 + host 目标 IP + userChoice 选用户,默认 1)
bastion_exec 在会话上执行 shell 命令并返回输出(参数:command,可选 terminal 指定会话)
bastion_listSessions 列出当前所有会话的终端名
bastion_listProfiles 列出连接档案及其提权习惯
bastion_habits 读写个人习惯(action:read / remember / setPrivilege)

生产堡垒机完整流程(AI 自动走,不用口头约定):

  1. 先手动连一次堡垒机(输密码 + MFA),连接保持复用。
  2. AI 调 bastion_connect({profile, host, userChoice}) → 自动经过菜单(输 IP 选主机 → 选用户)落到目标机,返回里带上该机器的提权习惯。
  3. AI 调 bastion_exec({command}) 执行命令,命令与输出实时显示在终端(人全程看得见)。提权方式按习惯走,不再每次问 sudo -i。
  4. 多会话时用 bastion_listSessions 看名字,bastion_exec 的 terminal 参数指定目标。

命令也会写到 <工作区>/.vscode/bastion-command.txt / bastion-last-output.txt(文件桥兜底,供不支持 LM 工具的 AI 用)。完成判定优先用哨兵标记(命令结束时打印一行唯一标记),标记不适用于交互式命令时退回「输出静止 3 秒」。

会话终端名默认是 用户@主机(或 用户@目标IP)。VS Code 不允许扩展改终端名,但你可以手动右键终端标签「重命名」,重命名后 bastion_exec 的 terminal 参数能按名字匹配。

配置

  • bastion.terminalLocation:新会话位置,editor(编辑器区,默认)或 panel(底部面板)。
  • bastion.sendToAiMode:发给 AI 的行为,insert(填进聊天输入框,默认)或 send(直接发出)。
  • bastion.tailLines:「发送最近输出」带多少行,默认 80。

配置文件都在 ~/.bastionshell/,每份顶部都有中文说明,直接改文件即生效:

文件 内容
profiles.jsonc 连接档案(密码不在这里,存在系统加密存储里,连接时输入)
habits.jsonc 个人习惯(提权方式 / 常用目录 / 口头习惯)
forwardRules.jsonc 端口转发规则
quickCommands.jsonc 快捷命令

部署任务 JSON 模板

{
  "name": "部署 dcgm 配置",
  "profile": "国内",
  "hosts": ["10.0.0.1", "10.0.0.2"],
  "uploads": ["D:/work/dcgm.yaml"],
  "preCommand": "sudo -i\ncd /etc",
  "script": "systemctl restart xxx",
  "userChoice": "1"
}

任务文件存在扩展专用目录,不混进项目文件;「导出」按钮即复制到目标文件夹。

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft