# 通过脚本修改ECS主机名
#### 什么是主机名
主机名hostname是用于标识网络中计算机、服务器等设备的名称，可以帮助用户和网络系统更方便地识别和访问特定的设备。
主机名使用场景如下：
- 标识ECS实例：主机名用于区分不同的设备。您可以根据ECS的位置、用途、所有者等信息规划主机名，方便识别不同的ECS实例。
- 日志和监控的来源标识：在日志和监控中，主机名可以作为事件发生的来源标识，精准定位产生事件的ECS实例，减少系统分析或故障排查时间，提升运维效率。
- 方便配置管理：在配置网络服务、应用程序或系统设置时，可以通过自定义主机名替代难以记忆的IP地址。例如：[配置同一VPC内ECS通过主机名进行通信](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0169.html)。
#### 实践背景
在华为云ECS运维场景中，主机名是服务器身份标识、日志检索、监控告警、集群管理与自动化运维的核心字段。ECS创建时主机名由Cloud-init注入，随业务扩容、环境规整、集群迁移、合规审计等需求，常需单台/批量统一修改静态主机名，并确保重启不丢失、控制台与系统内一致、不影响业务稳定。
传统手动修改（hostnamectl、编辑/etc/hostname）存在以下痛点：
- 重启后被Cloud-init还原，无法持久化；
- 控制台与OS内不一致，运维识别混乱；
- 批量操作效率低、易出错；
- 权限、依赖缺失导致修改失败。
 
#### 解决方案
基于COC云运维中心 + 脚本批量执行，实现ECS主机名在线标准化修改。
整体方案以COC为统一运维入口，通过预置/自定义标准化Shell脚本，对目标ECS批量下发执行，完成主机名修改、持久化配置、重启保护等操作，全程无需登录单台服务器，实现批量操作、过程可控、结果可查、风险可防。
方案核心优势：
- 批量执行：一次选中多台ECS，统一下发脚本，大幅提升效率；
- 统一规范：脚本固化修改逻辑，避免人工命令差异导致异常；
- 可审计：COC记录脚本执行日志、执行结果、执行对象，满足审计要求。
 
#### 约束与限制
- 该功能依赖UniAgent。UniAgent是统一数据采集Agent，支持脚本下发和执行。 若ECS未安装UniAgent，则无法修改主机名，详细内容，请参见[为ECS安装UniAgent](https://support.huaweicloud.com/usermanual-ecs/ecs_03_2505.html)。
  
- 仅支持为Linux操作系统ECS修改主机名。
 
 #### 步骤一：创建自定义脚本
1. 登录[云运维中心](https://console.huaweicloud.com/coc/?#/console/home)。
2. 在左侧导航栏选择"资源运维 \> 自动化运维"，进入自动化运维页面。
3. 在"日常运维"模块单击"脚本管理"，进入脚本管理页面。
4. 在"自定义脚本"页签中，单击"创建脚本"，进入创建脚本页面。
5. 参考[表1]设置脚本基本信息。
   
    表1基本信息参数说明 
   | **参数**  | 本实践示例      | **说明**                                                                           |
   |:---|:---|:---|
   | 脚本名称    | 修改虚拟机主机名称  | 根据命名规则，自定义脚本的名称。 名称由中文、字母、数字、中划线、下划线组成，长度在3\~100之间。 |
   | 企业项目  | default    | 在下拉列表中选择脚本归属的企业项目。 脚本创建成功后不能修改企业项目。                  |
   | 脚本版本号 | 1.0.0     | 默认为1.0.0，可自定义填写脚本版本号，版本号格式为x.x.x。                                               |
   | 风险等级  | 高       | 可选项"高"、"中"、"低"，请根据实际情况选择风险等级。                                                    |
   | 脚本描述   | 修改虚拟机主机名称 | 对脚本进行描述。 长度范围为1\~256。                               |
      
   
   
6. 脚本类型选择Shell，脚本内容如下： 
   ```
   #!/bin/bash
   # 从入参中获取主机名
   set +x
   hostname=${hostname}
   # 修改主机名
   hostnamectl set-hostname "$hostname"
   retCode=$?
   if [ $retCode -eq 0 ]; then
       echo "Modify hostname to ${hostname} successfully."
   else
       echo "Modify hostname to ${hostname} failed."
       exit 1
   fi
   ```
   
   
7. 设置脚本入参，入参名称为hostname，入参值为ECS-host-01。 
   注意：入参值即主机名只能由英文字母、数字及"."、"-"组成，且"."和"-"不能连续使用或出现在开头和结尾。
   图1设置脚本入参   
   ![](https://support.huaweicloud.com/bestpractice-coc/zh-cn_image_0000002569980211.png "点击放大")
   
   
8. 关闭"入库人工审核"。 
   ![](https://support.huaweicloud.com/bestpractice-coc/public_sys-resources/note_3.0-zh-cn.png)
   本示例只演示脚本基本功能，日常运维请评估操作风险，建议您配置审批流程。
   
   
9. 单击"确定"，完成自定义脚本创建。 
   脚本创建成功后，可以在脚本列表中查看脚本基本信息。
   图2查看脚本   
   ![](https://support.huaweicloud.com/bestpractice-coc/zh-cn_image_0000002569879809.png "点击放大")
   
   
 
 #### 步骤二：执行脚本
1. 在"自定义脚本"页签，选择[步骤一：创建自定义脚本]中创建的脚本，单击操作列的"执行"。
2. 单击"添加实例"，选择需要修改主机账号的实例。 
   其他参数保持默认值。
   
   
3. 单击"确定"，确认执行信息后单击"确定"，开始执行脚本工单。 
   页面将自动跳转至工单详情页面，等待任务执行完成。
   图3查看脚本执行工单   
   ![](https://support.huaweicloud.com/bestpractice-coc/zh-cn_image_0000002538966912.png "点击放大")
   
   
 
#### 步骤三：检查主机名是否修改成功
1. 在左侧导航栏选择"资源运维 \> 资源批量操作"，进入资源批量操作页面。
2. 选择"弹性云服务器ECS \> 执行命令"，进入执行命令页面。
3. 单击"添加实例"，选择[步骤二]中修改主机账号的实例。
4. 设置执行命令内容。 
   - 操作系统选择**Linux**。
   
   - 命令类型选择**Shell**。
   
   - 输入命令：
     ```
     hostname
     ```
     
   
   
   图4设置执行命令内容   
   ![](https://support.huaweicloud.com/bestpractice-coc/zh-cn_image_0000002569903373.png "点击放大")
   
   
5. 单击"确定"，命令开始执行。 
   执行完成后，可在"命令输出"栏查看命令执行结果。
   图5查看主机名称   
   ![](https://support.huaweicloud.com/bestpractice-coc/zh-cn_image_0000002539143634.png "点击放大")
   
   
 
