通过 list、connect、exec、upload/download 等命令完成 ECS 实例的查询、免密登录、远程命令执行与文件传输,用结构化 JSON 输出与命令退出码透传支持脚本消费与故障快速自诊。
前提条件
已在本机安装 Workbench CLI 并完成凭证与最小 RAM 权限配置。具体操作,请参见 安装并配置 Workbench CLI 凭证。
目标 ECS 实例为 Linux 实例,状态为 运行中,且已安装并正常运行 云助手 Agent。
本机能访问
*.aliyuncs.com及 Workbench 后端 WebSocket 端点;upload/download命令还需实例能访问对应地域的 OSS 内网端点。
Workbench CLI 当前仅支持连接 Linux 实例。如需连接 Windows 实例,请使用 通过 Workbench 连接实例。
全局参数
以下 3 个全局参数适用于所有 workbench 子命令。
参数 |
默认值 |
说明 |
|---|---|---|
|
|
输出格式,可选 |
|
自动推断 |
阿里云地域 ID,例如 |
|
当前活跃 Profile |
指定本次命令使用的凭证 Profile,覆盖当前活跃 Profile。用于在多账号或多套凭证间切换。 |
地域自动推断的顺序为:实例 ID 前缀映射 → 守护进程内活跃会话查找 → 报错要求手动指定 --region。首次使用某个实例时,建议先执行 workbench list ecs -r <region> 确认实例 ID。
查询实例列表(workbench list ecs)
用于按地域、状态、标签等条件查询 ECS 实例,方便快速定位目标实例 ID。workbench list 默认等价于 workbench list ecs。常用示例:
# 查询指定地域的所有实例
workbench list ecs -r cn-hangzhou
# 仅查询运行中的实例
workbench list ecs -r cn-hangzhou --status Running
# 按标签过滤(多个 --tag 之间为 AND 语义)
workbench list ecs -r cn-hangzhou --tag env=prod --tag app=web
# 按规格 / 名称 / VPC 等条件过滤
workbench list ecs -r cn-hangzhou --instance-type ecs.g7.large --instance-name "web-*"
# 输出为 JSON 供脚本或 AI Agent 消费
workbench list ecs -r cn-hangzhou --output json
参数说明:
参数 |
必填 |
说明 |
|---|---|---|
|
是 |
阿里云地域 ID。 |
|
否 |
按状态过滤,可选值: |
|
否 |
按标签过滤,格式为 |
|
否 |
按实例规格过滤,例如 |
|
否 |
按实例名称过滤,支持通配符 |
|
否 |
按镜像 ID 过滤。 |
|
否 |
按专有网络 VPC ID 过滤。 |
|
否 |
按可用区 ID 过滤。 |
|
否 |
按交换机 vSwitch ID 过滤。 |
|
否 |
按内网 IP 过滤,多个用逗号分隔。 |
|
否 |
每页返回的最大实例数,取值范围 1~100,默认 50。 |
|
否 |
分页 Token,取自上一次响应,用于获取下一页。 |
--output json 的返回结构如下:
{
"instances": [
{
"instance_id": "i-bp1xxxxx",
"instance_name": "web-prod-01",
"instance_type": "ecs.g7.large",
"region_id": "cn-hangzhou",
"status": "Running",
"private_ip": "172.16.0.10",
"public_ip": "",
"os_type": "linux",
"image_id": "aliyun_3_x64_20G_alibase_20230727.vhd",
"tags": {"env": "prod"}
}
]
}
交互式连接(workbench connect)
workbench connect 用于打开交互式 PTY 会话,是 Workbench CLI 的核心命令。常用示例:
# 默认无密码认证(Workbench 免密登录)
workbench connect -i i-bp1a2b3c4d5e6f
# 密码认证(进入后交互式输入密码,输入不回显)
workbench connect -i i-bp1a2b3c4d5e6f --auth-type password
# 密钥认证(进入后交互式输入密钥文件路径,如 ~/.ssh/id_rsa)
workbench connect -i i-bp1a2b3c4d5e6f --auth-type certificate
# 指定登录用户与端口
workbench connect -i i-bp1a2b3c4d5e6f -u admin -p 2222
# 强制新建会话(不复用已有会话)
workbench connect -i i-bp1a2b3c4d5e6f --new
参数说明:
参数 |
必填 |
默认值 |
说明 |
|---|---|---|---|
|
是* |
— |
ECS 实例 ID。 |
|
否 |
自动推断 |
阿里云地域 ID,通常无需指定。 |
|
否 |
|
远程登录用户名。 |
|
否 |
|
认证方式,可选 |
|
否 |
|
远程 SSH 端口。 |
|
否 |
|
强制新建会话,不复用已有会话。 |
|
是* |
— |
直接连接到指定会话 ID(高级用法)。 |
* -i 与 --session-id 二选一,同时指定时 --session-id 优先。
认证方式说明
认证方式 |
行为 |
适用场景 |
|---|---|---|
|
通过 Workbench 免密登录通道直接建立会话,无需在实例上预置密码或密钥。 |
日常运维、无 SSH 密钥管理成本。 |
|
连接后交互式提示输入密码,输入过程不回显。 |
实例已启用密码登录且要求走 SSH 密码认证的场景。 |
|
连接后交互式提示输入密钥文件路径(如 |
团队要求使用密钥登录、审计追溯到密钥指纹的场景。 |
交互式命令与快捷键
进入 workbench connect 会话后,在行首按 Tab 键可唤出斜杠命令面板:
命令 |
功能 |
|---|---|
|
进入会话内 AI Agent 持续对话模式(详见下一节)。 |
|
上传本地文件到实例(进入交互式文件选择器)。 |
|
从实例下载文件到本地(进入交互式文件选择器)。 |
|
分离会话(会话在后台保持活跃,稍后可用 |
|
退出并关闭会话。 |
|
清屏。 |
|
显示帮助信息。 |
常用快捷键:
按键 |
功能 |
|---|---|
|
唤出斜杠命令面板。 |
|
进入或退出 AI Agent 模式。 |
|
退出会话(等同 |
|
中断当前远程命令,会话保持不断开。 |
会话内使用 AI Agent 助手
在 workbench connect 会话内,可以直接调用内建的 AI Agent 助手,用自然语言让 AI 在当前实例上执行操作。触发方式有以下三种:
在行首输入
/agent并回车。按
Ctrl+A快捷键。按
Tab键唤出斜杠面板并选择/agent。
进入 Agent 模式后,命令提示符会变为 Agent 模式专用提示符。在该提示符后直接输入自然语言即可,Agent 会流式返回响应。Agent 模式下的斜杠命令:
命令 |
功能 |
|---|---|
|
退出 Agent 模式,返回普通 shell(Ctrl+A 也可退出)。 |
|
开启新的 Agent 会话,清空上下文。 |
|
清屏。 |
|
在 Agent 模式内直接触发文件上传或下载。 |
|
显示帮助。 |
|
退出并关闭会话。 |
典型对话示例:
Agent> 查看当前CPU占用最高的进程
┌─ 执行命令 ──────────
│ ps aux --sort=-%cpu | head -10
└─────────────────────
等待确认 (Y/n): y
[已执行]
... (Agent 继续分析并给出结论)
人机确认(HITL):Agent 在实例上执行任何命令前,都会显示待执行的命令并等待用户 Y/n 确认。涉及云 API 操作(如创建快照)同样需要确认。这是防止 AI 误操作的关键机制,请勿禁用。
同一会话内 Agent 会保留对话上下文,使用 /new 可重置。响应流式输出,按 Ctrl+C 可中断当前生成。
本节介绍的是 在 connect 会话内直接调用内建 AI 助手。如果您想在外部 AI 编程工具(悟空 / opencode)中让 Agent 调用 workbench 命令,请参见 在 AI Agent 中使用 Workbench CLI 操作 ECS 实例。
远程命令执行(workbench exec)
workbench exec 用于在实例上执行一条命令并返回结果。相比于 connect 的持久 shell,exec 每次调用在独立环境中执行;同一实例的多次调用复用底层连接通道,无需重复建连。常用示例:
# 执行一条命令
workbench exec -i i-bp1a2b3c4d5e6f -c "df -h"
# 组合命令:cd + 环境变量 + 执行
workbench exec -i i-bp1a2b3c4d5e6f -c "cd /opt/app && ./deploy.sh"
# 设置超时
workbench exec -i i-bp1a2b3c4d5e6f -c "sleep 30" --timeout 10
# JSON 输出用于脚本或 AI Agent 消费
workbench exec -i i-bp1a2b3c4d5e6f -c "df -h" --output json
参数说明:
参数 |
必填 |
默认值 |
说明 |
|---|---|---|---|
|
是 |
— |
ECS 实例 ID。 |
|
是 |
— |
要执行的命令。 |
|
否 |
|
超时时间(秒)。 |
每次 exec 在独立 shell 环境中执行,不继承上一次的当前目录、环境变量或 shell 状态。如果需要上下文延续(例如先 cd 再执行),请在同一次 -c 参数中用 && 或 ; 组合命令。
--output json 的返回结构如下:
{
"output": "Filesystem ...\n",
"stderr": "",
"exit_code": 0
}
其中 output 为命令的标准输出、stderr 为标准错误、exit_code 为远程命令的退出码(整型)。
文件传输(workbench upload / download)
在没有公网 IP 或 SCP 通道的情况下,通过 workbench upload / workbench download 传输文件。上传过程会显示实时进度条。
上传示例:
workbench upload ./app.jar /opt/app/app.jar -i i-bp1a2b3c4d5e6f
下载示例:
# 下载到当前目录
workbench download /var/log/app.log ./ -i i-bp1a2b3c4d5e6f
# 下载并重命名
workbench download /var/log/app.log ./local-copy.log -i i-bp1a2b3c4d5e6f
参数说明:
参数 |
必填 |
默认值 |
说明 |
|---|---|---|---|
|
是 |
— |
ECS 实例 ID。 |
文件通过 OSS 中转 传输,对用户完全透明,无需配置 OSS 权限或 Bucket。实例需能访问对应地域的 OSS 内网端点(oss-<region>-internal.aliyuncs.com)。
会话管理(workbench session)
会话通常由 CLI 自动创建、复用和清理,日常使用无需干预。本节命令用于诊断和手动清理。
常用命令:
# 查看所有活跃会话
workbench session list
workbench session list --output json
# 关闭指定会话
workbench session close <session-id>
# 关闭所有会话
workbench session close --all
会话状态转换:
OPEN:会话建立,可正常读写。RECONNECTING:底层 WebSocket 断开后正在重连。BROKEN:重连失败,会话不可用。CLOSED:会话已关闭(用户主动关闭、超时或达到 TTL 上限)。
同一实例的多次 connect、exec、upload、download 共享同一会话,由守护进程透明处理,用户无需关心会话 ID。同一会话同一时刻仅允许一个终端(TTY)接入;如已有终端接入,可用 --new 新建会话,或先关闭已有连接。
守护进程管理(workbench daemon)
Workbench CLI 依赖一个用户态后台守护进程持有 WebSocket 连接并多路复用会话。守护进程的生命周期完全自动,通常无需手动管理。
# 查看守护进程状态
workbench daemon status
# 停止守护进程(会关闭所有会话)
workbench daemon stop
自动启动:首次执行任意
workbench命令时自动拉起。自动退出:最后一个会话关闭 60 秒后自动退出。
单实例:每个操作系统用户下仅允许一个守护进程实例(通过 PID 文件锁强制)。
IPC 通道:CLI 与守护进程通过
~/.workbench/run/daemon.sock(Unix socket)通信,协议为 JSON-RPC。
典型使用场景
场景一:应用部署
上传部署包 → 远程执行部署脚本 → 在实例上验证服务健康。
workbench upload ./app-2.0.tar.gz /opt/deploy/ -i i-bp1a2b3c4d5e6f
workbench exec -i i-bp1a2b3c4d5e6f -c "cd /opt/deploy && tar xzf app-2.0.tar.gz && ./deploy.sh"
workbench exec -i i-bp1a2b3c4d5e6f -c "curl -s http://localhost:8080/health"
场景二:批量执行诊断命令
通过 exec --output json 获取结构化结果,供脚本进一步解析或用 jq 过滤。
workbench exec -i i-bp1a2b3c4d5e6f -c "df -h && free -m" --output json | jq '.output'
workbench exec -i i-bp1a2b3c4d5e6f -c "systemctl status nginx" --output json | jq '.exit_code'
场景三:分离会话后重新接入
对长期运行的任务(如日志追踪、编译),可 /detach 后关闭本机终端,稍后重新 connect 会自动接入原会话。
workbench connect -i i-bp1a2b3c4d5e6f
# 会话内运行 tail -f 或长任务
# 然后输入 /detach 分离
# 稍后重新接入原会话
workbench connect -i i-bp1a2b3c4d5e6f
退出码
workbench exec 会透传远程命令的退出码:远程命令返回什么退出码,CLI 就以相同退出码退出(行为与 SSH 一致)。因此脚本可直接根据 workbench exec 的退出码判断远程命令是否成功。
例如以下命令在实例上执行 exit 42,CLI 也以 42 退出:
workbench exec -i i-bp1a2b3c4d5e6f -c "exit 42"
echo $? # 输出 42
当命令因参数、认证、网络、实例不存在等原因失败时,配合 --output json 会输出错误详情,格式如下:
{
"code": 1,
"message": "session resolve: login instance: ... InvalidParameter.InstanceId ..."
}
其中 code 为非 0 的错误标识,message 为可读的错误描述(通常包含底层 API 的错误码与 RequestId),可据此定位问题。
故障排查
常见现象及首要排查动作:
现象 / 错误信息 |
首要排查动作 |
|---|---|
认证失败 / | 检查 |
提示实例不存在 / | 确认实例 ID 与地域正确。可用 |
免密登录失败 / | 默认免密登录(不指定 |
| 检查 Profile 名称是否正确,用 |
连接超时 / WebSocket 异常 | 检查本机能否访问 |
连接被占用(会话已被其他终端接入) | 使用 |
无法连接守护进程(daemon) | 执行 |
配置文件权限错误 | 执行 |
STS token 过期 | RamRoleArn 模式下 CLI 会自动刷新;如使用静态 STS,请更新 token。 |
调试命令:
# 查看守护进程状态
workbench daemon status
# JSON 错误输出便于脚本解析
workbench exec -i i-bp1a2b3c4d5e6f -c "echo test" --output json
守护进程日志保存在 ~/.workbench/log/daemon.log。
相关文档
通过 Workbench CLI 连接实例:父节点,包含工具定位与快速开始。
安装并配置 Workbench CLI 凭证:CLI 安装与凭证/权限配置。
在 AI Agent 中使用 Workbench CLI 操作 ECS 实例:在悟空 / opencode 中让 Agent 调用 workbench 命令。
安装云助手 Agent:Workbench CLI 依赖云助手 Agent。