Начальная настройка сервера с помощью cloud-config

Метаданные содержат базовые данные о конфигурации и среде сервера, такие как сетевые адреса, имя хоста и т. д. Во время начальной настройки эти значения могут быть загружены программой cloud-init, которая поможет настроить основные сервисы.

Наиболее распространенным типом скриптов является cloud-config. Это форматированный файл YAML, который содержит простые удобочитаемые методы настройки общих элементов конфигурации. Также cloud-config имеет возможность запускать произвольные команды для других задач.

Читайте также: Основы написания скриптов cloud-config

В этом руководстве вы узнаете, как написать скрипт cloud-config для начальной настройки сервера Ubuntu 14.04. По сути, скрипт автоматизирует выполнение руководства Начальная настройка сервера Ubuntu 14.04.

Скрипт будет выполнять следующие базовые задачи:

  • Изменение пароля пользователя root.
  • Создание нового пользователя.
  • Создание пароля нового пользователя.
  • Предоставление новому пользователю привилегий root.
  • (Опционально) Изменение порта SSH.
  • (Опционально) Ограничение удаленного root-доступа по SSH.
  • (Опционально) Явное разрешение доступа новому пользователю.

Требования среды

Вся информация, передаваемая файлом cloud-config, доступна любому пользователю системы в течение всего срока службы сервера.

Поэтому возникает ряд проблем безопасности, которые важно своевременно предотвратить. Вот что следует иметь в виду:

  • Любая информация, передаваемая в cloud-config, доступна каждому пользователю в системе. Не размещайте в этих файлах конфиденциальных данных.
  • Вы можете установить пароль для существующих пользователей, но для этого нужно передать его в виде обычного текста.
  • Вы можете передать хешированную версию пароля для новых пользователей, но эти хэши можно легко взломать с помощью специального оборудования.

Учитывая все эти потенциальные проблемы, вы должны сделать все возможное, чтобы избежать передачи паролей в любой форме в файле cloud-config. Вы можете скорректировать ваш скрипт для обеспечения конкретных потребностей вашей среды развертывания.

В результате скорректированная стратегия выглядит так:

  • Никаких паролей и SSH-ключей для учетной записи root в файле cloud-config быть не должно. Ключи можно добавить через интерфейс хостинг-провайдера.
  • Создание нового пользователя (без пароля для новой учетной записи).
  • Настройка SSH-доступа для новой учетной записи пользователя.
  • Предоставление новому пользователю доступа к sudo без запроса пароля.
  • (Опционально) Изменение порта SSH.
  • (Опционально) Ограничение удаленного root-доступа по SSH.
  • (Опционально) Явное разрешение доступа новому пользователю.

Новый пользователь сможет использовать sudo без пароля. Это необходимо, так как мы доступ root к системе будет заблокирован и у нового пользователя не будет пароля.

После того как новый пользователь войдет в систему, он сможет сам выбрать себе пароль и перенастроить sudo для запроса пароля (по желанию).

Использование файлов cloud-config

Файл cloud-config записывается с помощью формата сериализации данных YAML.

Файлы YAML, как правило, интуитивно понятны при чтении, но знать фактические правила написания таких файлов никогда не помешает.

Вот некоторые важные правила файлов YAML:

  • Отступы с пробелами указывают структуру и взаимосвязь элементов друг с другом. Элементы с большим отступом являются подпунктами первого элемента с меньшим отступом.
  • Список членов можно определить с помощью тире.
  • Записи массива создаются с помощью двоеточия (:), за которым следует пробел и значение.
  • Блоки текста имеют отступы. Чтобы указать, что блок должен быть прочитан с сохранением форматирования, используйте символ | перед блоком.

Во-первых, каждый файл cloud-config должен начинаться со строки:

#cloud-config

Это сообщает программе cloud-init, что этот файл нужно интерпретировать как файл cloud-config. В обычных файлах скриптов в первой строке указывается интерпретатор, который должен использоваться для выполнения файла.

Файл cloud-config нужно предоставлять во время создания сервера. Для этого нужно поставить соответствующий флажок для включения пользовательских данных в интерфейсе хостинг-провайдера. Затем появится поле, в котором можно выбрать файл cloud-config.

