[英]packer ssh_private_key_file is invalid
我正在尝试在打包程序中使用 OpenStack 配置程序 API 来克隆一个实例。 到目前为止,我已经开发了脚本:
{
"variables": {
},
"description": "This will create the baked vm images for any environment from dev to prod.",
"builders": [
{
"type": "openstack",
"identity_endpoint": "http://192.168.10.10:5000/v3",
"tenant_name": "admin",
"domain_name": "Default",
"username": "admin",
"password": "****************",
"region": "RegionOne",
"image_name": "cirros",
"flavor": "m1.tiny",
"insecure": "true",
"source_image": "0f9b69ee-4e9f-4807-a7c4-6a58355c37b1",
"communicator": "ssh",
"ssh_keypair_name": "******************",
"ssh_private_key_file": "~/.ssh/id_rsa",
"ssh_username": "root"
}
],
"provisioners": [
{
"type": "shell",
"inline": [
"sleep 60"
]
}
]
}
但是在使用 packer build script.json 运行脚本时,我收到以下错误:
User:packer User$ packer build script.json
openstack output will be in this color.
1 error(s) occurred:
* ssh_private_key_file is invalid: stat ~/.ssh/id_rsa: no such file or directory
我的 id_rsa 是一个以以下开头和结尾的文件:
------BEGIN RSA PRIVATE KEY------
key
------END RSA PRIVATE KEY--------
我认为这意味着它是 PEM 相关文件,所以我发现这很奇怪,所以我制作了 PACKER_LOG 的粘贴箱: http ://pastebin.com/sgUPRkGs
初步分析告诉我唯一的错误是缺少 packerconfig 文件。 谷歌搜索时,顶级搜索告诉我它是否没有找到它的默认值。 这就是它不起作用的原因吗?
任何帮助都会有很大帮助。 显然在 github 支持页面( https://github.com/mitchellh/packer/issues )上也有类似的问题,但我不明白发布的一些解决方案以及它们是否适用于我。
我尽量提供信息。 很高兴在我能提供的地方提供任何信息!!
谢谢。
* ssh_private_key_file is invalid: stat ~/.ssh/id_rsa: no such file or directory
“~”字符对于操作系统来说并不特殊。 它仅对 shell 和某些其他选择将其解释为引用您的主目录的程序而言是特殊的。
看来 OpenStack 并没有将“~”视为特殊的,它正在寻找一个具有字面路径名“~/.ssh/id_rsa”的密钥文件。 它失败了,因为它找不到具有该文字路径名的密钥文件。
更新 ssh_private_key_file 条目以列出密钥文件的实际路径名:
"ssh_private_key_file": "/home/someuser/.ssh/id_rsa",
当然,您还应该确保密钥文件确实存在于您指定的位置。
必须在这里留下一个帖子,因为这只是让我有点……我在~/.ssh/id_rsa
使用了一个变量,然后我将其更改为使用完整路径,当我这样做时……我在变量值的末尾有一个空格通过 Makefile 从命令行传入,导致此错误。 希望这可以节省一些时间。
肯斯特的回答让您超越了最初的问题,但从您的评论中可以看出您仍然陷入困境。
根据我对您评论的回复,Packer 似乎不支持提供密码,但是您可以告诉它向正在运行的SSH Agent
询问解密密钥,如果在加载密钥时提供了正确的密码。 这应该允许您使用 Packer 使用保护 SSH 密钥进行构建,只要您在尝试构建之前将其加载到 SSH 代理中即可。
https://www.packer.io/docs/templates/communicator.html#ssh_agent_auth
SSH 通信器通过 SSH 连接到主机。 如果您在运行 Packer 的主机上配置了 SSH 代理,并且在通信器配置中启用了 SSH 代理身份验证,Packer 将自动将 SSH 代理转发到远程主机。
SSH 通信器具有以下选项:
ssh_agent_auth (boolean) - 如果为 true,本地 SSH 代理将用于验证与远程主机的连接。 默认为假。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.