使用场景
当您有如下需求时,可以考虑使用用户数据注入功能来配置弹性云主机:
- 需要通过脚本简化弹性云主机配置
- 通过脚本初始化系统
- 已有脚本,在创建弹性云主机的时候一并上传到服务器
- 其他可以使用脚本完成的功能
使用限制
-
Linux:
- 用于创建弹性云主机的镜像安装了Cloud-init组件。
- 用户数据大小限制:小于等于32KB。
- 如果通过文本方式上传用户数据,数据只能包含ASCII码字符;如果通过文件方式上传用户数据,可以包含任意字符,同时,要求文件大小小于等于32KB。
- 必须是公共镜像,或继承于公共镜像的私有镜像,或自行安装了Cloud-init组件的私有镜像。
- 必须满足相应Linux弹性云主机自定义脚本类型的格式要求。
- 使用的VPC网络必须开启DHCP,安全组出方向规则保证80端口开放。
- 选择“密码”登录方式时,不支持用户数据注入功能。
-
Windows
- 用于创建弹性云主机的镜像安装了Cloudbase-init组件。
- 用户数据大小限制:小于等于32KB。
- 如果通过文本方式上传用户数据,数据只能包含ASCII码字符;如果通过文件方式上传用户数据,可以包含任意字符,同时,要求文件大小小于等于32KB。
- 必须是公共镜像,或继承于公共镜像的私有镜像,或自行安装了Cloudbase-init组件的私有镜像。
- 使用 VPC网络必须开启DHCP,安全组出方向规则保证80端口开放。
使用方法
- 根据实际需要写用户数据脚本,脚本格式必须符合用户数据脚本规范,详细规范请参见相关链接。
- 创建弹性云主机时,需将用户数据脚本内容粘贴到“高级配置 > 现在配置 > 用户数据注入”的文本框,或选择用户数据文件上传。
- 系统创建弹性云主机,弹性云主机启动后自动执行Cloud-init或Cloudbase-init组件,读取用户数据脚本。
说明用户数据注入支持使用文件和文本两种方式:
文本:将用户数据脚本内容粘贴到文本框中。
文件:将用户数据脚本内容保存至文本文件后再将上传。
关于Linux云主机的用户数据脚本
Linux弹性云主机的自定义用户数据脚本(简称“脚本”)采用开源的Cloud-init架构实现,该架构以云主机的元数据为数据来源,对弹性云主机进行各项自动化配置。自定义脚本类型兼容开源Cloud-init,详情请参考Cloud-init开源说明:http://cloudinit.readthedocs.io/en/latest/topics/format.html。
- 脚本的执行时间:弹性云主机的状态变为“running”之后,执行文件/etc/init之前。
说明脚本默认以root用户权限执行。
- 脚本类型:包括“User-Data Script”和“Cloud-Config Data”。
表 Linux云主机脚本类型介绍
- | 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编码前,脚本内容(包括首行在内)不能超过32KB。 | 在采用Base64编码前,脚本内容(包括首行在内)不能超过32KB。 |
频率 | 仅在首次启动弹性云主机时执行一次。 | 配置的服务不同,执行频率也会不同。 |
- 如何查看注入Linux弹性云主机的自定义用户数据?
-
登录弹性云主机。
-
执行以下命令,以root用户权限查看自定义用户数据。
curl http://169.254.169.254/openstack/latest/user_dat
-
- 脚本使用示例:
该示例介绍如何以不同格式输入Linux弹性云主机的脚本,并查看脚本的运行结果。
示例一:脚本类型为User-Data Script
创建弹性云主机时,选择“文本”形式并输入自定义用户数据脚本,脚本如下:
#!/bin/bash
echo "Hello, the time is now $(date -R)" | tee /root/output.txt
创建成功后,连接并启动弹性云主机,执行命令cat [file],查看脚本的运行结果。
[root@XXXXXXXX ~]# cat /root/output.txt
Hello, the time is now Mon, 16 Jul 2016 16:03:18+0800
示例二:脚本类型为Cloud-Config Data
创建弹性云主机时,选择“文本”形式并输入自定义用户数据脚本,脚本如下:
#cloud-config
bootcmd:
- echo 192.168.1.130 us.archive.ubuntu.com >> /etc/hosts
创建成功后,连接并启动弹性云主机,执行命令cat /etc/hosts查看脚本的运行结果。
图 查看运行结果
关于Windows弹性云主机的用户数据脚本
Windows弹性云主机的自定义用户数据脚本(简称“脚本”)采用开源的cloudbase-init架构实现,该架构以弹性云主机的元数据为数据来源,对弹性云主机进行各项自动化配置,为Windows弹性云主机提供执行初始化脚本的能力。自定义脚本类型兼容开源Cloudbase-init,详情请参考Cloudbase-init开源说明:https://cloudbase-init.readthedocs.io/en/latest/userdata.html。
- 脚本类型:包括“Batch批处理程序”和“PowerShell脚本”。
表 Windows云主机脚本类型介绍
- | Batch批处理程序 | PowerShell脚本 |
---|---|---|
格式 | 以“rem cmd”开头且作为首行,且前面不能有空格。 | 以“#ps1”开头且作为首行,且前面不能有空格。 |
限制 | 在采用Base64编码前,脚本内容(包括首行在内)不能超过32KB。 | 在采用Base64编码前,脚本内容(包括首行在内)不能超过32KB。 |
- 如何查看注入Windows弹性云主机的自定义用户数据?
- 登录弹性云主机。
- 在浏览器栏访问如下地址,查看注入的用户数据。
- http://169.254.169.254/openstack/latest/user_data
- 脚本使用示例
该示例介绍如何以不同格式输入Windows弹性云主机的脚本,并查看脚本的运行结果。
示例一:Batch批处理程序
创建弹性云主机时,选择“文本”形式并输入自定义用户数据脚本,脚本如下:
rem cmd
echo "Hello, BAT Test" > C:\1111.txt
创建成功后,连接并启动弹性云主机,查看脚本的运行结果:在C:\盘添加了一个名称为 “1111” 的文本文档,如下图所示。
图 新建文本文档_Batch
如需查看注入Windows弹性云主机的用户数据,可以在浏览器访问:http://169.254.169.254/openstack/latest/user_data,如下图所示。
图 查看用户数据_Batch
示例二:PowerShell脚本
创建弹性云主机时,选择“文本”形式并输入自定义用户数据脚本,脚本如下:
#ps1
echo "Hello, Powershell Test" > C:\aaaa.txt
创建成功后,连接并启动弹性云主机,查看脚本的运行结果:在C:\盘添加了一个名称为 “aaaa” 的文本文档。
图 新建文本文档_PowerShell
如需查看注入Windows弹性云主机的用户数据,可以在浏览器访问:http://169.254.169.254/openstack/latest/user_data,如下图所示。
图 查看用户数据_PowerShell
案例1
该样例介绍如何通过用户数据注入,为Linux弹性云主机简化云主机配置。
当您需要设置vim的“语法高亮显示”、“制表符占用4个空格”和“显示行数”属性时,就可以写一个脚本.vimrc,并将其注入到“/root/.vimrc”。在您创建完云主机时,您的vim配置便完成了。这样做可以大幅提高系统配置的效率,特别是在您一次性创建多台弹性云主机时。
用户数据注入示例:
#cloud-config
write_files:
-
path: /root/.vimrc
content: |
syntax on
set tabstop=4
set number
案例2
该样例介绍如何通过用户数据注入,设置Linux弹性云主机密码。
说明新密码必须符合密码复杂度要求,密码规则如下表所示。
表 密码设置规则
参数 | 规则 | 样例 |
---|---|---|
密码 | 密码长度范围为8到26位。密码至少包含以下4种字符中的3种:大写字母小写字母数字Windows操作系统云主机特殊字符:包括“$”、“!”、“@”、“%”、“-”、“”、“=”、“+”、“[”、“]”、“:”、“.”、“/”、“,”和“?”Linux操作系统特云主机特殊字符:包括“!”、“@”、“%”、“-”、“ ”、“=”、“+”、“[”、“]”、“:”、“.”、“/”、“^”、“,”、“{”、“}”和“?”密码不能包含用户名或用户名的逆序。Windows操作系统的云主机,不能包含用户名中超过两个连续字符的部分。 | YNbUwp!dUc9MClnv说明样例密码随机生成,请勿复制使用样例。 |
用户数据注入示例:
- 使用密文密码(推荐使用):
#!/bin/bash
echo 'root:$6$V6azyeLwcD3CHlpY$BN3VVq18fmCkj66B4zdHLWevqcxlig' | chpasswd -e;
其中,$6$V6azyeLwcD3CHlpY$BN3VVq18fmCkj66B4zdHLWevqcxlig为密文密码,生成方法如下:
a. 执行以下命令,生成加密盐值
python -c "import crypt, getpass, pwd;print crypt.mksalt()"
回显信息如下:
$6$V6azyeLwcD3CHlpY
b. 执行以下命令,根据盐值生成密文密码
python -c "import crypt, getpass, pwd;print crypt.crypt('Cloud.1234','$6$V6azyeLwcD3CHlpY')"
回显信息如下:
$6$V6azyeLwcD3CHlpY$BN3VVq18fmCkj66B4zdHLWevqcxlig
弹性云主机创建成功后,您可以使用该密码登录。
案例3
该样例介绍如何通过用户数据注入,重置Linux弹性云主机密码。
假设您需要将root用户密码重置为”******“。
说明新密码必须符合密码复杂度要求,密码规则如下表所示。
表 密码设置规则
参数 | 规则 | 样例 |
---|---|---|
密码 | 密码长度范围为8到26位。密码至少包含以下4种字符中的3种:大写字母小写字母数字Windows操作系统云主机特殊字符:包括“$”、“!”、“@”、“%”、“-”、“”、“=”、“+”、“[”、“]”、“:”、“.”、“/”、“,”和“?”Linux操作系统特云主机特殊字符:包括“!”、“@”、“%”、“-”、“ ”、“=”、“+”、“[”、“]”、“:”、“.”、“/”、“^”、“,”、“{”、“}”和“?”密码不能包含用户名或用户名的逆序。Windows操作系统的云主机,不能包含用户名中超过两个连续字符的部分。 | YNbUwp!dUc9MClnv说明样例密码随机生成,请勿复制使用样例。 |
用户数据注入示例(请严格遵守下面示例中的缩进标准):
#cloud-config
chpasswd:
list: |
root:******
expire: False
弹性云主机创建成功后,您可以使用重置的密码登录弹性云主机。为了保证密码安全,建议您在第一次登录弹性云主机后,修改root用户密码。
案例4
该样例介绍如何通过用户数据注入,为Windows弹性云主机新增用户并设置密码。
假设您要创建的用户名为abc、密码为“******”的普通用户,并将其添加至administrators用户组。
说明新密码必须符合密码复杂度要求,密码规则如[表 66]( " ")所示。
用户数据注入示例:
rem cmd
net user abc ****** /add
net localgroup administrators abc /add
弹性云主机创建成功后,您可以使用新创建的用户名和密码登录弹性云主机。
案例5
该样例介绍如何通过用户数据注入,为Linux弹性云主机更新系统软件包,并且开启httpd相关服务。注入成功后,您的弹性云主机就可以使用httpd服务了。
用户数据注入示例:
#!/bin/bash
yum update -y
service httpd start
chkconfig httpd on
案例6
该样例介绍如何通过用户数据注入,激活Linux弹性云主机的root用户远程登录权限。注入成功后,您可以使用SSH密钥方式,以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
相关链接
更多关于用户数据注入案例的介绍,请参见Cloud-init/Cloudbase-init官网: