cloudbase-init是否可以禁用或删除?
https://cloud.tencent.com/developer/article/1883449
可以,但新购机器时指定密码、控制台重置密码会不生效,需要自己提前在镜像里设置好密码,后面改密码也得在系统内部去改,另外,新购机器的RunInstances接口的UserData(自定义数据)功能依赖cloudbase-init,如果删除,新购机器时如果想用UserData进行高级的初始化自定义设置就实现不了。总之,看用户需求,部分用户确实不需要,就卸载了。如果自己拿不定主意,建议保留。
如果业务确实需要cloudbase-init,那得关注一些注意事项,下面的就是。
UserData产品文档:https://cloud.tencent.com/document/product/213/17526
UserData依赖cloudbase-init,cloudbase-init依赖光驱,请不要禁用cloudbase-init服务或改动它、不要禁用光驱,不要删除光驱盘符,如果有安全软件,可能会拦截cloudbase-init,因为cloudbase-init通过python起作用,安全软件可能会认为这是风险项,因此有必要在安全软件里进行cloudbase-init的信任。
cloudbase-init很重要,cloudbase-init用户是否可以删除?参考https://cloud.tencent.com/developer/article/1883449
powershell自动化重装 cloudbase-init 为1.1.2版本
https://cloud.tencent.com/developer/article/1940021
安装好后,还需要人工检查
①打开服务列表找到cloudbase-init启动这个服务,然后刷新服务列表,确保这个过程没报错
②确保查看光驱为空,里面不再有文件,光驱名不再显示config-2,只显示一个盘符即可(如果没有为空,右击弹出)
③执行net user Administrator "新的复杂密码" 不报错,一次性成功,并从开始菜单重启机器并登录进去查看光驱只是显示为一个盘符而不是config-2
注意事项很多,一定要认真看一遍
①不要禁止cloudbase-init服务,不要禁止光驱,会影响初始化、设置密码、设置hostname等流程
②请在安全软件里信任cloudbase-init,否则,安全软件会拦截cloudbase-init,导致cloudbase-init相关的功能异常,比如重置密码失败,即便在安全软件里放行,也应当分别在cmd命令行和powershell命令行执行net user Administrator "密码" 好几次,确保安全软件不拦截才可以;由于cloudbase-init本身是python源码,是通过cmd.exe和powershell.exe调用net user Administrator "密码" 命令起作用,所以cloudbase-init相关的可执行文件比如C:Program FilesCloudbase SolutionsCloudbase-InitPythonScripts目录里的.exe文件、cmd.exe、powershell.exe、net.exe、net1.exe(net1.exe是操作系统自带命令,不要感觉像个病毒木马,我第一次看到这个命令时,也有这种错觉)等可执行文件如果被安全软件拦截就会影响设置密码,安全软件得放行这些可执行文件。或者环境变量有问题使得这些命令不能在cmd命令行或powershell命令行直接识别,也会导致问题,或者客户自己装了一套python加入了环境变量,而cloudbase-init本身自带了一套python就在cloudbase-init的安装目录里,如果python环境变量存在问题,也可能影响cloudbase-init正常执行。
上图的环境变量不能正常识别net命令,我调了个顺序,把%SystemRoot%调到%SystemRoot%system32上面了
因为我想着%SystemRoot%system32的前提是先识别到%SystemRoot%,所以把%SystemRoot%调上去了,然后就恢复正常了
关于python环境变量的问题,不建议配置全局python环境变量,一是影响cloudbase-init,更主要是对开发不利。可以用pycharm创建python虚拟环境
https://jingyan.baidu.com/article/066074d6f91ee8c3c21cb0c5.html
https://www.cnblogs.com/dcpeng/p/12257331.html
③请不要关闭组策略里的密码复杂度,切记!!!通过命令查询密码复杂度是否开启,并设置关闭/开启密码复杂度,参考https://cloud.tencent.com/developer/article/1883630
④cloudbase-init的运行模式请选本地系统帐户(LocalSystem),不要选.cloudbase-init
⑤userdata里如果管道输出.ps1文件,请给文件显性限定行最大字符数,比如 { #代码行不要超过1023个字符 exit 2>$null } | Out-File "c:chromesetup.ps1" -Width 1024 2>$null 1>$null
⑥刚在控制台重置完密码显示运行中时请不要着急使用新密码登录,请至少等待1分钟左右再操作(前10秒内操作大概率会报用户名或密码错误,原因是密码重置分2步,第1步是控制台下发指令,第2步是开机后指令通过cloudbase-init服务调用powershell执行),该现象在一些特殊镜像里必现,基本是设置完密码3分钟左右甚至更长时间才生效
⑦请不要随便删除cloudbase-init的注册表,如果创建机器时传了userdata,而userdata代码里有写操作的代码,那你删除了cloudbase-init的注册表会导致初始化标记为0,下次开机的时候cloudbase-init会认为机器没有初始化过,是新机器,就会自动触发重新执行一遍userdata里的代码,严重点假设,假设代码里有格式化数据盘的操作,岂不是要凉凉
但是如果你原机器没有使用userdata,建议做自定义镜像前,以管理员身份在powershell执行这句命令,否则用制作的镜像给原机器重装系统时,如果指定了跟原来不同的新密码,新密码是不生效的。
reg delete "HKEY_LOCAL_MACHINESOFTWARECloudbase Solutions" /f 2>&1 > $null
⑧黑石的cloudbase-init是特殊配置好的,跟普通cvm有点区别,黑石的cloudbase-init请不要乱动
⑨新购机器hostname并没有完全生效,需要重启机器才生效,如果想自动化完成,需要在userdata里加重启代码,也可以修改cloudbase-init配置文件里的allow_reboot参数值从false改为true,这样买新机器后就会自动重启了,这一点跟腾讯云反馈过,部分地域我验证已经生效了 ⑩制作镜像前,请确保原机器创建的时候没有使用userdata,然后以管理员身份在powershell执行如下代码 reg delete "HKEY_LOCAL_MACHINESOFTWARECloudbase Solutions" /f 2>&1 > $null reg delete "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionNetworkListProfiles" /f 2>&1 > $null reg add "HKLMSYSTEMCurrentControlSetControlNetworkNewNetworkWindowOff" /f 2>&1 > $null wevtutil el | Foreach-Object {wevtutil cl "$_" 2>$null} wevtutil cl security 2>$null wevtutil cl system 2>$null