Vagrant Packer.io为VirtualBox和生产构建器提供一致的用户流

Vagrant Packer.io为VirtualBox和生产构建器提供一致的用户流,vagrant,virtualbox,digital-ocean,provisioning,packer,Vagrant,Virtualbox,Digital Ocean,Provisioning,Packer,我一直在使用a来构建vm,甚至为专用硬件定制iso构建,但当我开始考虑与a共享脚本时,我注意到了不一致性 我可以在网上找到的每一个示例都会使用非root用户ssh到框中进行配置。以下是构建器页面上给出的示例: 请注意,通过使用sudo提升执行shutdown的权限,即使是shutdown\u命令也会为此进行调整 如果要以提升的权限运行脚本,还需要修改execute_命令: "execute_command": "echo '{{ user `my_user_pass` }}'|sudo -S s

我一直在使用a来构建vm,甚至为专用硬件定制iso构建,但当我开始考虑与a共享脚本时,我注意到了不一致性

我可以在网上找到的每一个示例都会使用非root用户ssh到框中进行配置。以下是构建器页面上给出的示例:

请注意,通过使用
sudo
提升执行
shutdown
的权限,即使是
shutdown\u命令
也会为此进行调整

如果要以提升的权限运行脚本,还需要修改
execute_命令

"execute_command": "echo '{{ user `my_user_pass` }}'|sudo -S sh '{{.Path}}'",
对于我使用

这对我来说是有意义的,因为我确信许多云提供商在默认情况下不会创建辅助用户。我知道允许您添加自定义配置脚本/元数据,因此这里提供一致性的一种方法是使用元数据创建辅助非根用户。然而,我不喜欢这种方法,因为它在提供者之间不是跨平台的,而且元数据在创建之后仍然可以在盒子上使用

如果只使用根用户来创建应用程序,不是更好吗

我看到的大多数例子都是Ubuntu,因此使用一个文件来自动安装iso。他们还倾向于硬编码
vagrant
作为文件中的用户和密码

我认为最好跳过在呈现文件中创建辅助用户,为sudo用户设置临时密码,并在脚本中执行所有配置,并通过禁用根密码(以及可能的所有密码和选择证书身份验证)来结束。这允许您使用变量创建辅助用户,并一致地处理这两种环境

以下是演示文稿的一些相关部分:

### Account setup
# Skip creation of a root account (normal user account will be able to
# use sudo). The default is false; preseed this to true if you want to set
# a root password.
#d-i passwd/root-login boolean false
# Alternatively, to skip creation of a normal user account.
#d-i passwd/make-user boolean false

# Root password, either in clear text
#d-i passwd/root-password password r00tme
#d-i passwd/root-password-again password r00tme
# or encrypted using a crypt(3)  hash.
#d-i passwd/root-password-crypted password [crypt(3) hash]
实际上,我确实在野外找到了一个示例,它不仅使用root登录,而且通过传入
boot\u命令
,也没有将其包含在呈现的文件中:

"passwd/root-password=\"{{user `root_password`}}\" passwd/root-password-again=\"{{user `root_password`}}\" ",
这将允许您避免将temp root pass放入源代码中,以避免在配置时有人试图使用它来ssh到您的机器中

这种方法有什么缺点吗?我很好奇是否有人可以分享一些用于测试和生产的示例打包机设置

谢谢

### Account setup
# Skip creation of a root account (normal user account will be able to
# use sudo). The default is false; preseed this to true if you want to set
# a root password.
#d-i passwd/root-login boolean false
# Alternatively, to skip creation of a normal user account.
#d-i passwd/make-user boolean false

# Root password, either in clear text
#d-i passwd/root-password password r00tme
#d-i passwd/root-password-again password r00tme
# or encrypted using a crypt(3)  hash.
#d-i passwd/root-password-crypted password [crypt(3) hash]
"passwd/root-password=\"{{user `root_password`}}\" passwd/root-password-again=\"{{user `root_password`}}\" ",