用途:当用户要求轮换、重新生成、替换或续期 SSH 密钥,或代理在执行 SSH 操作(查看日志、调试、访问数据库等)时发现本地密钥文件缺失,可使用本技能轮换指定部署环境的 SSH 密钥。轮换后只有新密钥可访问,旧密钥从所有 VM 的 authorized_keys 中被永久撤销。
主要能力:本地生成新的 ed25519 密钥;更新对应 GitHub Secret;通过可复用的 rotate-ssh-key.yml@v1 工作流在 CloudStack 中删除旧密钥对、以同名注册新公钥,并逐台停止、重置、启动 VM(顺序为先 accessories、再 workers、最后 web,以减少面向用户的停机);最后用新密钥验证 SSH 访问;若轮换是因排障所需,可恢复原任务。
使用方式:先确认环境,预览环境密钥路径为 ~/.ssh/$REPO_NAME、Secret 为 SSH_PRIVATE_KEY,生产环境为 ~/.ssh/$REPO_NAME-production、Secret 为 SSH_PRIVATE_KEY_PRODUCTION。用 ssh-keygen 生成新密钥并 chmod 600,用 gh secret set 上传,创建调用工作流的 caller workflow 并提交推送,再用 gh workflow run 触发,通过 gh run list / gh run watch 监控,失败时用 gh run view <run-id> --log-failed 查看日志。
限制与警告:轮换会停止并重启每台 VM,环境内所有 VM 都会经历停机;旧密钥被永久清除,使用旧密钥者立即失去访问;各环境密钥相互独立,轮换只影响指定环境;执行前必须向用户说明这些影响并获得明确确认。工作流输入 env_name 须与已部署环境匹配,并需提供 CLOUDSTACK_API_KEY、CLOUDSTACK_SECRET_KEY 和已更新的 SSH_PRIVATE_KEY 三个密钥。其他环境命名约定为 ~/.ssh/<repo-name>-<env_name> 与 SSH_PRIVATE_KEY_<ENV_NAME>(大写)。费用、支持平台等未提供。