Если вы используете API, во время запроса на создание сервера можно передать объект JSON, который может использовать поле user_data. Такой объект JSON выглядит примерно так:

"name": "test",
"private_networking": true,
"region": "nyc3",
"size": "512mb",
"image": "ubuntu-14-04-x64",
"user_data":"#cloud-config
config_data
more_config"
"ssh_keys":[ 12345,56789 ]
}

Оба метода имеют абсолютно одинаковый результат.

1: Создание и настройка нового пользователя

Сначала нужно создать нового пользователя. С помощью этого аккаунта на сервере будет выполняться почти вся работа. Пользователь root не имеет пароля по умолчанию, так что вам не нужно удалять его.

Создание пользователя

Чтобы создать нового пользователя, используйте директиву users. Она будет содержать список всех новых учетных записей, которые нужно создать. Поскольку на данном этапе нужно создать только одну учетную запись, список будет очень коротким. Для примера этот пользователь будет условно называться demo.

Как вы помните, начинать файл cloud-config следует со строки #cloud-config. Затем можно добавить директиву.

#cloud-config
users:
- name: demo

Если бы вам нужно было создать несколько учетных записей, вы могли бы продолжить список:

#cloud-config
users:
- name: demo
- name: second_user

Каждое тире указывает на отдельную учетную запись пользователя, под которой можно добавить данные (об этом немного позже).

Добавление SSH-ключей

Чтобы пользователь мог проходить беспарольную аутентификацию, нужно создать SSH-ключи. Их нужно добавить в файл authorized_keys в каталоге .ssh.

Это делается с помощью директивы ssh-authorized-keys, которая является опцией записи users. Здесь нужно добавить директиву name, но не ставить тире, поскольку это не начало новой записи пользователя.

Директива ssh-authorized-keys принимает список ключей. Это позволяет добавить в файл более одного открытого ключа SSH. Например, если у вас есть пара ключей SSH для ноутбука, домашнего компьютера и рабочего компьютера, вы можете добавить все эти ключи как отдельные элементы в список ssh-authorized-keys.

Чтобы получить открытый ключ на локальной машине, введите:

cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com

Затем вы можете вставить ключ в ssh-authorized-keys. Открытые ключи SSH можно размещать публично, поэтому это не представляет угрозы безопасности:

#cloud-config
users:
- name: demo
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com

Чтобы добавить второй ключ, используйте ключевое слово key_two:

#cloud-config
users:
- name: demo
ssh-authorized-keys:
- key_one
- key_two

Добавьте в файл все ключи, которые вы хотите использовать для аутентификации.

Настройка доступа sudo

Следующим шагом будет настройка доступа sudo для новой учетной записи. Как вы помните, у пользователя должен быть беспарольный доступ к sudo, поскольку из-за ограничений безопасности у пользователя не должно быть пароля.

Настроить доступ можно в два отдельных этапа.

Сначала нужно создать запись, которую можно будет использовать в файле sudoers. Все изменения будут записаны в отдельный файл в каталоге /etc/sudoers.d, который /etc/sudoers читает при анализе.

Запись, которую нужно создать, не обязательно будет включать имя пользователя, поскольку cloud-init может определить имя учетной записи самостоятельно. Используйте директиву sudo, которая согласуется с другими директивами уровня users.

Чтобы настроить беспарольный доступ к sudo, используйте такую запись:

#cloud-config
users:
- name: demo
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com
sudo: ['ALL=(ALL) NOPASSWD:ALL']

Это создаст файл 90-cloud-init-users в каталоге /etc/sudoers.d. В этом файле будет такая запись.

demo ALL=(ALL) NOPASSWD:ALL

Второй этап настройки – добавление пользователя в группу sudo. Это не является абсолютно необходимым, так как в скрипте есть относящаяся к новому аккаунту запись, которую анализирует sudo, но так настройка будет более гибкой.

Позже можно вручную установить пароль для пользователя и настроить парольный доступ к командам sudo. Если пользователь уже находится в группе sudo, все, что вам нужно сделать – это установить пароль и удалить запись в файле 90-cloud-init-users.

