Чтобы убедиться, что вы можете использовать функцию внедрения пользовательских данных для внедрения начальной пользовательской информации в ECS, созданные из частного образа (например, при установке пароля для входа ECS), установите Cloud-Init на ECS, используемый для создания образа.
Cloud-Init — это программное обеспечение с открытым исходным кодом. Если установленная версия содержит уязвимости безопасности, рекомендуется обновить её до последней версии.
Для получения подробной информации см. Check Whether Cloud-Init Has Been Installed.
Вы можете установить Cloud-Init одним из следующих способов:
Выполните приведённые здесь операции, чтобы проверить, установлен ли Cloud-Init. Методы проверки установки Cloud-Init различаются в зависимости от ОС.
which cloud-init
/usr/bin/cloud-init
/usr/bin/which: no cloud-init in (/usr/local/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin)
which cloud-init
cloud-init-0.7.5-10.el6.centos.2.x86_64
Чтобы убедиться, что Cloud-Init действительно не установлен, рекомендуется выполнить rpm -qa |grep cloud-init для повторной проверки. Если любой из which cloud-init и rpm -qa |grep cloud-init показывает, что Cloud-Init установлен, Cloud-Init считается установленным.
Если Cloud-Init установлен, выполните следующие операции: После завершения операций не перезапускайте ECS. В противном случае вам потребуется выполнить эти операции повторно.
Метод установки Cloud-Init на ECS зависит от ОС. Выполните операции установки от имени пользователя root.
Ниже описано, как установить Cloud-Init на ECS с SUSE Linux, CentOS, Fedora, Debian и Ubuntu. Для других типов ОС установите соответствующий тип Cloud-Init. Например, необходимо установить coreos-cloudinit на ECSs с CoreOS.
https://ftp5.gwdg.de/pub/opensuse/repositories/Cloud:/Tools/
Выберите пакет из репозиториев в соответствии с версией вашей ОС.
Возьмём SUSE Enterprise Linux Server 12 в качестве примера. Выполните следующие шаги для установки Cloud-Init:
zypper ar https://ftp5.gwdg.de/pub/opensuse/repositories/Cloud:/Tools/SLE_12_SP3/Cloud:Tools.repo
zypper refresh
zypper install cloud-init
chkconfig cloud-init-local on; chkconfig cloud-init on; chkconfig cloud-config on; chkconfig cloud-final onservice cloud-init-local status; service cloud-init status; service cloud-config status; service cloud-final status
systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.servicesystemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
Для SUSE и openSUSE выполните следующие действия, чтобы предотвратить изменение имени хоста службой DHCP:
vi /etc/sysconfig/network/dhcp
Тип ОС | Версия | URL |
|---|---|---|
CentOS | 6 32-bit | |
6 64-bit | https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/ | |
7 64-bit | https://archives.fedoraproject.org/pub/archive/epel/7/x86_64/Packages/e/ |
yum install network-installation-repository-URL/epel-release-x-y.noarch.rpmyum install cloud-init
network-installation-repository-URL указывает, где можно получить пакет установки Cloud-Init epel-release. x-y указывает версию Cloud-Init epel-release, требуемую текущей ОС. Замените их фактическими значениями на основе Table 1.
yum install https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install https://archives.fedoraproject.org/pub/archive/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm
systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.servicesystemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
yum install cloud-init
systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
apt-get updateapt-get install cloud-init
systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.servicesystemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
В следующих действиях в качестве примера используется Cloud-Init 0.7.9 для описания процесса установки Cloud-Init.
Скачайте cloud-init-0.7.9.tar.gz по следующему пути:
https://launchpad.net/cloud-init/trunk/0.7.9/+download/cloud-init-0.7.9.tar.gz
Если каталог ~/.pip/ не существует, выполните команду mkdir ~/.pip для его создания.
[global]index-url = https:// <$mirror> /simple/trusted-host = <$mirror>
Замените \u003c$mirror\u003e на публичный сетевой источник PyPI.
Публичный сетевой источник PyPI: https://pypi.python.org/
pip install [--upgrade] /home/cloud-init-0.7.9.tar.gz
Подробную информацию о том, как установить пакет исходного кода Cloud-Init, см. Cloud-Init Documentation.
cloud-init 0.7.9
chkconfig --add cloud-init-local; chkconfig --add cloud-init; chkconfig --add cloud-config; chkconfig --add cloud-finalchkconfig cloud-init-local on; chkconfig cloud-init on; chkconfig cloud-config on; chkconfig cloud-final onservice cloud-init-local status; service cloud-init status; service cloud-config status; service cloud-final status
systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.servicesystemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
Если вы устанавливаете Cloud-Init с помощью официального пакета исходного кода и pip, обратите внимание, что:
useradd sysloggroupadd admusermod -g adm syslog
Выполните следующую команду, чтобы открыть файл sshd_config в редакторе vi:
vi /etc/ssh/sshd_config
Для SUSE и openSUSE измените значения следующих параметров в файле sshd_config на no:
vi /etc/cloud/cloud.cfg
Этот шаг предназначен только для Cloud-Init версии 18.3 и новее.
Рисунок 1 Пример конфигурации

