Чтобы убедиться, что вы можете использовать функцию внедрения пользовательских данных для внедрения первоначальной пользовательской информации в ECS, созданные из приватного образа (например, при установке ECS пароль для входа), установить Cloud-Init на ECS используется для создания образа.
Cloud-Init — это программное обеспечение с открытым исходным кодом. Если установленная версия имеет уязвимости в безопасности, рекомендуется обновить её до последней версии.
Для подробностей см Проверьте, установлен ли Cloud-Init.
Вы можете установить Cloud-Init, используя любой из следующих методов: (Рекомендуется) Установить Cloud-Init с помощью официального пакета установки и Установить Cloud-Init с помощью официального пакета исходного кода и pip.
Выполните приведённые здесь операции, чтобы проверить, установлен ли 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 shows that Cloud-Init has been installed, Cloud-Init is installed.
Если Cloud-Init установлен, выполните следующие операции:
cd /root/.ssh
rm authorized_keys
cd /home/centos/.ssh
rm authorized_keys
sudo rm -rf /var/lib/cloud/*
После завершения операций не перезапускайте ECS. В противном случае вам необходимо выполнить эти операции снова.
Метод установки Cloud-Init на ECS зависит от ОС. Выполните операции установки от имени пользователя root.
Ниже описано, как установить Cloud-Init на ECS под управлением SUSE Linux, CentOS, Fedora, Debian и Ubuntu. Для других типов ОС установите требуемый тип Cloud-Init. Например, вам необходимо установить coreos-cloudinit на ECS, работающих под CoreOS.
Пути получения пакета установки Cloud-Init для SUSE Linux
Выберите требуемый пакет установки репо в указанных путях.
Возьмите 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 on
service 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.service
systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
Для SUSE и openSUSE выполните следующие действия, чтобы предотвратить изменение имени хоста DHCP:
vi etc/sysconfig/network/dhcp
Таблица 1 перечисляет пути установки Cloud-Init для CentOS. Выберите пакет установки epel-release, соответствующий вашей ОС.
Тип ОС | Версия | Как получить |
|---|---|---|
CentOS | 6 32‑бит | |
6 64‑бит | ||
7 64‑бит |
yum install Адрес пакета установки Cloud-Init/epel-release-x-y.noarch.rpm
yum install cloud-init
Адрес пакета установки Cloud-Init указывает адрес пакета установки Cloud-Init epel-release, и x-y указывает версию Cloud-Init epel-release, необходимую для текущей ОС. Замените их фактическими значениями согласно Таблица 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.service
systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
Перед установкой Cloud-Init убедитесь, что адрес сетевого источника установки настроен для ОС, проверив, существует ли /etc/yum.repo.d/fedora.repo Файл содержит адрес источника установки программного пакета. Если файл не содержит адрес, настройте его, следуя инструкциям на официальном сайте Fedora.
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
Перед установкой Cloud-Init убедитесь, что адрес источника сети установлен для ОС, проверив, есть ли /etc/apt/sources.list файл содержит адрес источника установки программного пакета. Если файл не содержит адрес, настройте его, следуя инструкциям на официальном сайте Debian или Ubuntu.
apt-get update
apt-get 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
Следующие действия используют Cloud-Init 0.7.9 в качестве примера для описания процесса установки Cloud-Init.
Скачать cloud-init-0.7.9.tar.gz по следующему пути:
Если ~/.pip/ каталог не существует, выполните mkdir ~/.pip команду для его создания.
[global]index-url = https://<$mirror>/simple/trusted-host = <$mirror>
Замените <$mirror> на публичный сетевой источник PyPI.
Публичный сетевой источник PyPI: https://pypi.python.org/
pip install [--upgrade] /home/cloud-init-0.7.9.tar.gz
Подробности о том, как установить пакет исходного кода Cloud-Init, смотрите Документация Cloud-Init
cloud-init 0.7.9
chkconfig --add cloud-init-local; chkconfig --add cloud-init; chkconfig --add cloud-config; chkconfig --add cloud-final
chkconfig cloud-init-local on; chkconfig cloud-init on; chkconfig cloud-config on; chkconfig cloud-final on
service 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.service
systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
Если вы устанавливаете Cloud-Init, используя официальный пакет исходного кода и pip, обратите внимание на следующее:
useradd syslog
groupadd adm
usermod -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 для добавления пользователя и настроить swap-разделы, см. FAQ по конфигурации Cloud-Init.
Возьмём Ubuntu в качестве примера.
cat /etc/cloud/set_linux_random_password.sh
Содержимое файла выглядит следующим образом:
#!/bin/bashpassword=$(cat /dev/urandom | tr -dc 'A-Za-z0-9!@#$%&+=' | head -c 9)echo "linux:$password" | chpasswdsed -i -e '/^Login/d' /etc/issuesed -i -e '/^Initial/d' /etc/issuesed -i -c -e '/^$/d' /etc/issueecho -e "\nInitial login with linux:$password\n" >> /etc/issue
Вы можете выполнить chmod +x /etc/cloud/set_linux_random_password.sh команду для добавления прав на выполнение set_linux_random_password.sh.
echo -e '\e[1;31m#################################\\e[0m' > /etc/motd
echo -e '\e[1;31m# Important !!! #\e[0m' >> /etc/motd
echo -e '\e[1;31m# Please change password for user linux after first login. #\e[0m' >> /etc/motd
echo -e '\e[1;31m#################################\e[0m' >> /etc/motd
echo -e '' >> /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 value 0 to enable the 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.
Для получения деталей о том, как зашифровать пароль и сгенерировать шифротекст, см. следующее (encrypting password 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:
datasource_list: [ OpenStack ]datasource:OpenStack:metadata_urls: ['http://169.254.169.254']max_wait: 120timeout: 5
echo "NOZEROCONF=yes" >> /etc/sysconfig/network
Если версия Cloud-Init 0.7.9 или новее, добавьте следующее содержимое в /etc/cloud/cloud.cfg:
network:config: disabled
Добавленный контент должен быть в формате YAML.
Рисунок 2 Отключение возможности сетевой конфигурации Cloud-Init

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

vi /usr/lib/python2.7/site-packages/cloudinit/sources/__init__.py
Нажмите i чтобы войти в режим редактирования. Измените содержание файла следующим образом на основе ключевого слова toks:
if toks:toks = str(toks).split('.')else:#toks = ["ip-%s" % lhost.replace(".", "-")] # Comment out this line.toks = lhost.split(".novalocal") # Add this line.if len(toks) > 1:hostname = toks[0]#domain = '.'.join(toks[1:]) # Comment out this line.else:hostname = toks[0]if fqdn and domain != defdomain:return hostname#return "%s.%s" % (hostname, domain) # Comment out this line.else:return hostname
После завершения изменения нажмите Esc чтобы выйти из режима редактирования и войти :wq! чтобы сохранить настройки и выйти.
Рисунок 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) Выполните следующую команду, чтобы установить максимальный период действия пароля:
chage -M 99999 $user_name
user_name является системным пользователем, например user root.
Рекомендуется установить период действия пароля на 99999.