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 上看到的许多方法的问题,比如这个相关的问题,是两件事之一。
ssh或scp不似乎工作。一个密切相关的问题使用“文件”提供类型,但我想使用“外壳”类型来执行此操作,但我不确定如何同时使用文件和外壳选项。
我该如何解决这个问题?
您应该使用file供应商,例如:
"provisioners": [
{
"type": "file",
"source": "source_file",
"destination": "dest"
},
{
"type": "script",
"inline": [ "echo do something here" ]
}
]
Run Code Online (Sandbox Code Playgroud)
请参阅文档:供应商