我有一个使用 Terraform 和 Openstack 的旧设置。通过 Terraform 将有密钥对注入 Openstack 实例:
resource "openstack_compute_instance_v2" "bamboo_agent" {
name = var.agents[count.index].name
image_name = "${var.image}"
flavor_name = "${var.flavor}"
key_pair = "${openstack_compute_keypair_v2.bamboo_ssh[0].name}"
user_data = "${file("scripts/init_instance.cfg")}"
network {
port = "${openstack_networking_port_v2.bamboo[count.index].id}"
}
count= length(var.agents)
}
在scripts/init_instance.cfg中将添加键:
ssh_authorized_keys:
- ssh-rsa ...
AFAIK 两种方法都在做同样的事情,对吧?我需要两者吗?删除其中一个还不够吗?
我想删除密钥对并将密钥添加ssh_authorized_keys
到默认帐户并添加users:
到 cloud-init 中的其他帐户。
实际上,它们应该做同样的事情,但据我所知,它们不会同时应用。
cloud-init 在用于创建新实例的映像/模板中运行,并将在首次启动时使用实例特定设置自定义模板。Cloud-init 很早就调用 OpenStack 元数据提供程序,并将下载元数据,例如 OpenStack ssh 密钥和您的 user-data/cloud-config 脚本
scripts/init_instance.cfg
我认为首先应用来自 OpenStack 的 SSH 密钥。
由于它会在密钥被接受之前验证密钥,因此依赖 OpenStack 部署密钥应该非常健壮和可靠。但是 OpenStack 有一个限制,它只允许您分配一个密钥来部署到一个实例。
像您这样的用户数据/云配置脚本
scripts/init_instance.cfg
是 cloud-init 执行的最后一件事。cloud-config 没有一键限制,允许您分配多个 ssh 密钥并执行许多其他配置任务。
如果您的cloud-config脚本包含无效的 yaml 并且完全失败,则由 OpenStack 部署密钥可能会有所帮助;然后你应该仍然有一个可以访问和调试的实例......