操作场景
当您需要通过脚本简化弹性云主机配置、通过脚本初始化系统、在创建弹性云主机时上传已有脚本,或者完成其他需要使用脚本的功能时,可以考虑使用实例自定义数据注入功能来配置弹性云主机。
使用限制
Windows
- 用于创建弹性云主机的镜像必须安装了Cloud-init组件。
- 实例自定义数据大小限制:小于等于16KB。
- 如果通过文本方式上传实例自定义数据,数据只能包含ASCII码字符;如果通过文件方式上传实例自定义数据,只能上传text/*格式的文件,且文件大小小于等于16KB。
- 必须使用公共镜像、继承于公共镜像的私有镜像,或自行安装了Cloud-init组件的私有镜像。
- 实例自定义脚本必须满足相应弹性云主机自定义脚本类型的格式要求。
Linux
- 用于创建弹性云主机的镜像必须安装了Cloudbase-init 组件。
- 实例自定义数据大小限制:小于等于16KB。
- 如果通过文本方式上传实例自定义数据,数据只能包含ASCII 码字符;如果通过文件方式上传实例自定义数据,可以包含任意字符,同时,要求文件大小小于等于16KB。
- 必须是公共镜像,或继承于公共镜像的私有镜像,或自行安装了Cloudbase-init 组件的私有镜像。
实例自定义数据使用方法
- 根据实际需要写User-Data脚本,脚本格式必须符合Cloud-init/Cloudbase-init官网相关规范。
- 在创建弹性云主机时,在“高级配置 > 用户数据 > 立即配置 > 以文本形式”的文本框中粘贴实例自定义数据脚本内容,或选择以文件形式上传。
说明实例自定义数据注入支持两种方式:
文本:将实例自定义数据脚本内容粘贴到文本框中。
文件:将实例自定义数据脚本内容保存至文本地文件后再上传。
- 系统创建弹性云主机后,弹性云主机将自动执行Cloud-init 或 Cloudbase-init 组件,读取实例自定义数据脚本。
关于Windows弹性云主机的实例自定义数据脚本
Windows弹性云主机的实例自定义数据脚本使用开源的 cloudbase-init 架构实现(详情请参考Cloud-init开源说明),它利用弹性云主机的元数据为数据来源,实现对弹性云主机的自动化配置和初始化脚本执行。下面是关于Windows弹性云主机实例自定义数据脚本的详细说明和使用示例:
- 脚本类型:包括“Batch批处理程序”和“PowerShell脚本”。
- | Batch批处理程序 | PowerShell脚本 |
---|---|---|
格式 | 以“rem cmd”开头且作为首行,前面不能有空格。 | 在采用Base64编码前,以“#ps1”开头且作为首行,前面不能有空格。 |
限制 | 在采用Base64编码前,脚本内容(包括首行)不能超过16KB。 | 在采用Base64编码前,脚本内容(包括首行)不能超过16KB。 |
- 查看注入Windows弹性云主机的自定义数据:
- 登录弹性云主机。
- 执行以下命令,使用root 用户权限查看实例自定义数据:
http://169.254.169.254/openstack/latest/user_data
- 脚本使用示例:
该示例介绍如何以不同格式输入Windows弹性云主机的脚本,并查看脚本的运行结果。
示例:PowerShell脚本
- 创建弹性云主机时,选择"文本" 形式,并输入以下实例自定义数据脚本:
#ps1 echo "Hello, Powershell Test" > C:\aaaa.txt
- 创建成功后,连接并启动弹性云主机,在C:\盘中查看脚本的运行结果:将创建一个名为 "aaaa" 的文本文档。
- 要查看注入到Windows弹性云主机的实例自定义数据,可以在浏览器中访问:
http://169.254.169.254/openstack/latest/user_data
关于Linux云主机的实例自定义数据脚本
Linux弹性云主机的实例自定义数据脚本采用开源的Cloud-init架构实现(详情请参考Cloud-init开源说明),使用云主机的元数据作为数据来源,用于自动化配置。下面是关于Linux弹性云主机实例自定义数据脚本的详细说明和使用示例:
- 脚本的执行时间:在弹性云主机状态变为"running" 之后,但在执行 /etc/init 文件之前。
- 脚本类型:实例自定义数据脚本支持两种类型,即"User-Data Script" 和 "Cloud-Config Data"。
- | User-Data Script | Cloud-Config Data |
---|---|---|
描述 | 使用脚本作为自定义配置的手段,可以是shell 脚本或 Python 脚本。 | 使用Cloud-init 预定义的方式配置云主机的某些服务,例如 yum 源、SSH 密钥等。 |
格式 | 首行必须以"#!" 开头(例如 "#!/bin/bash" 或 "#!/usr/bin/env python"),前面不能有空格首次启动时,以rc.local-like 级别执行,rc.local-like 意味着在启动序列中较后面的位置。 | 首行必须以"#cloud-config" 开头,前面不能有空格 |
限制 | 在采用Base64编码前,脚本内容(包括首行)不能超过16KB。 | 在采用Base64编码前,脚本内容(包括首行)不能超过16KB。 |
频率 | 仅在首次启动弹性云主机时执行一次。 | 配置的服务不同,执行频率也会不同。 |
- 查看注入的实例自定义数据:
- 登录弹性云主机。
- 以root 用户权限执行以下命令来查看实例自定义数据:
curl http://169.254.169.254/openstack/latest/user_data
- 脚本使用示例:
该示例介绍如何以不同格式输入Linux弹性云主机的脚本,并查看脚本的运行结果。
示例一:脚本类型为User-Data Script
- 创建弹性云主机时,选择"文本" 形式,并输入以下实例自定义数据脚本:
#!/bin/bash
echo "Hello, the time is now $(date -R)" | tee /root/output.txt
- 创建成功后,连接并启动弹性云主机,执行命令cat /root/output.txt 查看脚本的运行结果:
[root@XXXXXXXX ~]# cat /root/output.txt
Hello, the time is now Mon, 03 Jul 2023 14:49:08+0800
示例二:脚本类型为Cloud-Config Data
- 创建弹性云主机时,选择"文本" 形式,并输入以下实例自定义数据脚本:
#cloud-config bootcmd: - echo 192.168.1.130 us.archive.ubuntu.com >> /etc/hosts
- 创建成功后,连接并启动弹性云主机,执行命令cat /etc/hosts查看脚本的运行结果。
案例1
以下是通过实例自定义数据注入来重置Linux弹性云主机密码的示例。
假设您要将root用户的密码重置为”******“,新密码必须符合密码复杂度要求,如下表1 密码设置规则所示:
表1 密码设置规则
参数 | 规则 | 样例 |
---|---|---|
密码 | · 密码长度范围为8到26位。 · 密码至少包含以下4种字符中的3种: 大写字母 小写字母 数字 Windows操作系统云主机特殊字符:包括“$”、“!”、“@”、“%”、“-”、“”、“=”、“+”、“[”、“]”、“:”、“.”、“/”、“,”和“?” Linux操作系统云主机特殊字符:包括“!”、“@”、“%”、“-”、“”、“=”、“+”、“[”、“]”、“:”、“.”、“/”、“^”、“,”、“{”、“}”和“?” · 密码不能包含用户名或用户名的逆序。 · Windows操作系统的云主机,不能包含用户名中超过两个连续字符的部分。 |
UTX8@81JCA.1d8sd |
请按照以下示例注入实例自定义数据(请严格遵守下面示例中的缩进标准):
#cloud-config
chpasswd:
list: |
root:******
expire: False
创建弹性云主机成功后,您可以使用重置的密码登录弹性云主机。为了确保密码安全,建议您在第一次登录弹性云主机后修改root用户的密码。
案例2
以下是通过实例自定义数据注入来为Windows弹性云主机新增用户并设置密码的示例。
假设您要创建的用户名为abc,密码为"******"的普通用户,并将其添加到administrators用户组。
说明新密码必须符合密码复杂度要求,如表1密码设置规则。
请按照以下示例注入实例自定义数据:
rem cmd
net user abc ****** /add
net localgroup administrators abc /add
创建弹性云主机成功后,您可以使用新创建的用户名和密码登录弹性云主机,请确保密码符合密码复杂度要求。
案例3
以下是通过实例自定义数据注入来为Linux弹性云主机更新系统软件包并启动httpd服务的示例。
请按照以下示例注入实例自定义数据:
#!/bin/bash
yum update -y
service httpd start
chkconfig httpd on
注入成功后,您的弹性云主机将会更新系统软件包,并启动httpd服务。您可以通过访问弹性云主机的公网IP地址来使用httpd服务。请确保您的操作系统支持yum包管理器,并且已经安装了httpd服务。
案例4
以下是通过实例自定义数据注入来激活Linux弹性云主机的root用户远程登录权限的示例。
实例自定义数据注入示例:
#cloud-config
disable_root: false
runcmd:
- sed -i 's/^PermitRootLogin.*$/PermitRootLogin without-password/' /etc/ssh/sshd_config
- sed -i '/^KexAlgorithms.*$/d' /etc/ssh/sshd_config
- service sshd restart
注入成功后,您将能够使用SSH密钥方式以root帐户登录弹性云主机。该示例中的自定义数据使用cloud-config格式,并通过runcmd字段执行了一系列命令,包括修改/etc/ssh/sshd_config文件中的配置,重启sshd服务使更改生效。
说明激活root用户远程登录权限可能存在安全风险,建议在完成必要的任务后再禁用root用户的远程登录权限,以提高系统的安全性。