使用packer将文件从主机复制到生成的映像,无需密码

时间:2017-05-30 02:58:37

标签: shell ssh amazon-ec2 scp packer

我目前正在使用packer从给定配置生成自定义图像。打包器.json文件包含this packer tutorial中描述的条款。

我没有在那里输入命令,而是使用shell选项,我可以在其中编写一堆sudo apt-get install命令来自定义图像。

问题是我需要将文件从我拥有的计算机复制到图像中。要清楚,我拥有的计算机也是我运行命令packer build example.json的计算机。

在shell脚本中,如何进行安全复制,以便从新创建的图像的角度来看,图像可以安全地将文件从我的计算机复制到自身,没有必须输入密码?这是一个shell脚本,所以如果我愿意,我就无法输入。

我明白为了避免输入密码,我需要公钥/私钥验证。在shell脚本中,我有:

sudo ssh-keygen -t rsa -b 2048
sudo scp ~/.ssh/id_rsa.pub user@example.com:/home/user/.ssh/uploaded_key.pub
sudo ssh user@example.com "echo `cat ~/.ssh/uploaded_key.pub` >> ~/.ssh/authorized_keys"

(取自the example here和其他地方。我对此的理解是生成的图像正在运行这些命令。)

我在StackOverflow上看到的这个和许多方法的问题,例如this related question,是两件事之一。

  • 此公共/私有身份验证发生的第一次时间,似乎需要密码。但是,这完全是在shell脚本中完成的,因此我不知道如何避免它。
  • packer会动态生成这些图片,因此其他要求我输入sshscp的显式AMI ID的方法似乎不起作用。

closely related question使用"文件"提供类型,但我想用" shell"类型,我不知道如何使用文件和shell选项。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您应该使用file配置程序,例如:

"provisioners": [
  {
    "type": "file",
    "source": "source_file",
    "destination": "dest"
  },
  {
    "type": "script",
    "inline": [ "echo do something here" ]
  }
]

请参阅documentation: provisioners