@@ -35,6 +35,9 @@ func EnsureSecrets(vault *files.InstallVault, config *files.RootConfig) error {
3535 if err := EnsureCephSSHKeys (vault , & config .Ceph ); err != nil {
3636 return fmt .Errorf ("ensure ceph SSH keys: %w" , err )
3737 }
38+ if err := EnsureSshWorkspaceProxyHostKey (vault ); err != nil {
39+ return fmt .Errorf ("ensure ssh workspace proxy host key: %w" , err )
40+ }
3841 if config .Postgres .Primary != nil {
3942 if err := EnsurePostgresSecrets (vault , & config .Postgres ); err != nil {
4043 return fmt .Errorf ("ensure postgres secrets: %w" , err )
@@ -328,6 +331,24 @@ func EnsureCephSSHKeys(vault *files.InstallVault, ceph *files.CephConfig) error
328331 return nil
329332}
330333
334+ // EnsureSshWorkspaceProxyHostKey generates the SSH host key for the SSH workspace proxy if not
335+ // already present in vault. Only the private key is stored (as key.pem); the matching public key
336+ // is derived by the proxy at runtime.
337+ func EnsureSshWorkspaceProxyHostKey (vault * files.InstallVault ) error {
338+ if vault .GetSecret (files .SecretSshWorkspaceProxyHostKey ) != nil {
339+ return nil
340+ }
341+ privKey , _ , err := GenerateSSHKeyPair ()
342+ if err != nil {
343+ return fmt .Errorf ("generate ssh workspace proxy host key: %w" , err )
344+ }
345+ vault .SetSecret (files.SecretEntry {
346+ Name : files .SecretSshWorkspaceProxyHostKey ,
347+ File : & files.SecretFile {Name : "key.pem" , Content : privKey },
348+ })
349+ return nil
350+ }
351+
331352// EnsurePostgresSecrets generates all postgres certificates and passwords if not already present
332353// in vault (sentinel: postgresPassword). Private keys and passwords are written to vault;
333354// cert PEMs are set on the postgres config struct for inclusion in the config YAML.
0 commit comments