使用 Workbench CLI 管理 ECS 实例

更新时间:
复制 MD 格式

通过 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 子命令。

参数

默认值

说明

--output / -o

text

输出格式,可选 textjson。脚本或 AI Agent 消费时建议使用 json

--region / -r

自动推断

阿里云地域 ID,例如 cn-hangzhou。CLI 会根据实例 ID 前缀自动推断,通常无需手动指定。

--profile / -P

当前活跃 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

参数说明:

参数

必填

说明

-r / --region

阿里云地域 ID。

--status

按状态过滤,可选值:RunningStoppedStartingStopping

--tag

按标签过滤,格式为 key=value(或仅 key),可多次指定,多个之间为 AND 语义。

--instance-type

按实例规格过滤,例如 ecs.g7.large

--instance-name

按实例名称过滤,支持通配符 *

--image-id

按镜像 ID 过滤。

--vpc-id

按专有网络 VPC ID 过滤。

--zone-id

按可用区 ID 过滤。

--vswitch-id

按交换机 vSwitch ID 过滤。

--private-ip

按内网 IP 过滤,多个用逗号分隔。

--limit

每页返回的最大实例数,取值范围 1~100,默认 50。

--next-token

分页 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

参数说明:

参数

必填

默认值

说明

-i / --instance-id

*

ECS 实例 ID。

-r / --region

自动推断

阿里云地域 ID,通常无需指定。

-u / --user-name

root

远程登录用户名。

--auth-type

none

认证方式,可选 nonepasswordcertificate

-p / --port

22

远程 SSH 端口。

--new

false

强制新建会话,不复用已有会话。

--session-id

*

直接连接到指定会话 ID(高级用法)。

说明

* -i--session-id 二选一,同时指定时 --session-id 优先。

认证方式说明

认证方式

行为

适用场景

none(默认)

通过 Workbench 免密登录通道直接建立会话,无需在实例上预置密码或密钥。

日常运维、无 SSH 密钥管理成本。

password

连接后交互式提示输入密码,输入过程不回显。

实例已启用密码登录且要求走 SSH 密码认证的场景。

certificate

连接后交互式提示输入密钥文件路径(如 ~/.ssh/id_rsa),CLI 自动读取文件内容并完成认证。

团队要求使用密钥登录、审计追溯到密钥指纹的场景。

交互式命令与快捷键

进入 workbench connect 会话后,在行首按 Tab 键可唤出斜杠命令面板:

命令

功能

/agent

进入会话内 AI Agent 持续对话模式(详见下一节)。

/upload

上传本地文件到实例(进入交互式文件选择器)。

/download

从实例下载文件到本地(进入交互式文件选择器)。

/detach

分离会话(会话在后台保持活跃,稍后可用 workbench connect -i <实例 ID> 重新接入)。

/exit

退出并关闭会话。

/clear

清屏。

/help

显示帮助信息。

常用快捷键:

按键

功能

Tab(行首)

唤出斜杠命令面板。

Ctrl+A

进入或退出 AI Agent 模式。

Ctrl+D

退出会话(等同 /exit)。

Ctrl+C

中断当前远程命令,会话保持不断开。

会话内使用 AI Agent 助手

workbench connect 会话内,可以直接调用内建的 AI Agent 助手,用自然语言让 AI 在当前实例上执行操作。触发方式有以下三种:

  • 在行首输入 /agent 并回车。

  • Ctrl+A 快捷键。

  • Tab 键唤出斜杠面板并选择 /agent

进入 Agent 模式后,命令提示符会变为 Agent 模式专用提示符。在该提示符后直接输入自然语言即可,Agent 会流式返回响应。Agent 模式下的斜杠命令:

命令

功能

/shell

退出 Agent 模式,返回普通 shell(Ctrl+A 也可退出)。

/new

开启新的 Agent 会话,清空上下文。

/clear

清屏。

/upload / /download

在 Agent 模式内直接触发文件上传或下载。

/help

显示帮助。

/exit

退出并关闭会话。

典型对话示例:

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

参数说明:

参数

必填

默认值

说明

-i / --instance-id

ECS 实例 ID。

-c / --command

要执行的命令。

--timeout

30

超时时间(秒)。

重要

每次 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

参数说明:

参数

必填

默认值

说明

-i / --instance-id

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 上限)。

同一实例的多次 connectexecuploaddownload 共享同一会话,由守护进程透明处理,用户无需关心会话 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),可据此定位问题。

故障排查

常见现象及首要排查动作:

现象 / 错误信息

首要排查动作

认证失败 / InvalidAccessKeyId.NotFound(AK 不存在)或 IncompleteSignature(AK Secret 不匹配)

检查 ~/.workbench/config.json 中的 AccessKey ID 与 Secret 是否为同一对且完整无空格,或重新执行 workbench config

提示实例不存在 / InvalidParameter.InstanceId

确认实例 ID 与地域正确。可用 workbench list ecs -r <region> 查询确认。

免密登录失败 / IncorrectStatus.CloudAssistantNotRunning(云助手 Agent 未运行)

默认免密登录(不指定 --auth-type 时即 none)依赖实例内运行的云助手 Agent,Agent 状态异常时会报此错。请确认目标实例已安装并正常运行云助手 Agent,异常时在 ECS 控制台重启或重装,参见 安装云助手 Agent;也可改用 --auth-type passwordcertificate 走 SSH 认证。

profile not found

检查 Profile 名称是否正确,用 workbench config list 查看已配置的 Profile。

连接超时 / WebSocket 异常

检查本机能否访问 *.aliyuncs.com;检查实例安全组是否允许 Workbench 通道(100.104.0.0/16 到 TCP 22)。

连接被占用(会话已被其他终端接入)

使用 --new 新建会话,或先关闭已有连接。

无法连接守护进程(daemon)

执行 workbench daemon status;如已停止,任意命令都会触发自动重启。

配置文件权限错误

执行 chmod 600 ~/.workbench/config.json。CLI 会拒绝权限过宽的配置文件。

STS token 过期

RamRoleArn 模式下 CLI 会自动刷新;如使用静态 STS,请更新 token。

调试命令:

# 查看守护进程状态
workbench daemon status

# JSON 错误输出便于脚本解析
workbench exec -i i-bp1a2b3c4d5e6f -c "echo test" --output json

守护进程日志保存在 ~/.workbench/log/daemon.log

相关文档