360 Secure SkillHub
360 安全技能中心

huawei-cloud-migration-vmware-ecs-private

通过 Excel 任务表驱动,在私网 VPN 打通、无公网 IP 的场景下把 VMware Linux x86_64 虚拟机批量迁移到华为云 ECS:自动创建并打所属权标签、部署代理 ECS 上的 squid/GOST/rsync、安装 SMS Agent、执行迁移并做迁移后验证与报告。

huaweicloudskill
huaweicloudskill
热度 7.64
最近更新 2026-09-29 18:47:06
分类:自动化依赖:代码执行 / 读写文件 / 第三方 API应用场景:DevOps / 工作流 / 自动化脚本 / 报告撰写 ...

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add huawei-cloud-migration-vmware-ecs-private
Metadata
name
huawei-cloud-migration-vmware-ecs-private
description
在私网环境下将 VMware 虚拟机迁移到华为云 ECS,适用于源端和目的端位于不同网络段、通过 VPN 打通的场景。无公网 IP/EIP、VPN 打通、代理 ECS 部署 squid+GOST+rsync 实现代理/转发/文件同步。触发词:私网迁移、私网环境迁移、VPN迁移、内网迁移、无公网迁移、VMware私网迁移、VMware内网迁移、代理ECS迁移、GOST迁移、private network migration、VPN migration、offline migration

私网环境 VMware → 华为云 ECS 迁移 Skill

概述

在私网环境下将 VMware 虚拟机迁移到华为云 ECS,适用于源端和目的端位于不同网络段、通过 VPN 打通的场景。

核心特性:无公网 IP/EIP、VPN 打通、代理 ECS 部署 squid+GOST+rsync 实现代理/转发/文件同步。

通道 路径 说明
控制流代理 SMS Agent → 云API:443 通过 squid HTTP 代理
数据流转发 SMS Agent → 目标ECS:22/8899/8900 通过 GOST 转发
管理通道 操作端 → 源端SSH:22 直接 SSH 管理

支持范围与限制

⚠️ 重要声明:本 Skill 仅支持以下迁移场景,超出范围不支持:

维度 支持范围 说明
网络环境 仅私网(Private Network) 源端与目的端位于不同网络段,通过 VPN 打通;不支持公网直连模式
操作系统 仅 Linux 不支持 Windows 主机迁移
CPU 架构 仅 x86_64(amd64) 不支持 ARM(aarch64/arm64)架构迁移
源端平台 VMware 虚拟机 通过 SMS Agent 实现块级数据同步
目标平台 华为云 ECS 自动创建目标 ECS 并执行迁移

不支持 ARM 架构的技术原因:

  • ECS 规格选择:代码主动排除所有 ARM 规格(kc/ac/ai/kai/kx/ki/ah/as/at/sn 前缀),仅匹配 x86 规格
  • 目标镜像:镜像映射表仅包含 x86_64 公共镜像 ID,无 ARM 镜像
  • rsync 二进制:预编译包仅提供 x86_64 版本(源码编译兜底可适配 ARM,但未正式验证)

触发词

私网迁移、私网环境迁移、VPN迁移、内网迁移、无公网迁移、VMware私网迁移、VMware内网迁移、代理ECS迁移、GOST迁移、private network migration、VPN migration、offline migration

前置条件

网络环境

  • 源端 VMware 环境与华为云 VPC 已通过 VPN 打通
  • 代理 ECS 可达源端 SSH(22) 和华为云内网 API
  • 操作端可通过 SSH 连接代理 ECS

源端环境

  • VMware 环境已安装 SMS Agent(或可通过代理安装)
  • 源端 SSH 可达,已知 root 密码或密钥

hcloud CLI 与 obsutil 凭证配置

🚨 AK/SK 凭证配置(最高优先级强制规则)

AI 违反以下任何一条即为严重错误,应立即停止并重新执行配置流程:

  1. 学习完本 skill 后,第一件事必须是向用户提示配置永久 AK/SK,绝不允许跳过、延后或自行判断
  2. AI 严禁自行检查凭证缓存(~/.migration_skill/.cred_cache)、hcloud 配置等已有状态并假设配置已完成 — 即使发现已有缓存,也必须先询问用户由用户选择
  3. AI 严禁代替用户决策 — 不能自行选择使用缓存、跳过验证、假设凭证有效
  4. 只有用户明确确认(如"使用已有缓存"、"我已配置完成"或已设置环境变量)后,才能进入下一步
  5. 任何绕过此环节直接执行后续操作的行为均为严重错误

