通过脚本修改ECS主机名
什么是主机名
主机名hostname是用于标识网络中计算机、服务器等设备的名称,可以帮助用户和网络系统更方便地识别和访问特定的设备。
主机名使用场景如下:
- 标识ECS实例:主机名用于区分不同的设备。您可以根据ECS的位置、用途、所有者等信息规划主机名,方便识别不同的ECS实例。
- 日志和监控的来源标识:在日志和监控中,主机名可以作为事件发生的来源标识,精准定位产生事件的ECS实例,减少系统分析或故障排查时间,提升运维效率。
- 方便配置管理:在配置网络服务、应用程序或系统设置时,可以通过自定义主机名替代难以记忆的IP地址。例如:配置同一VPC内ECS通过主机名进行通信。
实践背景
在华为云ECS运维场景中,主机名是服务器身份标识、日志检索、监控告警、集群管理与自动化运维的核心字段。ECS创建时主机名由Cloud-init注入,随业务扩容、环境规整、集群迁移、合规审计等需求,常需单台/批量统一修改静态主机名,并确保重启不丢失、控制台与系统内一致、不影响业务稳定。
传统手动修改(hostnamectl、编辑/etc/hostname)存在以下痛点:
- 重启后被Cloud-init还原,无法持久化;
- 控制台与OS内不一致,运维识别混乱;
- 批量操作效率低、易出错;
- 权限、依赖缺失导致修改失败。
解决方案
基于COC云运维中心 + 脚本批量执行,实现ECS主机名在线标准化修改。
整体方案以COC为统一运维入口,通过预置/自定义标准化Shell脚本,对目标ECS批量下发执行,完成主机名修改、持久化配置、重启保护等操作,全程无需登录单台服务器,实现批量操作、过程可控、结果可查、风险可防。
方案核心优势:
- 批量执行:一次选中多台ECS,统一下发脚本,大幅提升效率;
- 统一规范:脚本固化修改逻辑,避免人工命令差异导致异常;
- 可审计:COC记录脚本执行日志、执行结果、执行对象,满足审计要求。
约束与限制
- 该功能依赖UniAgent。UniAgent是统一数据采集Agent,支持脚本下发和执行。
若ECS未安装UniAgent,则无法修改主机名,详细内容,请参见为ECS安装UniAgent。
- 仅支持为Linux操作系统ECS修改主机名。
步骤一:创建自定义脚本
- 登录云运维中心。
- 在左侧导航栏选择“资源运维 > 自动化运维”,进入自动化运维页面。
- 在“日常运维”模块单击“脚本管理”,进入脚本管理页面。
- 在“自定义脚本”页签中,单击“创建脚本”,进入创建脚本页面。
- 参考表1设置脚本基本信息。
- 脚本类型选择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
- 设置脚本入参,入参名称为hostname,入参值为ECS-host-01。
注意:入参值即主机名只能由英文字母、数字及“.”、“-”组成,且“.”和“-”不能连续使用或出现在开头和结尾。图1 设置脚本入参
- 关闭“入库人工审核”。
本示例只演示脚本基本功能,日常运维请评估操作风险,建议您配置审批流程。
- 单击“确定”,完成自定义脚本创建。
脚本创建成功后,可以在脚本列表中查看脚本基本信息。
图2 查看脚本
步骤二:执行脚本
- 在“自定义脚本”页签,选择步骤一:创建自定义脚本中创建的脚本,单击操作列的“执行”。
- 单击“添加实例”,选择需要修改主机账号的实例。
其他参数保持默认值。
- 单击“确定”,确认执行信息后单击“确定”,开始执行脚本工单。
页面将自动跳转至工单详情页面,等待任务执行完成。
图3 查看脚本执行工单
步骤三:检查主机名是否修改成功
- 在左侧导航栏选择“资源运维 > 资源批量操作”,进入资源批量操作页面。
- 选择“弹性云服务器ECS > 执行命令”,进入执行命令页面。
- 单击“添加实例”,选择步骤二中修改主机账号的实例。
- 设置执行命令内容。
- 操作系统选择Linux。
- 命令类型选择Shell。
- 输入命令:
hostname
图4 设置执行命令内容
- 单击“确定”,命令开始执行。
执行完成后,可在“命令输出”栏查看命令执行结果。
图5 查看主机名称