Когда виртуальная машина создается впервые, она получает пользователя-установщика, который используется для запуска подготовки. Я хочу удалить этого пользователя на последнем этапе, потому что это не обязательно безопасно и не нужно. Однако Packer запускает все инициаторы от имени этого пользователя. Я пробовал использовать Ansible, но, похоже, он все еще использует этого пользователя в некоторой степени, и, таким образом, книга воспроизведения Ansible не может удалить его без сбоев (говоря, что есть программы, все еще работающие от имени данного пользователя). Вместо того, чтобы бездельничать, я спрашиваю, есть ли у кого-нибудь идеи относительно того, как достичь этой цели, которая должна быть простой, а оказалось, что нет.
Я понимаю, что это довольно старый вопрос, но мне не понравилась идея использовать cronjob (или cloud-init, или что-то еще, что происходит после создания экземпляра изображения) для этого, и я нашел то, что я считаю лучшим раствор с использованием самого пакера. Это работает в Packer 1.4:
{
"type": "shell",
"skip_clean": true,
"execute_command": "chmod +x {{ .Path }}; sudo env {{ .Vars }} {{ .Path }} ; rm -f {{ .Path }}",
"inline": [
"rm -f /etc/sudoers.d/90-cloud-init-users",
"/usr/sbin/userdel -r -f fedora",
]
}
Предполагается, что вашего установочного пользователя зовут fedora
- он использует Пакера skip_clean
возможность пропустить удаление сценария оболочки после inline
раздел завершается (что, учитывая, что fedora
пользователь больше не существует, был гарантирован сбой).
Также обратите внимание, что если у вас включена пересылка агента SSH с упаковщиком, это может оставить следы сокета агента на изображении.
Запланируйте задание cron для удаления пользователя с @reboot
вариант или добавьте несколько строк в сценарии rc, чтобы сделать то же самое.