首次创建虚拟机时,它会获得一个用于运行配置的安装用户。我想在最后一步删除此用户,因为它不一定安全,而且没有必要。但是,Packer 会以该用户的身份运行所有配置程序。我尝试使用 Ansible,但它似乎仍在以某种方式使用该用户,因此 Ansible 剧本无法真正删除它,否则会失败(说有程序仍以给定用户的身份运行)。我不想瞎折腾,而是想问问大家对如何实现这个目标有什么想法,这应该很简单,但结果却并非如此。
答案1
安排一个 cron 作业来使用选项删除用户@reboot
或者在 rc 脚本中添加几行来执行相同操作。
答案2
我找到了另一种适用于 QEMU、VMware 和 VirtualBox 的 packer 1.7 的方法。您可以在关机命令中删除用户。此方法假定用户具有 sudo 访问权限。
shutdown_command = "sudo su root -c \"userdel -rf packer; rm /etc/sudoers.d/90-cloud-init-users; /sbin/shutdown -hP now\""
答案3
我意识到这是一个相当老的问题,但我不喜欢使用 cronjob(或 cloud-init,或任何在图像实例化后发生的事情)的想法,我发现使用 packer 本身是一个更好的解决方案。这在 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
- 它利用 Packer 的skip_clean
选项在部分完成后跳过删除 shell 脚本inline
(鉴于fedora
用户不再存在,因此肯定会失败)。
另请注意,如果您使用打包程序打开了 SSH 代理转发,这可能会在图像中留下代理套接字的痕迹。