You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform的DigitalOcean提供商中使用已有SSH密钥

在Terraform中为DigitalOcean Droplet添加已有SSH密钥的正确方法

核心问题在于混淆了Terraform中resource和data块的作用:

  • resource用来创建/管理新资源,用它定义已存在的SSH密钥时,Terraform会尝试重复创建,触发DigitalOcean的重复密钥报错。
  • data用来读取已存在的资源,仅查询资源属性(比如ID),不会修改远程资源,这才是引用已有SSH密钥的正确方式。

具体步骤

  1. 声明data块读取已有密钥
    在配置文件(如root.tf)中,为每个已存在的SSH密钥添加digitalocean_ssh_key数据源块,确保名称和DO账户中存储的完全一致:
data "digitalocean_ssh_key" "mySshKey" {
  name = "mySshKey" # 替换为你个人密钥在DO中的名称
}

data "digitalocean_ssh_key" "uncleBob" {
  name = "uncleBob" # 替换为DO中已存在的uncleBob密钥名称
}
  1. 在Droplet配置中引用数据源ID
    直接在Droplet的ssh_keys列表中引用上述data块的ID即可:
resource "digitalocean_droplet" "bla" {
  name   = "blabla"
  size   = "s-2vcpu-4gb"
  image  = "debian-10-x64"
  region = "ams2"
  ipv6   = true
  ssh_keys = [
    data.digitalocean_ssh_key.mySshKey.id,
    data.digitalocean_ssh_key.uncleBob.id,
  ]
}

注意事项

  • 数据源中的name字段大小写敏感,必须和DO控制台中显示的密钥名称完全匹配。
  • 若不确定密钥名称,可通过DO CLI命令doctl compute ssh-key list查看所有密钥的名称和ID。
  • 确保Terraform已正确配置DigitalOcean认证(通过环境变量DO_TOKEN或provider配置),否则数据源无法读取远程密钥信息。

内容的提问来源于stack exchange,提问作者wick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 21:22:54