配置流程(用户确认配置后执行):

  1. 用户设置环境变量:export migration_Access_Key='你的AK'、export migration_Secret_Access_Key='你的SK'、export HW_ACCESS_KEY='你的永久AK'、export HW_SECRET_KEY='你的永久SK',以及 Excel 中 ${...} 占位符引用的环境变量(如 export migration_password='主机密码')
  2. AI 从环境变量读取 AK/SK 并调用 verify_credentials() 验证(hcloud IAM KeystoneListAuthDomains 只读 API,超时 30 秒)
  3. 验证通过 → AES-256-GCM 加密缓存到 ~/.migration_skill/.cred_cache(权限 600);验证失败 → 提示重新设置(最多重试 3 次)
  4. 检测临时凭证:HST 前缀→拒绝(临时凭证),HPUA 前缀→放行(永久凭证)

安全规范:

  • 环境变量获取:AK/SK 通过环境变量读取,不经过命令行明文
  • 本地缓存:AES-256-GCM 加密缓存,权限 600
  • 禁止临时凭证:HST 前缀临时凭证全面禁止(包括中间操作),永久凭证验证通过后清除临时环境变量
  • 变更检测:AK/SK 变更时提示用户确认 (yes/no),确认后联动重新配置 hcloud CLI、SMS Agent、obsutil
  • 脱敏显示:日志中 AK 脱敏(如 HPUA****YPQY),SK 完全隐藏
  • 信息安全:AK/SK 仅脱敏显示,禁止明文输出;禁止上传到非业务存储或公网
  • 禁止操作:临时凭证用于任何操作、命令行明文 AK/SK、IAM 创建/删除 AK/SK
  • 主机密码:Sheet1 密码列支持通用占位符 ${env_var_name}(如 ${migration_password}),从环境变量读取;明文值直接使用(向后兼容);Sheet2 代理密码保持 Excel 直接读取,不走环境变量

Excel 输入文件结构

迁移任务通过 Excel 文件(.xlsx)批量配置,2 个 Sheet 页:

Sheet1: 主机信息(源端主机,每行一个迁移任务)

列 字段 说明 必填
A 主机名 源端 VM 名称 ✅
B 内网IP 源端 VMware VM IP ✅
C 端口号 SSH 端口(默认 22) ❌
D 用户名 SSH 用户名(默认 root) ✅
E 密码 SSH 密码(支持 ${env_var_name} 占位符或明文) ✅
F region_id 华为云区域 ID ✅
G region_name 区域名称 ❌
H project_id 项目 ID ✅
I project_name 项目名称 ❌
J os_type OS 类型(默认 Linux) ❌
K use_public_ip 是否使用公网 IP(FALSE=私网模式) ❌
L target_image_id 目标镜像 ID(空=与源端一致) ❌
M target_AZ 可用区(空=随机) ❌

Sheet2: 代理主机信息(跳板机)

列 字段 说明 必填
A 主机名称 代理 ECS 名称 ✅
B 公网IP 代理 ECS 公网 IP ✅
C 私网IP 代理 ECS 私网 IP ✅
D 端口 SSH 端口(默认 22) ❌
E 用户名 SSH 用户名(默认 root) ✅
F 密码 SSH 密码(Excel 直接读取) ✅

密码占位符规则:Sheet1 密码列支持通用 ${env_var_name} 占位符,扫描所有字段值,从环境变量解析替换;运行前自动校验全部占位符环境变量已配置,缺失则报错退出;Sheet2 代理密码不走占位符解析。

迁移流程

1. 准备阶段

  1. 配置 AK/SK(见前置条件,🚨 必须首先执行)
  2. 准备 Excel 迁移任务文件
  3. 验证 VPN 连通性

2. 代理 ECS 部署

  1. 创建代理 ECS(需公网 IP 或通过 NAT 网关访问外网)
  2. 部署 squid 代理(控制流代理,端口 3128)
  3. 部署 GOST 转发(数据流转发,端口 8899/8900)
  4. 部署 rsync(文件同步)

3. 批量迁移执行

# 首次运行 (设置环境变量后,自动读取并缓存)
export migration_Access_Key='你的AK'
export migration_Secret_Access_Key='你的SK'
export migration_password='主机密码'  # Excel 中 ${migration_password} 占位符引用

python scripts/batch_migrate.py tasks.xlsx \
  --proxy-ip <代理ECS_IP> --proxy-user root --proxy-password <代理密码>

# 后续使用 (本地加密缓存,无需再次设置环境变量)
python scripts/batch_migrate.py tasks.xlsx --cred-cache \
  --proxy-ip <代理ECS_IP> --proxy-user root --proxy-password <代理密码>

流程:读取 Excel → 生成迁移任务列表 → 对每个任务执行 migrate_worker.py → 记录结果并输出汇总报告

