使用打包器将文件从主机复制到生成的图像而无需密码

Com*_*ist 4 ssh shell scp amazon-ec2 packer

我目前正在使用打包程序从给定的配置生成自定义图像。打包.json程序文件包括本打包程序教程中描述的规定。

我没有在那里输入命令,而是使用了 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"
Run Code Online (Sandbox Code Playgroud)

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

这个问题和我在 StackOverflow 上看到的许多方法的问题,比如这个相关的问题,是两件事之一。

  • 第一时间这个公钥/私钥认证情况,好像需要密码。但是,这完全是在 shell 脚本中完成的,所以我不知道如何避免它。
  • 封隔器生成的飞行这些图像,需要我明确的AMI的ID为输入所以其他方法sshscp不似乎工作。

一个密切相关的问题使用“文件”提供类型,但我想使用“外壳”类型来执行此操作,但我不确定如何同时使用文件和外壳选项。

我该如何解决这个问题?

Ric*_*sen 7

您应该使用file供应商,例如:

"provisioners": [
  {
    "type": "file",
    "source": "source_file",
    "destination": "dest"
  },
  {
    "type": "script",
    "inline": [ "echo do something here" ]
  }
]
Run Code Online (Sandbox Code Playgroud)

请参阅文档:供应商