使用場景
當您有如下需求時,可以考慮使用用戶數據注入功能來配置彈性云主機:
- 需要通過腳本簡化彈性云主機配置
- 通過腳本初始化系統
- 已有腳本,在創建彈性云主機的時候一并上傳到服務器
- 其他可以使用腳本完成的功能
使用限制
-
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開源說明://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 //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開源說明://cloudbase-init.readthedocs.io/en/latest/userdata.html。
- 腳本類型:包括“Batch批處理程序”和“PowerShell腳本”。
表 Windows云主機腳本類型介紹
| - | Batch批處理程序 | PowerShell腳本 |
|---|---|---|
| 格式 | 以“rem cmd”開頭且作為首行,且前面不能有空格。 | 以“#ps1”開頭且作為首行,且前面不能有空格。 |
| 限制 | 在采用Base64編碼前,腳本內容(包括首行在內)不能超過32KB。 | 在采用Base64編碼前,腳本內容(包括首行在內)不能超過32KB。 |
- 如何查看注入Windows彈性云主機的自定義用戶數據?
- 登錄彈性云主機。
- 在瀏覽器欄訪問如下地址,查看注入的用戶數據。
- //169.254.169.254/openstack/latest/user_data
- 腳本使用示例
該示例介紹如何以不同格式輸入Windows彈性云主機的腳本,并查看腳本的運行結果。
示例一:Batch批處理程序
創建彈性云主機時,選擇“文本”形式并輸入自定義用戶數據腳本,腳本如下:
rem cmd
echo "Hello, BAT Test" > C:\1111.txt
創建成功后,連接并啟動彈性云主機,查看腳本的運行結果:在C:\盤添加了一個名稱為 “1111” 的文本文檔,如下圖所示。
圖 新建文本文檔_Batch

如需查看注入Windows彈性云主機的用戶數據,可以在瀏覽器訪問:,如下圖所示。
圖 查看用戶數據_Batch

示例二:PowerShell腳本
創建彈性云主機時,選擇“文本”形式并輸入自定義用戶數據腳本,腳本如下:
#ps1
echo "Hello, Powershell Test" > C:\aaaa.txt
創建成功后,連接并啟動彈性云主機,查看腳本的運行結果:在C:\盤添加了一個名稱為 “aaaa” 的文本文檔。
圖 新建文本文檔_PowerShell

如需查看注入Windows彈性云主機的用戶數據,可以在瀏覽器訪問:,如下圖所示。
圖 查看用戶數據_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官網: