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

sigwle7e  于 2023-05-01  发布在  Shell
关注(0)|答案(1)|浏览(100)

我目前正在使用打包器从给定的配置生成定制的图像。打包程序.json文件包括在this packer tutorial中描述的规定。
我没有在那里输入命令,而是使用shell选项,在这个选项中我可以编写一堆sudo apt-get install命令来定制图像。
问题是我需要从我拥有的电脑上复制一个文件到图像上。需要说明的是,我拥有的计算机也是我运行命令packer build example.json的计算机。
在shell脚本中,如何进行安全复制,以便**从新创建的映像的Angular *,映像可以安全地将文件从我的计算机复制到自己, 而 * 无需输入密码?这是一个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使用“file”提供类型,但我想使用“shell”类型,我不确定如何同时使用file和shell选项。
我该如何解决这个问题?

rjzwgtxy

rjzwgtxy1#

您应该使用file调配程序,类似于:

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

参见documentation: provisioners "file"

相关问题