1
Fork 0
satellite/hosts/nixos/common/global/openssh.nix
2023-01-10 02:38:06 +01:00

52 lines
1.2 KiB
Nix

# This setups a SSH server.
{ outputs, config, lib, ... }:
let
# Record containing all the hosts
hosts = outputs.nixosConfigurations;
# Name of the current hostname
hostname = config.networking.hostName;
# Function from hostname to relative path to public ssh key
pubKey = host: ../../${host}/ssh_host_ed25519_key.pub;
in
{
services.openssh = {
enable = true;
# Forbid root login through SSH.
permitRootLogin = "no";
# Use keys only. Remove if you want to SSH using password (not recommended)
passwordAuthentication = false;
# Automatically remove stale sockets
extraConfig = ''
StreamLocalBindUnlink yes
'';
# TODO: look into what this does
# Allow forwarding ports to everywhere
gatewayPorts = "clientspecified";
# Generate ssh key
hostKeys = [{
path = "/persist/etc/ssh/ssh_host_ed25519_key";
type = "ed25519";
}];
};
# Passwordless sudo when SSH'ing with keys
security.pam.enableSSHAgentAuth = true;
# Add each host in this repo to the knownHosts list
programs.ssh = {
knownHosts = builtins.mapAttrs
(name: _: {
publicKeyFile = pubKey name;
extraHostNames = lib.optional (name == hostname) "localhost";
})
hosts;
};
}