modules: misc: Key generation should support other types

I think these short keys are sketchy, but what do I know.
This commit is contained in:
James Shubin
2025-06-24 20:05:20 -04:00
parent 54380a2a1f
commit f778008929

View File

@@ -41,19 +41,26 @@ import "world/collect"
# key doesn't exist. # key doesn't exist.
# TODO: add more parameters such as key size and type in the future # TODO: add more parameters such as key size and type in the future
class ssh_keygen($user) { class ssh_keygen($user) {
include ssh_keygen_type($user, "ed25519")
}
# $type is rsa or ed25519
class ssh_keygen_type($user, $type) {
panic($user == "") # panic if $user is empty panic($user == "") # panic if $user is empty
panic($type == "") # panic if $type is empty
panic($type != "rsa" and $type != "ed25519") # panic if $type is invalid
$p = os.expand_home("~${user}/") # eg: ~james/ $p = os.expand_home("~${user}/") # eg: ~james/
exec "ssh-keygen-${user}" { exec "ssh-keygen-${user}" {
cmd => "/usr/bin/ssh-keygen", cmd => "/usr/bin/ssh-keygen",
args => [ args => [
"-t", "rsa", # type "-t", "${type}", # type
"-f", "${p}.ssh/id_rsa", # private key file "-f", "${p}.ssh/id_${type}", # private key file
"-N", "", # empty password "-N", "", # empty password
], ],
creates => "${p}.ssh/id_rsa", creates => "${p}.ssh/id_${type}",
user => $user, user => $user,
Before => File["${p}.ssh/id_rsa"], Before => File["${p}.ssh/id_${type}"],
} }
# This also serves as a "handle" so that other resources can depend on # This also serves as a "handle" so that other resources can depend on
# this file getting created before they run. # this file getting created before they run.
@@ -62,15 +69,17 @@ class ssh_keygen($user) {
mode => "u=rwx,go=", mode => "u=rwx,go=",
owner => $user, owner => $user,
} }
file "${p}.ssh/id_rsa" { file "${p}.ssh/id_${type}" {
mode => "u=rw,go=", mode => "u=rw,go=",
owner => $user, owner => $user,
Depend => File["${p}.ssh/"],
} }
line "${user}@${hostname}" { line "${user}@${hostname}" {
#file => "", # specified on collect #file => "", # specified on collect
#state => "exists", # specified on collect #state => "exists", # specified on collect
content => os.readfilewait("${p}.ssh/id_rsa.pub"), content => os.readfilewait("${p}.ssh/id_${type}.pub"),
Meta:hidden => true, Meta:hidden => true,
Meta:export => ["*",], Meta:export => ["*",],