4. 单机迁移流程(migrate_worker.py)

  1. 校验目标 ECS 名称:检查 target_name 是否符合命名规则
  2. 防重复检查:按所属权标签查找已有目标 ECS
    • 找到 ACTIVE/STOPPED 的 ECS → 直接复用
    • 找到异常状态的 ECS → 提示用户确认后删除重建
    • 未找到 → 创建新 ECS
  3. 创建目标 ECS:调用 ecs_ops.create_target_ecs(),校验命名规则、创建 ECS、打所属权标签
  4. 配置代理转发:在代理 ECS 上配置 GOST 转发规则
  5. 安装 SMS Agent:通过代理在源端安装 SMS Agent
  6. 执行迁移:启动 SMS 迁移任务
  7. 验证迁移:检查目标 ECS 状态

所属权管理与防重复创建

所属权标签

通过 ECS 标签实现资源所属权管理:

标签键 标签值 说明
migration-skill vmware-ecs-private 标识由本 skill 创建
source-ip 源端 IP 溯源标识
source-name 源端 VM 名称 溯源标识
migration-time 时间戳 迁移时间记录

防重复创建逻辑

  1. 按 migration-skill=vmware-ecs-private + source-ip=<源IP> 标签查找已有 ECS
  2. 找到且状态为 ACTIVE/STOPPED → 复用,跳过创建
  3. 找到且状态为 ERROR/其他 → 提示用户确认后删除重建
  4. 未找到 → 创建新 ECS 并打标签

权限校验

  • 删除/停止/重启 ECS 前,校验 migration-skill 标签
  • 非本 skill 创建的 ECS,拒绝操作并抛出 PermissionError
  • 只能操作带自己所属权标签的 ECS

文件结构

huawei-cloud-migration-vmware-ecs-private/
├── SKILL.md                                    # Skill 文档
├── README.md                                   # 使用说明文档
├── scripts/
│   ├── batch_migrate.py                        # 批量迁移入口 (1634行)
│   ├── migrate_worker.py                       # 单机迁移逻辑 (1540行)
│   ├── step_tracker.py                         # 步骤追踪器 (250行, 耗时/阻塞/问题)
│   ├── ecs_ops.py                              # ECS 操作封装 (1303行)
│   ├── excel_reader.py                         # Excel 读取解析 (525行, 2 Sheet)
│   ├── ownership_utils.py                      # 所属权标签管理 (217行)
│   ├── hcloud_wrapper.py                       # hcloud CLI 封装/脱敏日志 (1102行)
│   ├── credential_manager.py                   # AK/SK 凭证管理 (775行, 环境变量+AES缓存)
│   ├── proxy_ecs_ops.py                        # 代理 ECS 部署 (680行)
│   ├── gost_ops.py                             # GOST 转发配置 (889行)
│   ├── squid_ops.py                            # squid 代理配置 (367行)
│   ├── sms_ops.py                              # SMS 迁移任务操作 (508行)
│   ├── sms_agent_push.py                       # SMS Agent 安装/推送 (1541行)
│   ├── ssh_utils.py                            # SSH 远程操作封装 (670行)
│   ├── network_ops.py                          # 网络资源操作 (899行)
│   ├── safety_checker.py                       # 安全检查 (433行)
│   ├── skill_logger.py                         # 日志管理 (263行)
│   ├── retry_utils.py                          # 重试工具 (186行)
│   ├── report.py                               # 迁移报告生成 (344行, 含步骤追踪)
│   ├── error_reporter.py                       # 错误报告 (161行)
│   ├── post_migration_verify.py                # 迁移后验证 (1065行)
│   ├── smoke_test_server_id.py                 # 冒烟测试 (272行)
│   ├── task_name_utils.py                      # 任务名称工具 (128行)
│   ├── vpn_check.py                            # VPN 连通性检查 (347行)
│   └── agent_state_check.sh                    # Agent 状态检查脚本 (299行)
└── templates/
    ├── generate_template.py                    # Excel 模板生成脚本
    ├── 私网迁移源主机Linux相关信息1.0.xlsx      # Excel 模板示例文件
    └── 迁移网络设计图.png                       # 迁移网络架构设计图

使用方法

