Создание kickstart файла — различия между версиями

Материал из Wiki AlterOS
Перейти к: навигация, поиск
(Новая страница: « #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use network installation # Use graphical install graphical # Run…»)
 
 
Строка 1: Строка 1:
 +
 +
== Что такое технология Kickstart ==
 +
 +
ОС может быть установлена при помощи т.н. технологии kickstart.
 +
Основой технологии можно считать определённым образом сформированный kickstart файл, служащий набором «ответов» для инсталлятора anaconda. Подобные технологии позволяют автоматизировать процесс установки множества экземпляров ОС.
 +
 +
В общем случае последовательность действий при автоматизации процесса установки может выглядеть следующим образом:
 +
 +
Формирование  kickstart-файла
 +
Обеспечение доступа к kickstart-файлу. Либо сетевой доступ (FTP, NFS, HTTP.. etc), либо локальный доступ (USB-флэшка, накопитель HDD/SSD.. etc)
 +
Обеспечение загрузки и доступа к ksfile и, собственно, источнику установочных данных (локальный накопитель, сетевая установка.. etc)
 +
 +
 +
== Формирование kickstart-файла ==
 +
 +
1. Самый простой, но не всегда удовлетворительный способ, получение kickstart-файла в процессе ручной установки целевого дистрибутива AlterOS. После установки kickstart-файл будет находиться в директории /root
 +
 +
/root/anaconda-ks.cfg
 +
На основе этого файла можно будет продолжить разработку.
 +
 +
2. GUI Утилиты, аналогичные например system-config-kickstart, предоставляемой пакетом system-config-kickstart-2.9.7-1.el7.alteros.noarch
 +
 +
Kickstart-файл содержит большое количество возможных опций.
 +
 +
 +
Рассмотрим используемые в приведённом примере опции:
 +
 +
- Обозначаем используемые опции аутентификации. Используем «стандартные» для современных Linux shadow-passwords и алгоритм хэширования пароля SHA-512
 +
auth --enableshadow --passalgo=sha512
 +
 +
- Используем исчточник установки CDROM (так как рассматриваемая установка локальная). Возможны различные варианты - cdrom, harddrive, nfs, liveimg, url (FTP, HTTP,  HTTPS) 
 +
cdrom
 +
 +
- Выбираем режим установки. Возможные варианты: graphical, text, cmdline
 +
graphical
 +
 +
- Запускаем первоначальную настройку системы при запуске
 +
firstboot --enable
 +
 +
- Определяем диски для установки
 +
ignoredisk --only-use=sda
 +
 +
- Определяем параметры раскладок и клавиатуры
 +
 +
keyboard --vckeymap=us --xlayouts='ru','us' --switch='grp:alt_shift_toggle'
 +
lang ru_RU.UTF-8
 +
 +
- Определяем сетевые настройки (получение адреса от DHCP, используемый сетевой интерфейс, настройки сетевого интефейса, настройка имени хоста)
 +
network  --bootproto=dhcp --device=enp0s3 --ipv6=auto --activate
 +
network  --hostname=localhost.localdomain
 +
 +
- Настройка доступа для пользователя root (SHA-512 хэш от пароля пользователя root)
 +
 +
rootpw --iscrypted $6$VHVmVB.........J5/cQsjU.
 +
 +
- Запуск на установленной ОС демона chronyd для синхронизации времени и устанока временной зоны Europe/Moscow
 +
 +
services --enabled="chronyd"
 +
Europe/Moscow --isUtc
 +
 +
- Добавление пользователя "user" в группу "wheel" с паролем "password" (используется хэш пароля)
 +
 +
user --groups=wheel --name=user --password=$6$VuUNGnamqdtsWYSw$neBhmByYlGgNB4pOYsaINddvitAXFT6wfeGYmwn9.S/qLEzEEMjaEBHog8dqcTe9QhfAvRrqSXZHVNSYFqWad/ --iscrypted --gecos="user"
 +
 +
- Определяем каким образом и куда будет установлен загрузчик и разбиение дисков
 +
 +
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
 +
autopart --type=lvm
 +
clearpart --none --initlabel
 +
 +
- Секция определения устанавливаемых групп пакетов (@^server, @base, @core, chrony, kexec-tools)
 +
 +
- Определяем политики паролей для установщика anaconda
 +
 +
%anaconda
 +
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
 +
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
 +
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
 +
%end
 +
 +
- Добавляем post-script, в данном примере обеспечивающий установку ключа для root
 +
%post
 +
.....
 +
%end
 +
 +
 +
Проверка сформированного kickstart-файла может быть осуществлена при помощи команды:
 +
 +
ksvalidator /path/to/Kickstart.ks
 +
 +
Команда предоставляется пакетом:
 +
 +
pykickstart-1.99.66.18-1.el7.alteros.noarch в текущей версии AlterOS
 +
 +
 +
== Обеспечение доступа к kickstart-файлу. ==
 +
 +
Для указания kickstart-файла в процессе установки служит опция загрузки inst.ks
 +
Опции загрузки задаются в процессе установки. Например:
 +
 +
[[Файл:140754.jpg]]
 +
 +
Нажатие Tab вызывает интерфейс ввода boot options:
 +
 +
[[Файл:141032.jpg]]
 +
 +
Для использования в качестве сценария возможно использовать файл расположенный:
 +
 +
- На накопителе, подключённом локально. Это может быть CD, USB-флэш диск, дискета, HDD/SDD
 +
 +
- В сети (NFS, FTP, HTTP, TFTP)
 +
 +
Например, при использовании NFS для доступа к kickstart-файлу процедура локальной установки OS будет выглядеть так:
 +
    1. Общая конфигурация стенда:
 +
        ◦ В сети работает DHCP сервер, выдающий адреса из диапазона 192.168.254.0/24
 +
        ◦ Есть «образец» системы на AlterOS, установленный вручную
 +
      Поставим задачу:
 +
        ◦ Требуется в автоматическом режиме установить еще один экземпляр AlterOS
 +
        ◦ Авторизация пользователя «root» по паролю «password»
 +
        ◦ Требуется добавить пользователя «user» с паролем «password» и включить его в группу «wheel» (доступ к su, sudo)
 +
        ◦ Требуется добавить авторизацию для пользователя «root» по ключу.
 +
    2. Создание хэша пароля:
 +
        ◦ В ОС AlterOS можно воспользоваться подобным скриптом на python: python3 -c 'import crypt; print(crypt.crypt("password", crypt.mksalt(crypt.METHOD_SHA512)))'
 +
    3. Создание ключа SSH:
 +
        ◦ В ОС AlterOS можно воспользоваться командой: ssh-keygen -t rsa
 +
    4. Создание kickstart-файла:
 +
      Воспользуемся /root/anaconda-ks.cfg из "ручной" установки AlterOS
 +
      В файл нужно добавить открытый ключ и обеспечить его использование на установленной ОС (блок %post %end в приведённом примере)
 +
      Потом копируем /root/anaconda-ks.cfg в предварительно созданную директорию /var/nfs/ksfiles/
 +
      cp /root/anaconda-ks.cfg  /var/nfs/ksfiles/ks.cfg
 +
    5. Настройка NFS.
 +
        ◦ Создание файла /etc/exports. В результате:
 +
          [root@localhost ksfiles]# cat /etc/exports
 +
          /var/nfs/ksfiles 192.168.254.0/24(rw,sync,insecure,no_root_squash,no_all_squash)
 +
      Тут необходимо обратить внимание на опцию экспорта "insecure". Сервис установки anaconda осуществляет запрос по порту ниже 1024.
 +
        ◦ Открываем firewall:
 +
      [root@localhost ksfiles]# firewall-cmd --permanent --add-service=nfs
 +
      [root@localhost ksfiles]# firewall-cmd --permanent --add-service=mountd
 +
      [root@localhost ksfiles]# firewall-cmd --permanent --add-service=rpc-bind
 +
      [root@localhost ksfiles]# firewall-cmd --reload
 +
        ◦ Проверка экспорта:
 +
      [root@localhost ksfiles]# showmount -e 192.168.254.139
 +
      Export list for 192.168.254.139:
 +
      /var/nfs/ksfiles 192.168.254.0/24
 +
    6. Настройка boot options:
 +
      Используем опцию: inst.ks=nfs:192.168.254.139:/var/nfs/ksfiles/ks.cfg
 +
    7. Далее запускаем установку. Установщик anaconda сам выполнит все ходы, записанные в kickstart-файле.
 +
 +
 +
== Пример kickstart-файла: ==
 +
 +
 
  #version=DEVEL
 
  #version=DEVEL
 
  # System authorization information
 
  # System authorization information
 
  auth --enableshadow --passalgo=sha512
 
  auth --enableshadow --passalgo=sha512
  # Use network installation
+
  # Use CDROM installation media
 +
cdrom
 
  # Use graphical install
 
  # Use graphical install
 
  graphical
 
  graphical
Строка 15: Строка 168:
 
  # Network information
 
  # Network information
 
  network  --bootproto=dhcp --device=enp0s3 --ipv6=auto --activate
 
  network  --bootproto=dhcp --device=enp0s3 --ipv6=auto --activate
  network  --hostname=localhost.localdomain
+
  network  --hostname=localhost.localdomain  
 
+
 
  # Root password
 
  # Root password
  rootpw --iscrypted $6$AUyJlUR893vOqQLO$R8/DYWEOqWqbM7bkK21V93gorL61yiShaRFOG7h6UU2/S7KRPUq4pi0LfJ62nW1bERRy5a5sZvd/18ozEGmN81
+
  rootpw --iscrypted $6$VHVmVBq8pPqtsWRA$dfD3bDLMrvwH3M.S7Mpm402oTq0YdLb8e6BVtJfHwMzlgSf3FqgEOkliefAT1woDobenTka2edlDaJ5/cQsjU.
 
  # System services
 
  # System services
 
  services --enabled="chronyd"
 
  services --enabled="chronyd"
 
  # System timezone
 
  # System timezone
  timezone Europe/Moscow --isUtc --ntpservers=time100.stupi.se,host-79-164-47-236.qwerty.ru,128.0.142.251,ntp2.aas.ru,95-165-138-248.static.spd-mgts.ru,host55.rax.ru,ns1.ooonet.ru,cello.corbina.net
+
  timezone Europe/Moscow --isUtc
# X Window System configuration information
+
user --groups=wheel --name=user --password=$6$VuUNGnamqdtsWYSw$neBhmByYlGgNB4pOYsaINddvitAXFT6wfeGYmwn9.S/qLEzEEMjaEBHog8dqcTe9QhfAvRrqSXZHVNSYFqWad/ --iscrypted --gecos="user"
xconfig  --startxonboot
 
 
  # System bootloader configuration
 
  # System bootloader configuration
  bootloader --location=mbr --boot-drive=sda
+
  bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
 
+
  autopart --type=lvm
###  откуда устанавливать
 
url --url="http://192.168.5.161/alteros7_x64"
 
 
 
 
 
  autopart --type=lvm  
 
 
  # Partition clearing information
 
  # Partition clearing information
  clearpart --all --initlabel --drives=sda
+
  clearpart --none --initlabel
 
+
 
  %packages
 
  %packages
  @^workstation
+
  @^server
 
  @base
 
  @base
@cinnamon-desktop
 
 
  @core
 
  @core
@desktop-debugging
 
@dial-up
 
@directory-client
 
@fonts
 
@guest-agents
 
@guest-desktop-agents
 
@input-methods
 
@internet-browser
 
@java-platform
 
@multimedia
 
@network-file-system-client
 
@networkmanager-submodules
 
@office-suite
 
@print-client
 
@x11
 
 
  chrony
 
  chrony
 
+
kexec-tools
 +
%end
 +
 +
%addon com_redhat_kdump --enable --reserve-mb='auto'
 +
 
  %end
 
  %end
 
+
 
 
 
  %anaconda
 
  %anaconda
 
  pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
 
  pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
Строка 66: Строка 200:
 
  pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
 
  pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
 
  %end
 
  %end
  rootpw --iscrypted xyJkVhXGAZ8tM
+
 
  user --groups=wheel --name=user --password=xyJkVhXGAZ8tM --iscrypted --gecos=user
+
  %post
  %post --log=/root/ks-post.log
+
  # Add public SSH-key
  cat >> /etc/grub.d/40_custom << EOF
+
  mkdir -m0700 /root/.ssh
    set superusers="root"
+
  cat <<EOF >/root/.ssh/authorized_keys
    export superusers
+
ssh-rsa  AAAAB3NzaC1yc2EAAAADAQABAAABAQCexNsEr6wHMYctYgWNYb7g0wrINgRekL6x/EDTe9yaskob0GjnGp7bwSRBGmCWxFI0MxAwpyobA3rEJadRzyHke9yOHjkdmqN87lUozi+z9FIGQJzMsBqNdBVC1GmikviVNYgs0mRTntW6Zcd6gA6N3GKd9alm1ruvEF7En5S5rrcm02Y+m73  FM7jvtT/QPp3A3za2h0vw/KpvSLtYGPdeqNRL0xq68dwsXpR38Mz4D7B5nyUm4Y+z4iJsAEup6h9mH3EsmNd3kNiw2EiHZU1CT+WnN5+laLp8+Ksp7yp6vBTtb+RIPErVAqK7Ju3ayUu6nC/UPKIN8Z3rzfRFc8Wt pub_key@test.local
    password_pbkdf2 root grub.pbkdf2.sha512.10000.28F39C623DF4F45876D8D9CA87FAF58F04B5F3B2A5239FE5809EFA4B274283310713D381BE847E757BBB6B8CADCB5AD148AEAC93FB6C615C6F47DB5EF8D46C9.7251C0CE33F7108F4A4AA977BFEDCEA3402E35FDA0082C83B74CC83E413A3456A6D7EBB080912D0EF466BA0089B1AC0F749954F1209DD729C1728C5159B2AA0B
 
 
  EOF
 
  EOF
  grub2-mkconfig -o /boot/grub2/grub.cfg
+
   
 +
chmod 0600 /root/.ssh/authorized_keys
 
  %end
 
  %end

Текущая версия на 15:29, 5 мая 2023

Что такое технология Kickstart

ОС может быть установлена при помощи т.н. технологии kickstart. Основой технологии можно считать определённым образом сформированный kickstart файл, служащий набором «ответов» для инсталлятора anaconda. Подобные технологии позволяют автоматизировать процесс установки множества экземпляров ОС.

В общем случае последовательность действий при автоматизации процесса установки может выглядеть следующим образом:

Формирование  kickstart-файла
Обеспечение доступа к kickstart-файлу. Либо сетевой доступ (FTP, NFS, HTTP.. etc), либо локальный доступ (USB-флэшка, накопитель HDD/SSD.. etc)
Обеспечение загрузки и доступа к ksfile и, собственно, источнику установочных данных (локальный накопитель, сетевая установка.. etc)


Формирование kickstart-файла

1. Самый простой, но не всегда удовлетворительный способ, получение kickstart-файла в процессе ручной установки целевого дистрибутива AlterOS. После установки kickstart-файл будет находиться в директории /root

/root/anaconda-ks.cfg На основе этого файла можно будет продолжить разработку.

2. GUI Утилиты, аналогичные например system-config-kickstart, предоставляемой пакетом system-config-kickstart-2.9.7-1.el7.alteros.noarch

Kickstart-файл содержит большое количество возможных опций.


Рассмотрим используемые в приведённом примере опции:

- Обозначаем используемые опции аутентификации. Используем «стандартные» для современных Linux shadow-passwords и алгоритм хэширования пароля SHA-512

auth --enableshadow --passalgo=sha512

- Используем исчточник установки CDROM (так как рассматриваемая установка локальная). Возможны различные варианты - cdrom, harddrive, nfs, liveimg, url (FTP, HTTP, HTTPS)

cdrom

- Выбираем режим установки. Возможные варианты: graphical, text, cmdline

graphical

- Запускаем первоначальную настройку системы при запуске

firstboot --enable

- Определяем диски для установки

ignoredisk --only-use=sda

- Определяем параметры раскладок и клавиатуры

keyboard --vckeymap=us --xlayouts='ru','us' --switch='grp:alt_shift_toggle'
lang ru_RU.UTF-8

- Определяем сетевые настройки (получение адреса от DHCP, используемый сетевой интерфейс, настройки сетевого интефейса, настройка имени хоста)

network  --bootproto=dhcp --device=enp0s3 --ipv6=auto --activate
network  --hostname=localhost.localdomain

- Настройка доступа для пользователя root (SHA-512 хэш от пароля пользователя root)

rootpw --iscrypted $6$VHVmVB.........J5/cQsjU.

- Запуск на установленной ОС демона chronyd для синхронизации времени и устанока временной зоны Europe/Moscow

services --enabled="chronyd"
Europe/Moscow --isUtc

- Добавление пользователя "user" в группу "wheel" с паролем "password" (используется хэш пароля)

user --groups=wheel --name=user --password=$6$VuUNGnamqdtsWYSw$neBhmByYlGgNB4pOYsaINddvitAXFT6wfeGYmwn9.S/qLEzEEMjaEBHog8dqcTe9QhfAvRrqSXZHVNSYFqWad/ --iscrypted --gecos="user"

- Определяем каким образом и куда будет установлен загрузчик и разбиение дисков

bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
clearpart --none --initlabel

- Секция определения устанавливаемых групп пакетов (@^server, @base, @core, chrony, kexec-tools)

- Определяем политики паролей для установщика anaconda

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

- Добавляем post-script, в данном примере обеспечивающий установку ключа для root

%post
.....
%end


Проверка сформированного kickstart-файла может быть осуществлена при помощи команды:

ksvalidator /path/to/Kickstart.ks

Команда предоставляется пакетом:

pykickstart-1.99.66.18-1.el7.alteros.noarch в текущей версии AlterOS


Обеспечение доступа к kickstart-файлу.

Для указания kickstart-файла в процессе установки служит опция загрузки inst.ks Опции загрузки задаются в процессе установки. Например:

140754.jpg

Нажатие Tab вызывает интерфейс ввода boot options:

141032.jpg

Для использования в качестве сценария возможно использовать файл расположенный:

- На накопителе, подключённом локально. Это может быть CD, USB-флэш диск, дискета, HDD/SDD

- В сети (NFS, FTP, HTTP, TFTP)

Например, при использовании NFS для доступа к kickstart-файлу процедура локальной установки OS будет выглядеть так:

   1. Общая конфигурация стенда:
       ◦ В сети работает DHCP сервер, выдающий адреса из диапазона 192.168.254.0/24
       ◦ Есть «образец» системы на AlterOS, установленный вручную
      Поставим задачу: 
       ◦ Требуется в автоматическом режиме установить еще один экземпляр AlterOS
       ◦ Авторизация пользователя «root» по паролю «password»
       ◦ Требуется добавить пользователя «user» с паролем «password» и включить его в группу «wheel» (доступ к su, sudo)
       ◦ Требуется добавить авторизацию для пользователя «root» по ключу.
   2. Создание хэша пароля: 
       ◦ В ОС AlterOS можно воспользоваться подобным скриптом на python: python3 -c 'import crypt; print(crypt.crypt("password", crypt.mksalt(crypt.METHOD_SHA512)))'
   3. Создание ключа SSH:
       ◦ В ОС AlterOS можно воспользоваться командой: ssh-keygen -t rsa
   4. Создание kickstart-файла:
      Воспользуемся /root/anaconda-ks.cfg из "ручной" установки AlterOS
      В файл нужно добавить открытый ключ и обеспечить его использование на установленной ОС (блок %post %end в приведённом примере)
      Потом копируем /root/anaconda-ks.cfg в предварительно созданную директорию /var/nfs/ksfiles/
      cp /root/anaconda-ks.cfg  /var/nfs/ksfiles/ks.cfg
   5. Настройка NFS.
       ◦ Создание файла /etc/exports. В результате:
         [root@localhost ksfiles]# cat /etc/exports
         /var/nfs/ksfiles 192.168.254.0/24(rw,sync,insecure,no_root_squash,no_all_squash) 
      Тут необходимо обратить внимание на опцию экспорта "insecure". Сервис установки anaconda осуществляет запрос по порту ниже 1024.
       ◦ Открываем firewall:
      [root@localhost ksfiles]# firewall-cmd --permanent --add-service=nfs
      [root@localhost ksfiles]# firewall-cmd --permanent --add-service=mountd
      [root@localhost ksfiles]# firewall-cmd --permanent --add-service=rpc-bind
      [root@localhost ksfiles]# firewall-cmd --reload
       ◦ Проверка экспорта:
      [root@localhost ksfiles]# showmount -e 192.168.254.139
      Export list for 192.168.254.139:
      /var/nfs/ksfiles 192.168.254.0/24
   6. Настройка boot options:
      Используем опцию: inst.ks=nfs:192.168.254.139:/var/nfs/ksfiles/ks.cfg
   7. Далее запускаем установку. Установщик anaconda сам выполнит все ходы, записанные в kickstart-файле.


Пример kickstart-файла:

#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='ru','us' --switch='grp:alt_shift_toggle'
# System language
lang ru_RU.UTF-8

# Network information
network  --bootproto=dhcp --device=enp0s3 --ipv6=auto --activate
network  --hostname=localhost.localdomain 

# Root password
rootpw --iscrypted $6$VHVmVBq8pPqtsWRA$dfD3bDLMrvwH3M.S7Mpm402oTq0YdLb8e6BVtJfHwMzlgSf3FqgEOkliefAT1woDobenTka2edlDaJ5/cQsjU.
# System services
services --enabled="chronyd"
# System timezone
timezone Europe/Moscow --isUtc
user --groups=wheel --name=user --password=$6$VuUNGnamqdtsWYSw$neBhmByYlGgNB4pOYsaINddvitAXFT6wfeGYmwn9.S/qLEzEEMjaEBHog8dqcTe9QhfAvRrqSXZHVNSYFqWad/ --iscrypted --gecos="user"
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information
clearpart --none --initlabel

%packages
@^server
@base
@core
chrony
kexec-tools
%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
 
%post
# Add public SSH-key
mkdir -m0700 /root/.ssh
cat <<EOF >/root/.ssh/authorized_keys
ssh-rsa  AAAAB3NzaC1yc2EAAAADAQABAAABAQCexNsEr6wHMYctYgWNYb7g0wrINgRekL6x/EDTe9yaskob0GjnGp7bwSRBGmCWxFI0MxAwpyobA3rEJadRzyHke9yOHjkdmqN87lUozi+z9FIGQJzMsBqNdBVC1GmikviVNYgs0mRTntW6Zcd6gA6N3GKd9alm1ruvEF7En5S5rrcm02Y+m73   FM7jvtT/QPp3A3za2h0vw/KpvSLtYGPdeqNRL0xq68dwsXpR38Mz4D7B5nyUm4Y+z4iJsAEup6h9mH3EsmNd3kNiw2EiHZU1CT+WnN5+laLp8+Ksp7yp6vBTtb+RIPErVAqK7Ju3ayUu6nC/UPKIN8Z3rzfRFc8Wt pub_key@test.local
EOF

chmod 0600 /root/.ssh/authorized_keys
%end