关于 huawei-cloud-devkit-webui-create
huawei-cloud-devkit-webui-create 指导云运维人员创建 Kunpeng aarch64 ECS,并以 WebUI 模式安装 Kunpeng DevKit。它分离 Python SDK、hcloud CLI 和 Paramiko 的操作,并让 ECS 密码仅保留在 Python 内存和华为云 KMS 中。
主要功能
- 01创建 Kunpeng aarch64 ECS
- 02使用 Python SDK 和 hcloud 管理云资源
- 03通过 KMS 加密并保管密码
- 04通过 Paramiko SSH 安装 DevKit
- 05配置 EIP 和安全组访问
- 06验证安装后再清理 KMS
适用场景
- 01为 DevKit 准备 Kunpeng ECS
- 02以 WebUI 模式安装 DevKit
- 03避免 ECS 凭据出现在 Shell 参数和日志中
- 04保留 KMS 密钥以便重试安装
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ huaweicloud/ huaweicloud-skills --skill huawei-cloud-devkit-webui-create安装后在 Claude Code 中输入/huawei-cloud-devkit-webui-create确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/acceptance-criteria.mdcli-installation-guide.mddevkit-installation-guide.mddevkit-installation-workflow.mdecs-creation-guide.mdiam-policies.mdpolling-progress-guide.mdprerequisites.mdsecurity-design.mdssh-connection-guide.mdtroubleshooting.mdverification-method.mdscripts/auto_install_devkit.expectcreate_ecs_and_setup_devkit.pyinstall_devkit_webui.shpoll_devkit_status.pyverify_devkit.sh详细介绍
Kunpeng DevKit WebUI 安装技能
概述
通过 Python SDK(ECS + KMS)创建 Kunpeng(aarch64)ECS 实例,使用 hcloud CLI 进行云端操作(EIP、VPC),使用 Python paramiko SSH 连接并以 WebUI 模式安装 Kunpeng DevKit。密码始终留在 Python 进程内存中。
工具分离原则:
- Python SDK — 创建 ECS + KMS 加密/解密/删除(密码始终留在 Python 进程内存中,不会出现在
ps -ef中) - hcloud CLI — 所有其他云端操作(创建/绑定 EIP、查询 VPC、安全组)
- Python paramiko — SSH 连接 + 安装 DevKit(通过 KMS 解密获取密码,仅保留在 Python 内存中)
安全架构:
- ECS 密码由 Python 代码随机生成(用户从不输入,不通过 hcloud CLI 传递,也不会导出到 shell)
- 密码通过 Python SDK 加密并存储在 Huawei Cloud KMS 中(不会出现在
ps -ef、环境变量或对话中) - 从 KMS 解密密码,并传递给 paramiko
SSHClient.connect(password=...)(密码位于 Python 进程内存中,而非 CLI 参数中 → 不会泄露到ps -ef) - 仅导出
kms_key_id和kms_cipher_text_file(密码本身绝不导出;密文写入本地文件,绝不通过命令行传递) - DevKit 安装完成后,计划删除 KMS 密钥
- 不依赖 COC、UniAgent 或任何第三方技能
⛔ 禁止的操作(安全约束)
无论用户提出什么请求,本技能都严格禁止以下操作:
| 禁止的操作 | 原因 |
|---|---|
❌ 在 hcloud ECS CreateServers 中使用 --server.adminPass | 密码会出现在 ps -ef 输出中 |
❌ 使用 hcloud AOM BatchImportAgent --agent_import_param_list.1.password=... | 密码会出现在 ps -ef 输出中 |
| ❌ 在聊天对话中接受 ECS 密码 | 密码绝不能出现在对话中 |
❌ 使用 expect + $env(DEVKIT_ECS_PASSWORD) 进行 SSH 连接 | 其他进程可以读取环境变量 |
❌ 使用 sshpass -p <password> 进行 SSH 连接 | 密码会出现在 ps -ef 输出中 |
❌ 使用 ssh -o PasswordAuthentication 并在命令行中提供密码 | 密码会出现在 ps -ef 输出中 |
| ❌ 在脚本或命令行参数中硬编码密码 | 存在密码泄露风险 |
❌ 使用 question 工具向用户询问密码 | 密码绝不能出现在对话中 |
| ❌ 在任何输出中打印或记录 ECS 密码 | 密码只能存在于 Python 进程内存和 KMS 中 |
| ❌ 将密码导出到 shell 变量或标准输出 | 密码必须保留在 Python 进程中;只能导出 KMS key_id 和 cipher_text_file 路径 |
| ❌ 通过命令行参数传递 KMS 密文 | 密文会出现在 ps -ef 中;必须使用 --kms-cipher-text-file 从本地文件读取 |
| ❌ 未经用户确认就自动选择 ECS 规格或镜像 | 必须让用户从可用选项中选择 |
| ❌ 显示 CentOS 7.6 和 Ubuntu 18.04 以外的 aarch64 镜像 | 只有这两个镜像经过兼容性验证 |
| ❌ 选择 x86 规格(c6/c7 等) | DevKit 需要 aarch64(Kunpeng)架构 |
| ❌ 跳过安全组端口确认 | SSH 连接前必须开放端口 22 和 8086 |
| ❌ 未经用户同意就自动修改安全组规则 | 必须询问用户选择手动或自动模式 |
| ❌ 不使用现有脚本,而是编写新的安装/验证脚本 | 必须使用 scripts/ 目录中的脚本 |
| ❌ 安装验证失败时禁用或删除 KMS 密钥 | 必须保留 KMS 密钥以便重试;只有确认成功后才能销毁(通过 Task 4 cleanup-kms) |
| ❌ Task 3 验证通过前运行 cleanup-kms | 在 Agent 确认 DevKit 安装成功前,必须保留 KMS 密钥 |
❌ 未确认已安装 expect 二进制文件就运行 expect 脚本 | 如果缺少 expect,shebang #!/usr/bin/expect -f 会导致误导性的“No such file or directory”错误 |
| ❌ 卸载 DevKit | 本技能仅支持安装;卸载不在范围内 |
| ❌ 升级 DevKit | 本技能仅支持安装;升级不在范围内 |
如果用户请求执行禁止的操作,你必须拒绝,并说明相关安全约束。
架构
Kunpeng DevKit WebUI Installation
├── Task 0: hcloud Setup (Install KooCLI, configure AK/SK authentication)
├── Task 1: Prepare Target Machine (Create new Kunpeng ECS via Python SDK + hcloud CLI)
│ ├── 1a. hcloud VPC: create empty security group for DevKit
│ ├── 1b. Python SDK: create ECS with random adminPass + dedicated security group (password never in ps -ef)
│ ├── 1c. Python SDK: KMS create key, encrypt password
│ ├── 1d. hcloud EIP: create and bind EIP to ECS
│ └── 1e. hcloud VPC: configure security group rules (or user manual)
├── Task 2: Python SSH Install (paramiko SSH, password from KMS decrypt)
│ ├── 2a. Python SDK: KMS decrypt password (in process memory)
│ ├── 2b. paramiko SSH: connect to ECS EIP with decrypted password
│ ├── 2c. Upload install scripts via SFTP
│ ├── 2d. Execute install_devkit_webui.sh on remote ECS
│ ├── 2e. Execute verify_devkit.sh on remote ECS
│ └── 2f. KMS key is NOT cleaned up here (preserved until Task 4)
└── Task 3: Verify & Access (Check WebUI access at https://<EIP>:8086)
├── Task 4: Cleanup KMS Key (Independent Python method, run ONLY after Task 3 verified success)
│ ├── 4a. Python SDK: kms_disable_key (password immediately unrecoverable)
│ └── 4b. Python SDK: kms_schedule_deletion (7 days, API minimum)
└── Task 5: Reset ECS Password (If SSH access needed, reset password in ECS console — random password no longer recoverable)
前提条件
前提条件检查 1/4:Python SDK 凭据所需的环境变量(优先级最高)
Python SDK 脚本(
create_ecs_and_setup_devkit.py)从环境变量读取凭据,而不是从hcloud configure list读取(该命令显示的是经过屏蔽/脱敏的值)。运行任何create/install/status子命令前,必须设置以下环境变量:
变量 必需 说明 HW_ACCESS_KEY是 华为云 Access Key ID(AK) HW_SECRET_KEY是 华为云 Secret Access Key(SK) HW_SECURITY_TOKEN否 临时安全令牌(仅临时 AK/SK 需要) **项目 ID:**不是前提条件。SDK 会在首次 API 调用时通过 IAM 根据区域自动解析项目 ID(需要 IAM 读取权限)。如果设置了
HUAWEICLOUD_SDK_PROJECT_ID环境变量,则可将其作为可选覆盖值。# Linux — 验证是否已设置 HW_ACCESS_KEY / HW_SECRET_KEY(不会打印变量值) python3 -c 'import os,sys;ak=os.environ.get("HW_ACCESS_KEY","");sk=os.environ.get("HW_SECRET_KEY","");ok=bool(ak) and bool(sk);print("AK/SK configured OK" if ok else "ERROR: HW_ACCESS_KEY/HW_SECRET_KEY not set");sys.exit(0 if ok else 1)' # Windows(cmd / PowerShell) python -c "import os,sys;ak=os.environ.get('HW_ACCESS_KEY','');sk=os.environ.get('HW_SECRET_KEY','');ok=bool(ak) and bool(sk);print('AK/SK configured OK' if ok else 'ERROR: HW_ACCESS_KEY/HW_SECRET_KEY not set');sys.exit(0 if ok else 1)"如果验证报告 ERROR(未设置变量),请进行配置:
- Linux:将
export HW_ACCESS_KEY=.../export HW_SECRET_KEY=...添加到 shell 配置文件(~/.bashrc、~/.zshrc)或密钥管理器中,然后执行source加载配置文件。- Windows:通过图形界面设置系统环境变量(系统属性 → 高级 → 环境变量 → 系统变量 → 新建)。请参阅 references/prerequisites.md 中的“Windows GUI Setup”,了解分步说明。请避免使用
setx(它会将凭据记录在命令历史中)。⚠️ **切勿在对话中设置这些变量,也不要将其硬编码到脚本中。**设置完成后,重启终端/Python 进程,并重新运行上述验证。
前提条件检查 2/4:需要 Huawei Cloud CLI(hcloud / KooCLI)>= 3.2.0 运行
hcloud version验证版本是否 >= 3.2.0。如果尚未安装或版本过低, 请参阅 references/cli-installation-guide.md 中的安装指南。
hcloud version
前提条件检查 3/4:需要 Python 3.8+、huaweicloudsdkcore/ecs/kms 和 paramiko
ECS 创建 + KMS 加密 + paramiko SSH 脚本使用 Python,以确保密码仅保存在进程内存中。 安装所需的软件包:
# 当系统时区为 UTC+8 时自动使用中国镜像(在中国区域速度更快;通过 Python 自动检测) PIP_INDEX=$(python3 -c "import time;print('-i https://mirrors.huaweicloud.com/repository/pypi/simple' if -(time.timezone)//3600==8 else '')") pip install $PIP_INDEX huaweicloudsdkcore huaweicloudsdkecs huaweicloudsdkkms paramiko其他云操作(EIP、VPC)使用 hcloud CLI — 无需安装额外的 Python SDK 软件包。
前提条件检查 4/4:目标 ECS 要求
- 架构:aarch64(鲲鹏处理器)
- 操作系统:CentOS 7.6 或 Ubuntu 18.04(仅对这两个系统进行了兼容性验证)
- 磁盘空间:可用空间 >= 2GB
- 内存:>= 4GB
- 访问权限:需要 root 权限
身份验证
安全规则(必须遵守):
- 禁止读取、回显或打印 AK/SK 值
- 禁止要求用户在对话中直接输入 AK/SK
- 禁止使用
hcloud configure set传递明文凭据值- 禁止接受用户在对话中直接提供的 AK/SK
- 仅允许从环境变量或已配置的 CLI 配置文件中读取凭据
检查 CLI 配置:
hcloud configure list确认输出中包含有效的 AK/SK 配置。
如果不存在有效凭据,请立即停止。
IAM 权限策略
确保 IAM 用户拥有所需权限(ECS/VPC/IMS/EIP/KMS,且仅限于 DevKit 工作流)。完整权限表和推荐的 IAM 策略 JSON,请参阅 references/iam-policies.md。
权限边界:
- 范围限制:仅创建或管理名称中包含
devkit或标记为devkit的资源。绝不修改或删除并非由此工作流创建的现有资源。 - 必须停止的情况:凭据缺失或无效、用户拒绝任何确认、软件包签名验证失败,或安装验证失败。
- 禁止的操作:删除任何现有 ECS/VPC/安全组,修改 IAM 策略,访问 DevKit 工作流范围之外的资源,运行此技能文档中未说明的命令。
核心工作流
任务 0:安装和配置 hcloud
安装华为云 CLI 工具并配置身份验证。
📄 详细步骤 → references/cli-installation-guide.md
任务 1:准备目标机器
创建一台 Kunpeng(aarch64)ECS 实例。
⚠️ 工具分工:ECS + KMS 使用 Python SDK,EIP/VPC 使用 hcloud CLI
- Python SDK(
create_ecs_and_setup_devkit.py create):生成随机密码、创建 ECS,并通过 KMS 加密密码。**密码绝不会离开 Python 进程内存。**仅输出server_id、kms_key_id、kms_cipher_text_file(密文写入文件,绝不通过 CLI 传递)。- hcloud CLI:执行所有其余操作——创建/绑定 EIP、查询 VPC、安全组。
📄 详细步骤 → references/ecs-creation-guide.md
子任务:
- 1a. 创建空安全组 —
hcloud VPC CreateSecurityGroup --cli-region=$REGION --security_group.name=$SG_NAME— 创建专用的 DevKit 安全组,不含入站规则(v3 API,无需 vpc_id) - 1b. 创建 ECS + 使用 KMS 加密 —
scripts/create_ecs_and_setup_devkit.py create --security-group-id— 关联专用安全组。密码绝不导出。 - 1c. 绑定 EIP —
hcloud EIP CreatePublicip+hcloud VPC ListPorts+hcloud EIP UpdatePublicip - 1d. 配置安全组规则 — 开放 22 和 8086 端口
Task 2:通过 Python SSH 安装 DevKit
使用 scripts/create_ecs_and_setup_devkit.py install 通过 SSH 连接到 ECS 并安装 DevKit。密码在 Python 内存中通过 KMS 解密,然后传递给 paramiko — 绝不会出现在 ps -ef 或 shell 变量中。
📄 详细步骤 → references/ssh-connection-guide.md | references/devkit-installation-workflow.md | references/devkit-installation-guide.md
子任务:
- 2a. KMS 解密 — Python SDK 从文件读取密文,并通过
kms_key_id解密密码 - 2b. paramiko SSH 连接 —
SSHClient.connect(password=decrypted)— 密码仅存在于 Python 内存中 - 2c. 上传脚本 — 使用 SFTP 将
install_devkit_webui.sh、auto_install_devkit.expect、verify_devkit.sh上传到/tmp/ - 2d. 启动 DevKit 安装 — 在远程 ECS 上执行
nohup bash /tmp/install_devkit_webui.sh <url> &(后台运行) - 2e. 轮询安装进度 — 在后台启动
poll_devkit_status.py(将输出写入日志文件),然后使用read工具,每隔 10-20 秒递增 offset 读取日志并向用户汇报(可安全避免死循环,保持持续可见;参见下方的“轮询进度”) - 2f. 验证安装 — 运行
verify_devkit.sh并检查结果 - 2g. 汇报结果 — 如果验证通过,提示 Agent 继续执行 Task 4(cleanup-kms);如果失败,则保留 KMS 密钥以供重试
⚠️ Task 2 不会清理 KMS 密钥。 清理是单独的 Task 4,仅在 Agent 于 Task 3 确认 DevKit 安装成功后执行。
⚠️ DevKit 安装需要 5-15 分钟。
install子命令会在后台启动安装并立即返回。Agent 必须轮询进度并持续向用户汇报。
- 安装进程状态:
PREPARING(早期阶段 [1/6]-[4/6]:环境检查 / 依赖安装 / 软件包下载 / 解压)/RUNNING([5/6] expect 安装)/DONE/NOT_STARTED- 当前阶段:例如
[2/6] Install Dependencies(在PREPARING期间从包装器日志中解析;其他情况下为空)- 服务:devkit_nginx、gunicorn_framework、gunicorn_plugin(active/failed/inactive)
- 插件:porting、affinity、devtools、debugger、sys_perf、java_perf、sys_diagnosis(已安装/缺失)
- 端口:8086、8002、7996(正在监听或未监听)
- 最后几行日志:
PREPARING→ 来自/tmp/devkit_install_wrapper.log(yum/wget 输出);RUNNING/DONE→ 来自/tmp/devkit_install.log轮询进度(可安全避免死循环): 在后台启动
poll_devkit_status.py(将输出写入日志文件),然后每隔 10-20 秒使用read工具递增 offset,持续汇报进度,直到日志中出现DONE/TIMEOUT。具体步骤、指南表格和状态字段参考请见 references/polling-progress-guide.md。
Task 3:验证与访问
检查能否通过 https://<EIP>:8086 访问 WebUI。
📄 验收标准 → references/acceptance-criteria.md
⚠️ 验证通过前不得清理 KMS 密钥。 Agent 必须确认所有服务均处于 active 状态且 WebUI 可以访问,然后才能继续执行 Task 4。
任务 4:清理 KMS 密钥(验证成功后)
仅在任务 3 验证通过后执行此任务。 使用 scripts/create_ecs_and_setup_devkit.py cleanup-kms 禁用 KMS 密钥并安排删除。这是一个独立的 Python 方法,不需要 SSH 或密文——只需要 KMS 密钥 ID。
子任务:
- 4a. 禁用 KMS 密钥 —
kms_disable_key()— 密码会立即变得无法恢复 - 4b. 安排删除 KMS 密钥 —
kms_schedule_deletion(delay_days=7)— 密钥将在 7 天后永久删除(API 最小值)
python scripts/create_ecs_and_setup_devkit.py cleanup-kms \
--region $R \
--kms-key-id $KID \
--delay-days 7
⚠️ 重要:仅在验证成功后运行 cleanup-kms
- 如果任务 3 验证失败:请勿运行 cleanup-kms;保留 KMS 密钥以便重试
- 如果任务 3 验证通过:运行 cleanup-kms 以禁用密钥并安排删除
--force标志允许在禁用失败时仍安排删除(请谨慎使用)
任务 5:重置 ECS 密码(需要 SSH 访问时)
ECS 密码由 Python SDK 随机生成,成功安装后 KMS 密钥会被禁用。密码将无法再恢复。如果用户之后需要通过 SSH 访问 ECS,则必须在 ECS 控制台中重置密码。
步骤:
- 前往 ECS 控制台:
https://console.huaweicloud.com/ecm/?region=<REGION>#/detail/<SERVER_ID> - 点击“更多”>“重置密码”
- 根据复杂度要求设置新密码
- 确认重置密码
核心命令
Python SDK(ECS + KMS — 密码不会出现在 ps -ef 中)
| 命令 | 描述 |
|---|---|
pip install huaweicloudsdkcore huaweicloudsdkecs huaweicloudsdkkms paramiko | 安装 Python SDK + paramiko(UTC+8 环境下,添加 -i https://mirrors.huaweicloud.com/repository/pypi/simple) |
python scripts/create_ecs_and_setup_devkit.py create --region $R --vpc-id $V --subnet-id $S --flavor $F --image-id $I --az $A --ecs-name $N | 阶段 1:创建 ECS + 使用 KMS 加密 |
python scripts/create_ecs_and_setup_devkit.py install --region $R --eip $EIP --kms-key-id $KID --kms-cipher-text-file $CT_FILE | 阶段 2:通过 SSH 在后台启动 DevKit 安装,并立即返回(添加 --wait 以轮询并验证) |
python scripts/create_ecs_and_setup_devkit.py status --region $R --eip $EIP --kms-key-id $KID --kms-cipher-text-file $CT_FILE | 轮询安装进度(每 30 秒) |
python scripts/create_ecs_and_setup_devkit.py cleanup-kms --region $R --kms-key-id $KID --delay-days 7 | 阶段 3:禁用并安排删除 KMS 密钥(验证成功后) |
hcloud CLI(EIP、VPC — 无需密码)
| 命令 | 描述 |
|---|---|
hcloud VPC ListVpcs --cli-region=$REGION | 列出 VPC,供选择子网 |
hcloud VPC ListSubnets --cli-region=$REGION --limit=10 | 列出子网(前 10 个),供用户选择 |
hcloud ECS NovaListAvailabilityZones --cli-region=$REGION | 列出该区域中的所有可用区 |
hcloud ECS ListFlavors --cli-region=$REGION --availability_zone=<AZ> | 查询特定可用区中可用的规格(筛选 kc1/kx1,以查找有鲲鹏服务器的可用区) |
hcloud ECS NovaListFlavorsDetails --cli-region=$REGION | 查询 ECS 规格(筛选 kc1/kx1 鲲鹏规格) |
hcloud IMS ListImages --cli-region=$REGION --__imagetype=gold --status=active | 查询公共镜像(仅筛选 CentOS 7.6 ARM 和 Ubuntu 18.04 ARM) |
hcloud EIP CreatePublicip --cli-region=$REGION --publicip.type=5_bgp --bandwidth.share_type=PER --bandwidth.name=$ECS_NAME-eip --bandwidth.size=300 --bandwidth.charge_mode=traffic | 创建按需计费的 300Mbit/s EIP(当 share_type=PER 时,必须指定 bandwidth.name) |
hcloud VPC ListPorts --cli-region=$REGION --device_id.1=$SERVER_ID | 获取用于绑定 EIP 的 port_id |
hcloud EIP UpdatePublicip --cli-region=$REGION --publicip_id=$EIP_ID --publicip.associate_instance_type=PORT --publicip.associate_instance_id=$PORT_ID | 将 EIP 绑定到 ECS 端口(v3 API) |
hcloud VPC CreateSecurityGroupRule --cli-region=$REGION --security_group_rule.security_group_id=$SG_ID --security_group_rule.direction=ingress --security_group_rule.protocol=tcp --security_group_rule.multiport=<22|8086> --security_group_rule.remote_ip_prefix=0.0.0.0/0 | 添加安全组入方向规则(端口 22/8086) |
⚠️ 核心命令的关键限制:
- 创建 ECS + KMS:必须使用
scripts/create_ecs_and_setup_devkit.py— 密码绝不会出现在ps -ef中- SSH + 安装 DevKit:必须使用
scripts/create_ecs_and_setup_devkit.py install— 密码从 KMS 获取,且仅存在于 paramiko 内存中hcloud ECS CreateServers:不得包含--server.adminPass- EIP/VPC:必须使用 hcloud CLI
IMS ListImages:仅显示 CentOS 7.6 ARM 和 Ubuntu 18.04 ARMECS NovaListFlavorsDetails:仅显示以k开头的规格(鲲鹏)- 必须通过 paramiko SSH 执行
install_devkit_webui.sh(不得使用 scp + 手动 ssh)CreateSecurityGroupRule:remote_ip_prefix默认值为0.0.0.0/0;受限或由 SCP 控制的账户可能会拒绝此设置 — 请改用范围受限的源 CIDR(例如<your_public_ip>/32)
参数确认
执行任何任务前,必须与用户确认以下参数。禁止猜测。
| 参数 | 必填/可选 | 描述 | 默认值 |
|---|---|---|---|
| 区域 | 必填 | 华为云区域(例如 cn-south-1、cn-north-4);必须由用户明确选择 | - |
| 子网 | 必填 | 用于创建 ECS 的子网;用户从前 10 个子网的列表中选择 | - |
| ECS 规格 | 必填 | 以 k 开头的鲲鹏规格(例如 kc1.xlarge.2);用户从列表中选择 | - |
| OS 镜像 | 必填 | 仅限 CentOS 7.6 ARM 或 Ubuntu 18.04 ARM;用户从列表中选择 | - |
| 根卷类型 | 可选 | ECS 系统盘类型(SSD/SAS/GPSSD) | SSD |
| 根卷大小 | 可选 | ECS 系统盘大小,单位为 GB(最小 40) | 40 |
| 安全组方式 | 必填 | 手动(推荐)或 Agent 自动配置;由用户选择 | 手动 |
| DevKit 下载 URL | 可选 | DevKit-All tar.gz 软件包的 URL | 26.1.RC1 的默认 OBS URL |
注意:无需提供密码参数。密码由 Python SDK 随机生成,通过 Python KMS SDK 加密,再解密后供 paramiko SSH 使用。密码绝不会从 Python 进程中导出。
脚本工具
| 脚本 | 描述 |
|---|---|
| create_ecs_and_setup_devkit.py | 创建 ECS + KMS 加密/解密 + 使用 paramiko 通过 SSH 安装 DevKit(密码不会出现在 ps -ef 中)。子命令:create、install、status、cleanup-kms。用法请参阅上文的核心命令。 |
| install_devkit_webui.sh | 一键安装脚本,通过 paramiko 上传并在远程 ECS 上执行。 |
| auto_install_devkit.expect | 交互式安装自动化脚本,供 install_devkit_webui.sh 使用。 |
| verify_devkit.sh | 安装验证脚本,通过 paramiko 在远程 ECS 上执行。 |
| poll_devkit_status.py | 安全的 Doom 循环进度轮询(后台运行 + read 工具)。请参阅 references/polling-progress-guide.md。 |
⚠️ 脚本使用规则:
- 必须使用现有脚本;不得编写新的 expect/shell 脚本来替代
- 不得将
install_devkit_webui.sh的内部逻辑拆分为单独的 SSH 命令- 不得创建新的安装/验证脚本
验证方法
详情请参阅 references/verification-method.md。常见问题及解决方法请参阅 references/troubleshooting.md。
快速验证:
hcloud version && hcloud configure list
python scripts/create_ecs_and_setup_devkit.py install \
--region $R --eip $EIP --kms-key-id $KID --kms-cipher-text-file $CT_FILE
安装后访问: https://<EIP>:8086(接受自签名证书;默认账户:devadmin)
⚠️ 密码提醒: ECS 密码是随机生成的,且 KMS 密钥会在安装成功后禁用。如果之后需要通过 SSH 访问 ECS,必须先在 ECS 控制台重置密码:
ECS 控制台:https://console.huaweicloud.com/ecm/?region=<REGION>#/detail/<SERVER_ID>
安全设计
安全架构确保 ECS 密码仅保存在 Python 进程内存和 KMS 中,绝不会出现在 ps -ef、shell 变量、环境变量或对话中。工具分工:使用 Python SDK 创建 ECS 并进行 KMS 加密/解密/删除,使用 hcloud CLI 处理 EIP/VPC(不涉及密码),使用 Python paramiko 进行 SSH 连接并安装 DevKit。失败时会保留 KMS 密钥(以便重试),只有在验证成功后才会禁用密钥并安排删除。
📄 完整详情(工具分工表、消除密码泄露风险、密码生命周期)→ references/security-design.md
参考文档
| 文档 | 描述 |
|---|---|
| prerequisites.md | 前置条件 + Windows GUI 环境变量设置 |
| cli-installation-guide.md | hcloud(KooCLI)安装和配置 |
| ecs-creation-guide.md | Kunpeng ECS 创建详细步骤(Python SDK + hcloud CLI) |
| ssh-connection-guide.md | Python paramiko SSH 连接指南 |
| devkit-installation-workflow.md | 任务 2-3 安装详细步骤 |
| devkit-installation-guide.md | 完整安装步骤 |
| iam-policies.md | 所需的 IAM 权限 | | verification-method.md | 安装结果验证方法 | | acceptance-criteria.md | 安装验收标准 | | troubleshooting.md | 常见安装问题及解决方案 | | polling-progress-guide.md | 防止 Doom-loop 的进度轮询详细指南 | | security-design.md | 安全设计:工具分离、密码生命周期 | | install_devkit_webui.sh | 一键安装脚本 | | auto_install_devkit.expect | expect 自动化交互式安装 | | verify_devkit.sh | 安装验证脚本 | | create_ecs_and_setup_devkit.py | ECS + KMS + paramiko SSH DevKit 脚本(密码不会出现在 ps -ef 中) | | poll_devkit_status.py | 防止 Doom-loop 的进度轮询(后台 + read 工具,间隔 10-20 秒) |