1{ lib, pkgs, ... }:
2{
3 name = "endlessh";
4 meta.maintainers = with lib.maintainers; [ azahi ];
5
6 nodes = {
7 server =
8 { ... }:
9 {
10 services.endlessh = {
11 enable = true;
12 openFirewall = true;
13 };
14
15 specialisation = {
16 unprivileged.configuration.services.endlessh.port = 2222;
17
18 privileged.configuration.services.endlessh.port = 22;
19 };
20 };
21
22 client =
23 { pkgs, ... }:
24 {
25 environment.systemPackages = with pkgs; [
26 curl
27 netcat
28 ];
29 };
30 };
31
32 testScript = ''
33 def activate_specialisation(name: str):
34 server.succeed(f"/run/booted-system/specialisation/{name}/bin/switch-to-configuration test >&2")
35
36 start_all()
37
38 with subtest("Unprivileged"):
39 activate_specialisation("unprivileged")
40 server.wait_for_unit("endlessh.service")
41 server.wait_for_open_port(2222)
42 client.succeed("nc -dvW5 server 2222")
43
44 with subtest("Privileged"):
45 activate_specialisation("privileged")
46 server.wait_for_unit("endlessh.service")
47 server.wait_for_open_port(22)
48 client.succeed("nc -dvW5 server 22")
49 '';
50}