# 通过脚本批量更新ECS一键式重置密码插件（Linux）
#### 操作场景
弹性云服务器的离线重置密码功能依赖一键式重置密码插件。当因安全问题，弹性云服务器更新了一键式重置密码插件时，可参考本操作为单台弹性云服务器更新一键式重置密码插件。
一键式重置密码插件的更新情况，请参见[一键式重置密码插件漏洞公告](https://support.huaweicloud.com/bulletin-ecs/ecs_bulletin_002.html)。
本文介绍通过脚本为多台Linux ECS批量更新一键式重置密码插件的操作指导。
#### 前提条件
- 准备好执行机，执行机需满足的条件请参见[约束与限制]。
- 需要提前准备待批量安装插件的云服务器的IP地址、root用户的密码信息或者私钥文件。
- 执行机应该与待更新机器在同一VPC下。
- 在执行完步骤[6]之后可以解绑eip。
 
 #### 约束与限制
- 需要选取一台操作系统为CentOS 7（公共镜像）且已绑定弹性公网IP的云服务器作为执行机，且与待批量安装插件的弹性云服务器之间网络需要互通。
  ![](https://support.huaweicloud.com/usermanual-ecs/public_sys-resources/note_3.0-zh-cn.png)
  若已配置yum内部源，可不需要绑定弹性公网IP。
  
- 若弹性云服务器的"登录凭证"为"密钥对"时，仅支持对使用同一密钥对的弹性云服务器执行批量安装插件的操作。
 
#### 操作步骤
1. 以root用户登录执行机。
2. 执行以下命令，安装批量脚本运行所需要的依赖。 **yum install ansible -y**
   
3. 请参考[获取并校验一键式重置密码插件完整性（Linux）](https://support.huaweicloud.com/usermanual-ecs/ecs_13_0117.html#ecs_13_0117__section15564103103311)，下载对应的一键式重置密码插件CloudResetPwdAgent.zip并完成完整性校验。
   安装一键式重置密码插件对插件的具体放置目录无特殊要求，请您自定义。
   
4. 执行以下命令，将批量操作脚本下载到root目录下。 **curl *URL* \> \~/batch_update_log4j_version.py**
   其中，*URL*为批量操作的执行脚本。
   请根据云服务器所在区域选择脚本的下载地址：
   - 华北-北京一：<https://cn-north-1-cloud-reset-pwd.obs.cn-north-1.myhuaweicloud.com/linux/batch_update_resetpwd/batch_update_log4j_version.py>
   
   - 华北-北京四：<https://cn-north-4-cloud-reset-pwd.obs.cn-north-4.myhuaweicloud.com/linux/batch_update_resetpwd/batch_update_log4j_version.py>
   
   - 华东-上海二：<https://cn-east-2-cloud-reset-pwd.obs.cn-east-2.myhuaweicloud.com/linux/batch_update_resetpwd/batch_update_log4j_version.py>
   
   - 华南-广州：<https://cn-south-1-cloud-reset-pwd.obs.cn-south-1.myhuaweicloud.com/linux/batch_update_resetpwd/batch_update_log4j_version.py>
   
   - 中国-香港：<https://ap-southeast-1-cloud-reset-pwd.obs.ap-southeast-1.myhuaweicloud.com/linux/batch_update_resetpwd/batch_update_log4j_version.py>
   
   - 亚太-曼谷：<https://ap-southeast-2-cloud-reset-pwd.obs.ap-southeast-2.myhuaweicloud.com/linux/batch_update_resetpwd/batch_update_log4j_version.py>
    
5. 执行以下命令，将更新插件脚本下载到root目录下。 **curl *URL* \> \~/update_log4j_version_for_resetpwdagent.sh**
   其中，*URL*为更新插件脚本的下载地址。
   请根据云服务器所在区域选择脚本的下载地址：
   - 华北-北京一：<https://cn-north-1-cloud-reset-pwd.obs.cn-north-1.myhuaweicloud.com/linux/batch_update_resetpwd/update_log4j_version_for_resetpwdagent.sh>
   
   - 华北-北京四：<https://cn-north-4-cloud-reset-pwd.obs.cn-north-4.myhuaweicloud.com/linux/batch_update_resetpwd/update_log4j_version_for_resetpwdagent.sh>
   
   - 华东-上海二：<https://cn-east-2-cloud-reset-pwd.obs.cn-east-2.myhuaweicloud.com/linux/batch_update_resetpwd/update_log4j_version_for_resetpwdagent.sh>
   
   - 华南-广州：<https://cn-south-1-cloud-reset-pwd.obs.cn-south-1.myhuaweicloud.com/linux/batch_update_resetpwd/update_log4j_version_for_resetpwdagent.sh>
   
   - 中国-香港：<https://ap-southeast-1-cloud-reset-pwd.obs.ap-southeast-1.myhuaweicloud.com/linux/batch_update_resetpwd/update_log4j_version_for_resetpwdagent.sh>
   
   - 亚太-曼谷：<https://ap-southeast-2-cloud-reset-pwd.obs.ap-southeast-2.myhuaweicloud.com/linux/batch_update_resetpwd/update_log4j_version_for_resetpwdagent.sh>
    
6. 检查如下脚本是否在root目录下：
   - batch_update_log4j_version.py
   
   - update_log4j_version_for_resetpwdagent.sh
   
   - CloudResetPwdAgent.zip
    
7. 执行以下命令，新建并编辑host_list.txt，按i进入编辑模式。 **vi host_list.txt**
   将需要自动安装驱动的云服务器的相关信息填写到host_list.txt文件中。
   文件填写格式与登录待切换弹性云服务器的方式需要匹配。
   - 使用密钥对方式鉴权的云服务器，填写方式如下：
     ![](https://support.huaweicloud.com/usermanual-ecs/public_sys-resources/caution_3.0-zh-cn.png)
     - 使用密钥对方式鉴权的云服务器，请将创建弹性云服务器时保存的私钥文件，上传至与host_list.txt同一个文件夹下。
     
     - 使用密钥对方式鉴权的云服务器，请确保私钥文件的权限为400。 **chmod 400** ***私钥文件***
       
      
     每行仅需填写云服务器IP地址。
     示例：
     ```
     192.168.1.10
     192.168.1.11
     ```
     
   
   - 使用密码方式登录的云服务器，填写方式如下： 请严格按照每行**ip,root** **用户密码**，中间以英文逗号隔开的格式填写。
     示例：
     ```
     192.168.1.10,'**********'
     192.168.1.11,'**********'
     ```
     
    
8. 运行批量执行操作脚本"batch_update_log4j_version.py"。
   - 密钥对鉴权方式的服务器 如果私钥文件与批量操作执行脚本在一个目录下，则直接指定私钥文件名称即可。
     **python batch_update_log4j_version.py *{私钥文件路径/私钥文件名称}***
     图1运行成功   
     ![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0000001893237745.png "点击放大")
     若如[图1]所示，则表示脚本运行成功。
     
   
   - 密码方式鉴权的服务器。 **python batch_update_log4j_version.py**
     图2运行成功   
     ![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0000001893201501.png "点击放大")
     若如[图2]所示，则表示脚本运行成功。
     
    
9. 执行如下命令，在"/root/logs/exec_origin.log"的最后一行查看运行结果日志。 **vim /root/logs/exec_origin.log**
   若如[图3]所示，则表示批量更新一键式重置密码插件成功。
   图3运行结果日志   
   ![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0000001893400945.png "点击放大") 
 
#### 后续处理
- 更新一键式重置密码插件后，如果无法通过弹性云服务器开机自动启动该插件，可以将其添加至开机启动项。具体方法请参见[一键式密码重置插件启动失败时如何操作？](https://support.huaweicloud.com/ims_faq/ims_faq_0031.html)。
- 一键式重置密码插件更新成功后，请勿删除重置密码进程CloudResetPwdAgent，否则，会导致一键式重装密码功能不可用。
- 华为云对一键式重置密码插件进行了升级，对于新创建的弹性云服务器，默认采用PIPE模式，不会占用端口。对于已创建云服务器，仍采用AUTO模式，随机占用31000\~32999中的一个端口。占用端口的原则是：在该范围内，系统会按照自小到大的顺序，占用当前空闲的端口。
 
