summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAhmed Abdelhalim <[email protected]>2026-07-26 02:23:21 +0200
committerAhmed Abdelhalim <[email protected]>2026-07-26 02:24:38 +0200
commitbd9545a90c3a5e16046112da818afd7028a7cd22 (patch)
tree9ab501c73e980bae15fe1aae855e3048c673665b
parent2f60116a43706774f1a815d8513d0ec23e880fc2 (diff)
Change pve-lxc-ssh implementation to only inject pre-generated keys
Co-Authored-By: Claude.ai
-rw-r--r--configure.yml2
-rw-r--r--group_vars/all.ymlbin898 -> 1118 bytes
-rw-r--r--host_vars/git.home.arpa.ymlbin1009 -> 1544 bytes
-rw-r--r--host_vars/git.home.arpa.yml.example9
-rw-r--r--host_vars/proxy.home.arpa.ymlbin699 -> 1234 bytes
-rw-r--r--host_vars/proxy.home.arpa.yml.example9
-rw-r--r--roles/pve-lxc-ssh/meta/argument_specs.yml8
-rw-r--r--roles/pve-lxc-ssh/tasks/main.yml16
8 files changed, 41 insertions, 3 deletions
diff --git a/configure.yml b/configure.yml
index 647c0204..e707dfab 100644
--- a/configure.yml
+++ b/configure.yml
@@ -152,6 +152,8 @@
vars:
pve_lxc_id: "{{ hostvars[service_host].pve_lxc_id }}"
pve_lxc_ssh_port: "{{ hostvars[service_host].pve_lxc_ssh_port }}"
+ pve_lxc_ssh_private_key: "{{ hostvars[service_host].pve_lxc_ssh_private_key }}"
+ pve_lxc_ssh_public_key: "{{ hostvars[service_host].pve_lxc_ssh_public_key }}"
loop: "{{ groups['containers'] }}"
loop_control:
loop_var: "service_host"
diff --git a/group_vars/all.yml b/group_vars/all.yml
index d5a8a535..f39487b7 100644
--- a/group_vars/all.yml
+++ b/group_vars/all.yml
Binary files differ
diff --git a/host_vars/git.home.arpa.yml b/host_vars/git.home.arpa.yml
index 5dc2b143..ef0d2d6c 100644
--- a/host_vars/git.home.arpa.yml
+++ b/host_vars/git.home.arpa.yml
Binary files differ
diff --git a/host_vars/git.home.arpa.yml.example b/host_vars/git.home.arpa.yml.example
index fe14f69d..cd3a464c 100644
--- a/host_vars/git.home.arpa.yml.example
+++ b/host_vars/git.home.arpa.yml.example
@@ -13,6 +13,15 @@ pve_lxc_ip: "{{ network_ipv4_address }}/24"
pve_lxc_gateway: "{{ network_ipv4_gateway }}"
pve_lxc_dns: "{{ network_ipv4_dns }}"
pve_lxc_ssh_port: 2222
+pve_lxc_ssh_public_key: "ssh-ed25519 AAAA...fMo"
+pve_lxc_ssh_private_key: |
+ -----BEGIN OPENSSH PRIVATE KEY-----
+ b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
+ QyNTUxOQAAACAQ0GydCVLVXnXpzBxM6MbmRIDHNjC8dqZoFHgx1PiSgQAAAJi7TmCqu05g
+ qgAAAAtzc2gtZWQyNTUxOQAAACAQ0GydCVLVXnXpzBxM6MbmRIDHNjC8dqZoFHgx1PiSgQ
+ AAAEBgO+cOwV2j8gNZ/EugDk+vbi0eGrK125vRcE3FOtJJMRDQbJ0JUtVedenMHEzoxuZE
+ gMc2MLx2pmgUeDHU+JKBAAAAEm1vbGVjdWxlLXRlc3Qtb25seQECAw==
+ -----END OPENSSH PRIVATE KEY-----
cgit_hostname: "git.home.arpa"
cgit_title: "git.example.com"
diff --git a/host_vars/proxy.home.arpa.yml b/host_vars/proxy.home.arpa.yml
index 7610c7d5..55be6bee 100644
--- a/host_vars/proxy.home.arpa.yml
+++ b/host_vars/proxy.home.arpa.yml
Binary files differ
diff --git a/host_vars/proxy.home.arpa.yml.example b/host_vars/proxy.home.arpa.yml.example
index 902c38d2..9add250a 100644
--- a/host_vars/proxy.home.arpa.yml.example
+++ b/host_vars/proxy.home.arpa.yml.example
@@ -13,5 +13,14 @@ pve_lxc_ip: "{{ network_ipv4_address }}/24"
pve_lxc_gateway: "{{ network_ipv4_gateway }}"
pve_lxc_dns: "{{ network_ipv4_dns }}"
pve_lxc_ssh_port: 2222
+pve_lxc_ssh_public_key: "ssh-ed25519 AAAA...fMo"
+pve_lxc_ssh_private_key: |
+ -----BEGIN OPENSSH PRIVATE KEY-----
+ b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
+ QyNTUxOQAAACAQ0GydCVLVXnXpzBxM6MbmRIDHNjC8dqZoFHgx1PiSgQAAAJi7TmCqu05g
+ qgAAAAtzc2gtZWQyNTUxOQAAACAQ0GydCVLVXnXpzBxM6MbmRIDHNjC8dqZoFHgx1PiSgQ
+ AAAEBgO+cOwV2j8gNZ/EugDk+vbi0eGrK125vRcE3FOtJJMRDQbJ0JUtVedenMHEzoxuZE
+ gMc2MLx2pmgUeDHU+JKBAAAAEm1vbGVjdWxlLXRlc3Qtb25seQECAw==
+ -----END OPENSSH PRIVATE KEY-----
proxy_type: "caddy"
diff --git a/roles/pve-lxc-ssh/meta/argument_specs.yml b/roles/pve-lxc-ssh/meta/argument_specs.yml
index 6f03937d..5a840670 100644
--- a/roles/pve-lxc-ssh/meta/argument_specs.yml
+++ b/roles/pve-lxc-ssh/meta/argument_specs.yml
@@ -10,3 +10,11 @@ argument_specs:
type: "int"
default: 2222
description: "SSH port to configure inside the container"
+ pve_lxc_ssh_private_key:
+ type: "str"
+ required: true
+ description: "Pre-generated Ed25519 host private key (OpenSSH format), unique per container"
+ pve_lxc_ssh_public_key:
+ type: "str"
+ required: true
+ description: "Pre-generated Ed25519 host public key matching pve_lxc_ssh_private_key"
diff --git a/roles/pve-lxc-ssh/tasks/main.yml b/roles/pve-lxc-ssh/tasks/main.yml
index f5d402bc..bf29ad51 100644
--- a/roles/pve-lxc-ssh/tasks/main.yml
+++ b/roles/pve-lxc-ssh/tasks/main.yml
@@ -34,13 +34,23 @@
esac;'
changed_when: true
- - name: "Generate ssh host keys"
+ - name: "Deploy ssh host private key"
become: true
+ no_log: true
ansible.builtin.command:
cmd: >
pct exec {{ pve_lxc_id }} -- sh -c
- '[ -f /etc/ssh/ssh_host_ed25519_key ] && exit 0;
- ssh-keygen -q -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -C "" -N "";'
+ 'umask 077; cat > /etc/ssh/ssh_host_ed25519_key'
+ stdin: "{{ pve_lxc_ssh_private_key | trim }}\n"
+ changed_when: true
+
+ - name: "Deploy ssh host public key"
+ become: true
+ ansible.builtin.command:
+ cmd: >
+ pct exec {{ pve_lxc_id }} -- sh -c
+ 'cat > /etc/ssh/ssh_host_ed25519_key.pub; chmod 0644 /etc/ssh/ssh_host_ed25519_key.pub'
+ stdin: "{{ pve_lxc_ssh_public_key | trim }}\n"
changed_when: true
- name: "Render sshd_config"