我是否需要将 Openstack 的密钥对和 cloud-init 的 ssh_authorized_keys 一起使用?

我是否需要将 Openstack 的密钥对和 cloud-init 的 ssh_authorized_keys 一起使用?

我有一个使用 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)
}

并且在脚本/init_instance.cfg将会添加以下键:

ssh_authorized_keys:
  - ssh-rsa ...

据我所知,这两种方法的效果都一样,对吧?我需要两种方法吗?删除其中一个还不够吗?

我想删除密钥对并通过ssh_authorized_keys默认帐户添加密钥,并通过users:cloud-init 中的其他帐户添加密钥。

答案1

实际上他们应该做同样的事情,但据我所知他们不会同时应用。

cloud-init 在用于创建新实例的镜像/模板中运行,并在首次启动时使用实例特定设置自定义模板。Cloud-init 很早就调用 OpenStack 元数据提供程序,并下载元数据,例如 OpenStack ssh 密钥和您的用户数据/云配置脚本scripts/init_instance.cfg

我认为将首先应用来自 OpenStack 的 SSH 密钥。

由于它在接受密钥之前会验证密钥,因此依靠 OpenStack 部署密钥应该非常强大和可靠。但是 OpenStack 有一个限制,即它只允许您分配一个密钥来部署到实例。

像您这样的用户数据/云配置脚本scripts/init_instance.cfg是 cloud-init 最后执行的脚本。cloud
-config 没有一个密钥的限制,并且允许您分配多个 ssh 密钥并执行许多其他配置任务。

OpenStack 部署密钥可能会有所帮助,以防万一云配置脚本包含无效的 yaml 并且完全失败;那么您仍然应该有一个可以访问和调试的实例......

相关内容