Чтобы добавить группу для пользователя, вставьте в файл директиву groups:

#cloud-config
users:
- name: demo
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo

В дальнейшем это упростит переход к более традиционной настройке sudo. В конце этого руководства вы узнаете, как это сделать.

Настройка оболочки

По умолчанию новые пользователи работают в оболочке /bin/sh.

Это довольно сложная среда, поэтому лучше для нового пользователя вручную указать среду оболочки bash.

Это можно выполнить с помощью директивы shell  на уровне users. Нужно только указать полный путь исполняемого файла bash:

#cloud-config
users:
- name: demo
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo
shell: /bin/bash

Настройка пользователя завершена.

2: Настройка демона SSH (опционально)

Этот этап позволит вам повысить безопасность сервера. Раздел необязательно выполнять полностью; вы можете расширить скрипт предложенными блоками кода по своему усмотрению.

Все изменения нужно вносить в файл /etc/ssh/sshd_config.

В данном разделе речь пойдет об опциональных пунктах, перечисленных в начале руководства:

  • Изменение порта SSH.
  • Ограничение удаленного root-доступа по SSH.
  • Явное разрешение доступа новому пользователю.

Для этого нужно внести в файл sshd_config такие поправки:

  • Port 4444
  • PermitRootLogin no
  • AllowUsers demo

Есть два метода сделать это. Первый – полностью переписать файл, предоставив новые параметры в файле cloud-config. Второй – внести изменения с помощью утилит Linux.

Оба метода имеют свои преимущества, и оба демонстрируют разные директивы cloud-config. Рассмотрим их по очереди.

Переопределение конфигурационного файла SSH

Первая стратегия внесения изменений в файл SSH – полностью переписать файл, переопределить его новыми параметрами.

Это позволит установить полный контроль над файлом независимо от параметров по умолчанию. Этот метод довольно прямой, предвидеть результаты всех действий легко.

Чтобы записать файлы на диск, используйте директиву write_files. Это директива верхнего уровня, потому ее нужно добавить вне раздела users.

В директиве нужно предоставить список файлов, которые нужно записать.

#cloud-config
users:
- name: demo
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo
shell: /bin/bash
write_files:
- item_one
- item_two

В данном случае нужно только один файл. Для каждого файла нужно указать требуемые изменения. К примеру, вы можете использовать параметры path, content, owner, permissions и encoding.

По умолчанию записанные файлы принадлежат root и имеют привилегии 644, что вполне подходит в большинстве ситуаций. Следовательно, нужно указать только параметры path и content.

Параметр path определяет точку системы, в которой нужно записать файл. Параметр content определяет содержимое, которое должно быть помещено в файл. Для многострочного ввода вы должны использовать символ | в строке content, за которым следует блок с отступом, содержащий контент. Двоичные файлы должны содержать «!! binary» и пробел перед символом |.

В данном случае обновленный файл sshd_config будет содержать параметры по умолчанию без комментариев (для краткости), измененные соответствующим образом. Полный раздел для переопределения файла будет выглядеть так:

#cloud-config
users:
- name: demo
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo
shell: /bin/bash
write_files:
- path: /etc/ssh/sshd_config
content: |
Port 4444
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 1024
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
AllowUsers demo

Это полностью заменит содержимое файла /etc/ssh/sshd_config новыми параметрами. В скрипт нужно добавить стандартный sshd_config с парой измененных параметров.

Настройка SSH с помощью утилит

Также обновить настройки в файле sshd_config можно путем целенаправленного редактирования. Системы Linux поставляются с различными мощными инструментами для обработки текста, которые позволяют внести только нужные изменения.

Для запуска произвольных команд можно использовать директиву runcmd, которая позволяет запускать любую команду в системе. Каждая команда будет элементом списка данной директивы. Можно указать всю команду в виде строки, либо же указать массив с командой и опциями в качестве элементов.

Используйте команду sed, которая предназначена для замены строк. Одной команде sed можно передать несколько операций, но лучше поместить каждую операцию в отдельную команду. Такой код будет проще поддерживать. Все команды sed будут редактировать файл sshd_config.