快速开始

  1. 配置 AK/SK(🚨 必须首先执行):设置环境变量 migration_Access_Key、migration_Secret_Access_Key、HW_ACCESS_KEY、HW_SECRET_KEY,以及 Excel 中 ${...} 占位符引用的环境变量。配置 hcloud CLI(hcloud configure init)和 obsutil(obsutil config -i=<AK> -k=<SK> -e=obs.<Region>.myhuaweicloud.com,需独立安装 obsutil)。AI 验证通过后缓存。必须收到用户明确确认后才能继续
  2. 准备 Excel 任务文件(参考模板,2 Sheet 页;Sheet1 密码列可填 ${env_var_name} 占位符或明文)
  3. 部署代理 ECS 并安装 squid+GOST+rsync
  4. 执行批量迁移:python scripts/batch_migrate.py tasks.xlsx --proxy-ip <IP> --proxy-user root --proxy-password <代理密码>
  5. 后续使用缓存:加 --cred-cache 参数
  6. 后台运行(推荐):加 -b 参数,进程通过 nohup 后台运行,终端关闭不会被杀死。日志→migration.log,PID→migration.pid,查看进度:tail -f migration.log

命令参数

参数 说明 必填
excel Excel 任务文件路径 (2 Sheet 页) ✅
--cred-cache 使用本地加密缓存中的凭证 缓存模式
--region 华为云 region(默认 cn-north-4) ❌
--project-id 华为云 project ID ❌
--proxy-ip 代理 ECS IP(覆盖 Excel Sheet2) ✅
--proxy-port 代理 ECS SSH 端口(默认 22) ❌
--proxy-user 代理 ECS SSH 用户(默认 root) ✅
--proxy-pass 代理 ECS SSH 密码 ✅
--vpc-id 已有 VPC ID(不传则自动创建) ❌
--subnet-id 已有子网 ID(不传则自动创建) ❌
--sg-id 已有安全组 ID(不传则自动创建) ❌
--max-workers 最大并发数(默认 20,支持 100 台并发) ❌
--max-workers-prepare Phase A 准备阶段并发数 ❌
--max-workers-migrate Phase B 迁移阶段并发数 ❌
--max-retries 最大重试次数(默认 2) ❌
--retry-delay 重试间隔秒数(默认 10) ❌
--task-timeout 单任务超时秒数(默认 10800=3小时) ❌
--security-token 临时凭证安全令牌(HST 前缀 AK 必须提供) ❌
--dry-run 仅校验不执行 ❌
--deep-verify 深度验证模式 ❌
--force-update 强制更新 Agent ❌
--output 结果输出路径(默认 migration-results.json) ❌
--log-dir 日志目录(默认 /var/log/migration-private) ❌
--rsync-binary rsync 二进制路径 ❌
--background, -b 后台运行 (nohup) ❌
--log-file 后台运行日志文件(默认 migration.log) ❌
--pid-file 后台运行 PID 文件(默认 migration.pid) ❌

环境变量(首次运行必须设置):

环境变量 说明
migration_Access_Key 永久 AK(HPUA 前缀)
migration_Secret_Access_Key 永久 SK
HW_ACCESS_KEY 华为云永久 AK(供 hcloud/obsutil 凭证配置使用)
HW_SECRET_KEY 华为云永久 SK(供 hcloud/obsutil 凭证配置使用)
${...} 占位符变量 Excel 中任意 ${env_var_name} 占位符引用的环境变量,运行前自动校验全部已配置

安全组规则

迁移所需的安全组规则(自动创建或使用已有安全组):

方向 协议 端口 源/目的 说明
入方向 TCP 22 0.0.0.0/0 SSH 管理
入方向 TCP 8899 0.0.0.0/0 GOST 数据通道
入方向 TCP 8900 0.0.0.0/0 GOST 数据通道
入方向 TCP 3128 0.0.0.0/0 squid 代理

故障排查

问题 可能原因 解决方案
SSH 连接超时 VPN 未打通 / 安全组未放行 检查 VPN 连通性、安全组规则
hcloud 认证失败 AK/SK 无效或临时凭证 重新设置永久 AK/SK 环境变量,运行验证
SMS Agent 安装失败 代理不通 / 源端 SSH 不可达 检查代理 ECS squid/GOST 配置、源端 SSH
GOST 转发失败 端口冲突 / 防火墙 检查 8899/8900 端口占用、防火墙规则
目标 ECS 创建失败 配额不足 / 镜像无效 检查 ECS 配额、镜像 ID
迁移任务超时 大磁盘 / 网络带宽不足 调整 --task-timeout,检查网络带宽
凭证缓存损坏 缓存文件被篡改 删除 ~/.migration_skill/.cred_cache,重新设置环境变量
密码占位符未解析 环境变量未设置 检查 Excel 中 ${...} 占位符对应的环境变量是否已 export

日志

  • 日志目录:/var/log/migration-private/(可通过 --log-dir 修改)
  • 后台运行:tail -f migration.log 查看进度,cat migration.pid 获取 PID
  • 结果文件:migration-results.json(可通过 --output 修改)
  • AK 脱敏:日志中 AK 显示为 HPUA****YPQY 格式,SK 完全隐藏