Для Ubuntu и Debian установите значение manage_etc_hosts в файле /etc/cloud/cloud.cfg на localhost. В противном случае переключение на пользователя root может завершиться тайм‑аутом. Подробную информацию о том, как изменить имя хоста облачного сервера, настроить SSH‑ключ, использовать Cloud-Init для добавления пользователя и настроить разделы подкачки, см. Cloud-Init Configuration FAQ.
Возьмём Ubuntu в качестве примера.
cat /etc/cloud/set_linux_random_password.sh
Содержимое файла выглядит следующим образом: Вы можете выполнить команду chmod +x /etc/cloud/set_linux_random_password.sh, чтобы предоставить право выполнения файлу set_linux_random_password.sh.
echo -e '\e[1;31m#################################\\e[0m' \u003e /etc/motd
echo -e '\e[1;31m# Important !!! #\e[0m' \u003e\u003e /etc/motd
echo -e '\e[1;31m# Please change password for user linux after first login. #\e[0m' \u003e\u003e /etc/motd
echo -e '\e[1;31m#################################\e[0m' \u003e\u003e /etc/motd
echo -e '' \u003e\u003e /etc/motd
Убедитесь, что формат конфигурационного файла (например, выравнивание и пробелы) соответствует приведённому примеру.
system_info:# This will affect which distro class gets useddistro: rhel# Default user name + that default users groups (if added/used)default_user:name: linux #Username for loginlock_passwd: False #Login using a password is enabled. Note that some OSs use the value 0 to enable password login.gecos: Cloud Usergroups: users #Optional. Add users to other groups that have been configured in /etc/group .passwd: $6$I63DBVKK$Zh4lchiJR7NuZvtJHsYBQJIg5RoQCRLS1X2Hsgj2s5JwXI7KUO1we8WYcwbzeaS2VNpRmNo28vmxxCyU6LwoD0sudo: ["ALL=(ALL) NOPASSWD:ALL"] # Assign the root rights to the user.shell: /bin/bash # Execute shell in bash mode.# Other config here will be given to the distro class and/or path classespaths:cloud_dir: /var/lib/cloud/templates_dir: /etc/cloud/templates/ssh_svcname: sshdbootcmd:- [cloud-init-per, instance, password, bash,/etc/cloud/set_linux_random_password.sh]
Значение passwd зашифровано с использованием SHA512 (используется в качестве примера). Подробнее см. https://cloudinit.readthedocs.io/en/latest/topics/examples.html.
Подробности о том, как зашифровать пароль и сгенерировать шифртекст, см. ниже (в качестве примера используется пароль cloud.1234):
[root@** ~]# python -c "import crypt, getpass, pwd; print crypt.mksalt()"$6$I63DBVKK[root@** ~]# python -c "import crypt, getpass, pwd; print crypt.crypt(' cloud.1234 ', ' \$6\$I63DBVKK ')"$6$I63DBVKK$Zh4lchiJR7NuZvtJHsYBQJIg5RoQCRLS1X2Hsgj2s5JwXI7KUO1we8WYcwbzeaS2VNpRmNo28vmxxCyU6LwoD0
Добавьте следующую информацию в последнюю строку файла /etc/cloud/cloud.cfg: echo "NOZEROCONF=yes" >> /etc/sysconfig/network
Если версия Cloud-Init 0.7.9 или новее, добавьте следующее содержимое в /etc/cloud/cloud.cfg:
network:config: disabled
Добавленное содержимое должно быть в формате YAML.
Figure 2 Отключение возможности сетевой конфигурации Cloud-Init

Переместите ssh из нижней части в верхнюю, чтобы ускорить вход по SSH.
Figure 3 Ускорение входа по SSH в ECS

vi /usr/lib/python2.7/site-packages/cloudinit/sources/__init__.py
Нажмите i, чтобы войти в режим редактирования. Измените содержимое файла следующим образом, исходя из ключевого слова toks:
После завершения изменения нажмите Esc, чтобы выйти из режима редактирования, и введите :wq! для сохранения настроек и выхода.
Figure 4 Изменение файла __init__.py

cd /usr/lib/python2.7/site-packages/cloudinit/sources/
rm -rf __init__.pyc
rm -rf __init__.pyo
rm -rf /var/lib/cloud/*
rm -rf /var/log/cloud-init*
vim /etc/cloud/cloud.cfg.d/05_logging.cfg
Рисунок 5 Установка значения параметра cloudLogHandler

Выполните следующую команду, чтобы проверить, правильно ли настроен Cloud-Init:
cloud-init init --local
Если Cloud-Init установлен правильно, отображается информация о версии и ошибок не возникает. Например, сообщения о недостающих файлах не будут отображаться. (Optional) Выполните следующую команду, чтобы установить максимальный срок действия пароля: user_name является системным пользователем, например пользователь root. Рекомендуется установить срок действия пароля равным 99999.