我目前正在使用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,是两件事之一。
ssh
或scp
的显式AMI ID的方法似乎不起作用。closely related question使用"文件"提供类型,但我想用" shell"类型,我不知道如何使用文件和shell选项。
我该如何解决这个问题?
答案 0 :(得分:2)
您应该使用file
配置程序,例如:
"provisioners": [
{
"type": "file",
"source": "source_file",
"destination": "dest"
},
{
"type": "script",
"inline": [ "echo do something here" ]
}
]