SSH 远程运维
Mopheus SSH 是内置的受控远程运维与文件传输工具,深度联动 IT 资产中心与零信任密钥管理。
mop ssh 是 Mopheus 内置的受控远程执行与文件传输工具。它为 AI 智能体与工程师提供了安全、受控且具备因果拓扑感知能力的远程运维通道。
在传统的运维排障场景中,智能体执行远程命令往往面临三大安全与管理困境:
- 凭据泄露风险 — 在任务提示词或环境变量中明文传递私钥或密码;
- 资产与连接脱节 — 智能体在处理业务报警时,不知道微服务或数据库运行在哪台物理宿主机上;
- 缺乏审计与控制 — 无法限制智能体随意对任意未知服务器发起暴力尝试或滥用权限。
Mopheus 通过 IT 资产中心 (mop asset) 与 SSH 远程执行器 (mop ssh) 解决上述问题。一个资产可以配置多个 SSH 用户账号,凭据与普通资产清单分开管理。
零信任凭据架构
Mopheus SSH 按资产 ID 和用户名保存连接元数据与加密认证载荷,并与普通资产属性分离:
┌───────────────────────────────────────────────────────────────────────────────────────────┐
│ Mopheus AI 智能体 / 任务 │
└──────────┬───────────────────────────────────┬───────────────────────────────────┬────────┘
│ 1. 拓扑探查与因果穿透 │ 2. 资产账号与信封加密 │ 3. 命令执行与文件传输
▼ ▼ ▼
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ mop asset │ │ mop user │ │ mop ssh │
│ (IT 资产本体图谱) │ │ (config-file/key) │ │ (受控远程执行通道) │
├─────────────────────┤ ├─────────────────────┤ ├─────────────────────┤
│ • 逻辑/物理分层 │ │ • Ed25519/RSA 密钥 │ │ • 资产名称/别名解析 │
│ • 账号元数据 │ │ • 密码和私钥密文 │ │ • 用户选择 │
│ • 拓扑下钻穿透 │ │ • 沙箱任务即时注入 │ │ • exec / upload │
└─────────────────────┘ └─────────────────────┘ └─────────────────────┘- 资产清单不包含 SSH 凭据。使用
mop asset apply管理资产,密码和私钥放在独立且权限为0600的凭据文件中。 - 管理 SSH 账号:使用
mop asset credential add|update|list|import。一个资产可配置多个用户名,并可为账号指定连接地址、端口和一跳跳板资产。 - 凭据传输使用应用层加密:写入和 SSH 连接读取均使用 X25519/HKDF/AES-GCM 信封。密钥只在 CLI、服务端和 SSH provider 进程内解密;列表和状态查询不返回密钥或密码。
同一 manifest 文件可在 assets 旁边声明 credentials,通过 assetId 关联资产(文件权限设为 0600):
version: mopheus.io/v1alpha1
kind: AssetManifest
metadata:
workspace: production
environment: prod
assets:
- id: host:db-node-01
concept: Host
name: Database node
attributes:
management_ip: 10.0.2.11
credentials:
- assetId: host:db-node-01
username: deploy
authType: password
connectPort: 22
jumpAssetId: host:bastion-01
jumpUsername: ops
secret:
password: replace-in-protected-file使用 mop asset apply -f assets.yaml 同步应用资产和凭据;也可将凭据放在独立的 0600 文件并通过 --credentials-file 传入。普通资产导出不包含凭据。
资产驱动的目标消解
执行 mop ssh 时,目标无需手动拼装完整的 IP 与端口,支持多维度实体解析:
- 标准 Asset ID:如
host:mopheus-prod-cn、host:db-node-01 - 资产名称 (Name):如
mopheus-prod-server - 业务别名 (Aliases):如
prod-node1、jumpbox-cn - IP 地址:如
10.10.2.11
逻辑资产 vs 物理承载资产
Mopheus 严格区分逻辑资产(微服务 Service、数据库集群 Database)与物理承载资产(宿主机 Host、容器 Container):
- 逻辑资产没有物理 SSH 监听端点;请通过拓扑找到配置了 SSH 账号的主机。
- 如果对逻辑资产直接发起
mop ssh,系统将触发友好拦截并提示下钻。 - 智能体通过
mop asset topology <logical-id>探查下游runs_on拓扑边,精准找到承载其实际运行的宿主机,再向宿主机发起连接。
常用命令指南
1. 查看已授权的主机列表
列出当前工作区中配置了有效 SSH 凭据的所有资产:
mop ssh list每个已配置用户名单独显示为一行,默认每页 100 条。表格会显示当前页和总数,JSON 会包含页码、每页数量和总页数。使用 --page 和 --per-page 翻页或调整每页数量;--search 会在服务端筛选资产名称、ID、别名和连接地址。资产配置多个用户时,使用 --user 选择账号。
查看凭据元数据(不会显示密码或私钥):
mop ssh credential get host:db-node-01 --user deploy迁移前可盘点旧 SSH URI。报告不会输出 URI 密码或原始引用:
mop asset credential inventory --output json2. 远程命令执行 (mop ssh exec)
在目标宿主机上执行非交互式 Shell 指令:
# 查看远程主机运行时间与系统负载
mop ssh exec host:mopheus-prod-cn -- uptime
# 查看磁盘使用状态
mop ssh exec host:mopheus-prod-cn -- df -h
# 查看容器运行状态
mop ssh exec host:mopheus-prod-cn -- docker ps
# 输出 JSON 格式(便于脚本与智能体解析)
mop ssh exec host:mopheus-prod-cn --json -- uname -a
# 指定超时时间(单位秒,防止长耗时命令挂起)
mop ssh exec host:mopheus-prod-cn --timeout 15 -- journalctl -u nginx -n 50
# 预览最终发送的远端命令,不连接 SSH
mop ssh exec --dry-run host:mopheus-prod-cn -- printf '%s' 'hello world'--dry-run 会打印 transport 实际使用的 shell 命令,不建立 SSH 连接或执行命令。配合 --script 时会列出上传目标、执行命令和清理命令,但不会上传脚本。
SSH 命令策略
工作区设置中的 SSH 命令策略 可管理 mop ssh exec 使用的拒绝规则。规则按组组织,每条规则单独配置;成员权限分别控制创建、修改和删除。策略测试只解析命令或脚本,不会连接主机或执行输入。
系统默认规则由后端提供,显示在“系统默认规则”页签中;规则定义不可修改或删除,但工作区管理员可以逐条启用或停用。根目录递归强制删除和 dd 直接写入 /dev/ 默认启用;文件系统格式化 mkfs、将 curl/wget 下载内容直接管道给 shell、常见 shell fork bomb 默认停用,以免影响正常运维。关闭工作区策略开关只会停用用户规则;已启用的系统规则仍生效。
CLI 可查看策略、列出规则组,并在不连接 SSH 主机的情况下测试命令:
mop ssh policy show --workspace production
mop ssh policy group list --workspace production
mop ssh policy test --command 'rm -rf /' --workspace production3. 文件上传与下载 (mop ssh upload / download)
使用 ssh exec --script 时指定本地脚本文件;远端上传目录由 --remote-path 指定,默认 /tmp,不能指定根目录 /。上传后的文件名沿用本地文件名。显式运行命令时要写出最终远端脚本路径;不指定命令时默认用 sh。执行后 CLI 会清理远端脚本:
mop ssh exec --script ./scripts/health_check.sh --remote-path /tmp host:mopheus-prod-cn
mop ssh exec --script ./scripts/collect.py --remote-path /tmp host:mopheus-prod-cn -- python3 -u /tmp/collect.py --output /tmp/report.json通过 SFTP 在本地沙箱与远程主机之间安全同步诊断工具或日志生成物:
# 将本地诊断脚本上传至远程主机的临时目录
mop ssh upload host:mopheus-prod-cn ./scripts/health_check.sh /tmp/health_check.sh
# 将远程生成的诊断报告或故障转储日志下载到本地
mop ssh download host:mopheus-prod-cn /tmp/diagnostic_report.json ./report.json智能体排障规范与安全护栏
在执行自动化运维排障任务时,智能体必须严格遵守以下执行规范:
- 下钻定位真实宿主:面对业务报警(如
db:settle-oracle-rac异常),先运行mop asset topology db:settle-oracle-rac探明运行承载的主机host:db-node-01,再执行 SSH 探测。 - 鉴权失败快速阻断 (Strict Fail-Fast):当遇到密钥缺失或
Permission Denied拒绝连接时,立即终止并向用户清晰汇报缺少的密钥名称,严禁使用假想密码或循环重试。 - 禁止非授权凭据探测:严禁在磁盘上递归扫描私钥(禁止执行
find / -name "*id_rsa*",grep -r "BEGIN RSA"),严禁任何字典暴力破解行为。 - 状态确认与最小影响:执行诊断命令优先使用只读与非阻塞参数(如
tail -n 100、top -b -n 1)。
常见排障实战示范
场景一:宿主机高负载紧急巡检
# 1. 检查 CPU 与系统负载
mop ssh exec host:app-node-01 -- uptime
# 2. 探查内存消耗前 5 的进程
mop ssh exec host:app-node-01 -- ps aux --sort=-%mem | head -n 6
# 3. 检查根分区与挂载卷空间
mop ssh exec host:app-node-01 -- df -h / /var/log场景二:服务崩溃日志实时捕获
# 查看系统级服务最近 50 条报错日志
mop ssh exec host:app-node-01 -- journalctl -u mopheus-daemon -n 50 --no-pager场景三:诊断工具分发与取证
# 上传诊断工具并执行
mop ssh upload host:app-node-01 ./collect_stats.py /tmp/collect_stats.py
mop ssh exec host:app-node-01 -- python3 /tmp/collect_stats.py --out /tmp/stats.json
mop ssh download host:app-node-01 /tmp/stats.json ./stats.json