Первая команда изменит строку, которая определяет порт. Она начинается с Port. С помощью регулярного выражения ^.*$ команда sed заменит стандартную строку строкой Port 4444.

#cloud-config
users:
- name: demo
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo
shell: /bin/bash
runcmd:
- sed -i -e '/^Port/s/^.*$/Port 4444/' etc/ssh/sshd_config

Следующая команда изменит значение строки PermitRootLogin. Вместо этого в файле будет строка PermitRootLogin no.

#cloud-config
users:
- name: demo
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo
shell: /bin/bash
runcmd:
- sed -i -e '/^Port/s/^.*$/Port 4444/' /etc/ssh/sshd_config
- sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config

Следующая команда sed найдет последнюю строку файла (с помощью символа $) и добавит в нее директиву AllowUsers, которой по умолчанию нет.

После этого нужно будет перезапустить демон SSH, чтобы изменения вступили в силу. Для этого используйте команду restart:

#cloud-config
users:
- name: demo
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo
shell: /bin/bash
runcmd:
- sed -i -e '/^Port/s/^.*$/Port 4444/' /etc/ssh/sshd_config
- sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config
- sed -i -e '$aAllowUsers demo' /etc/ssh/sshd_config
- restart ssh

Теперь скрипт сможет изменить нужные параметры ssh.

3: Создание сервера

Скрипт полностью готов к работе. Теперь вы можете создать новый сервер с помощью API или панели управления.

Если вы работаете в API, используйте такие данные:

{"name": "your_server_name",
"private_networking": true,
"region": "nyc3",
"size": "512mb",
"image": "ubuntu-14-04-x64",
"user-data": "#cloud-config
users:
- name: demo
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo
shell: /bin/bash
runcmd:
- sed -i -e '/^Port/s/^.*$/Port 4444/' /etc/ssh/sshd_config
- sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config
- sed -i -e '$aAllowUsers demo' /etc/ssh/sshd_config
- restart ssh"}

4: Устранение неполадок

Если файл cloud-config не работает должным образом, проверьте логи.

Попробуйте найти подсказки в следующих логах:

  • /var/log/cloud-init.log: логи процессов для обработки конфигурационных файлов cloud-init.
  • /var/log/cloud-init-output.log: здесь можно найти любой вывод, полученный при обработке конфигурации.

Также полезную информацию можно найти в файлах с помощью grep.

Если вы не можете войти на сервер, который вы создали, из-за ошибок в конфигурации, лучше удалить этот сервер и начать все сначала. При устранении неполадок также полезно настроить в файле cloud-config тестовый сервер с root-паролем.

Для этого добавьте в скрипт такие строки:

#cloud-config
chpasswd:
list: |
root:yourpassword
expire: False
. . .

Так вы сможете подключиться к консоли, которая не зависит от SSH. Помните, что все пароли в файле cloud-config доступны всем пользователям системы. Потому после обнаружения ошибок удалите тестовый сервер и напишите новый, исправленный cloud-config.

5: Настройка парольного доступа к sudo

Если после создания сервера вы хотите настроить доступ к sudo по паролю, следуйте данному разделу.

Для начала нужно создать пароль пользователя. Единственный способ сделать это и не столкнуться с запросом пароля (которого пока что не существует) – использовать sudo. Укажите имя пользователя в конце команды (без этого имени команда установит пароль для пользователя root).

sudo passwd demo

После этого убедитесь, что данный пользователь входит в группу sudo:

groups
demo sudo

Если пользователь пока не является членом группы sudo, добавьте его в эту группу:

sudo usermod -a -G sudo demo

Затем отредактируйте файл 90-cloud-init-users с помощью команды visudo:

sudo visudo -f /etc/sudoers.d/90-cloud-init-users

Закомментируйте или удалите строки, связанные с этим пользователем.

#demo ALL=(ALL) NOPASSWD:ALL

Сохраните и закройте файл. Теперь при запуске команд sudo система будет запрашивать пароль.

Tags: ,