Skip to content

Commit 2a99b67

Browse files
committed
chg: add external data source to extract age keys via SSH
Each NixOS droplet's SSH host ed25519 key gets converted to an age public key using ssh-to-age over SSH, enabling sops-nix secret management per host.
1 parent da6245c commit 2a99b67

3 files changed

Lines changed: 52 additions & 1 deletion

File tree

IaC/.terraform.lock.hcl

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

IaC/age_keys.tf

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
locals {
2+
droplets = {
3+
website = digitalocean_droplet.website.ipv4_address
4+
vpn = digitalocean_droplet.vpn.ipv4_address
5+
znc = digitalocean_droplet.znc.ipv4_address
6+
}
7+
}
8+
9+
data "external" "age_key" {
10+
for_each = local.droplets
11+
12+
program = [
13+
"bash", "-c",
14+
<<-EOT
15+
key=$(ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=10 root@${each.value} \
16+
"nix-shell -p ssh-to-age --run 'cat /etc/ssh/ssh_host_ed25519_key.pub | ssh-to-age'" 2>/dev/null)
17+
echo "{\"age_key\": \"$key\"}"
18+
EOT
19+
]
20+
}
21+
22+
output "age_keys" {
23+
description = "Age public keys derived from each droplet's SSH host key"
24+
value = {
25+
for name, _ in local.droplets : name => data.external.age_key[name].result.age_key
26+
}
27+
}

IaC/provider.tf

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
terraform {
22
required_providers {
33
digitalocean = {
4-
source = "digitalocean/digitalocean"
4+
source = "digitalocean/digitalocean"
5+
version = "~> 2.0"
6+
}
7+
external = {
8+
source = "hashicorp/external"
59
version = "~> 2.0"
610
}
711
}

0 commit comments

Comments
 (0)