nixos/sshd: enable root ssh authorized_keys provisioning

This enables provisioning of root ssh keys with systemd credentials
(e.g. passed in via smbios strings or kernel params)

Changed files
+6 -3
nixos
modules
services
networking
ssh
tests
+6
nixos/modules/services/networking/ssh/sshd.nix
···
"ssh/sshd_config".source = sshconf;
};
+
systemd.tmpfiles.settings."ssh-root-provision" = {
+
"/root"."d-" = { user = "root"; group = ":root"; mode = ":700"; };
+
"/root/.ssh"."d-" = { user = "root"; group = ":root"; mode = ":700"; };
+
"/root/.ssh/authorized_keys"."f^" = { user = "root"; group = ":root"; mode = ":600"; argument = "ssh.authorized_keys.root"; };
+
};
+
systemd =
{
sockets.sshd = lib.mkIf cfg.startWhenNeeded {
-3
nixos/tests/openssh.nix
···
server_lazy_socket.wait_for_unit("sshd.socket", timeout=30)
with subtest("manual-authkey"):
-
client.succeed("mkdir -m 700 /root/.ssh")
client.succeed(
'${pkgs.openssh}/bin/ssh-keygen -t ed25519 -f /root/.ssh/id_ed25519 -N ""'
)
···
public_key = public_key.strip()
client.succeed("chmod 600 /root/.ssh/id_ed25519")
-
server.succeed("mkdir -m 700 /root/.ssh")
server.succeed("echo '{}' > /root/.ssh/authorized_keys".format(public_key))
-
server_lazy.succeed("mkdir -m 700 /root/.ssh")
server_lazy.succeed("echo '{}' > /root/.ssh/authorized_keys".format(public_key))
client.wait_for_unit("network.target")