diff options
| author | Daiderd Jordan <daiderd@gmail.com> | 2019-07-02 19:11:24 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-07-02 19:11:24 +0200 |
| commit | 2fce9974b6ad197682189d4978d77d122cb0ca3f (patch) | |
| tree | 77c96aad57e4ca2cfe2bf68e60212f2eee62c657 /modules | |
| parent | 2ee34a1d24a6bd5f0415946ab40ab24da21f9019 (diff) | |
| parent | 26c6e5f758b86f85dd9f9f46e484ed5fcab2147f (diff) | |
Merge pull request #147 from eraserhd/autossh
port autossh service from nixos
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/module-list.nix | 1 | ||||
| -rw-r--r-- | modules/services/autossh.nix | 106 |
2 files changed, 107 insertions, 0 deletions
diff --git a/modules/module-list.nix b/modules/module-list.nix index 04ddd5b..0a07f11 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -30,6 +30,7 @@ ./fonts ./launchd ./services/activate-system + ./services/autossh.nix ./services/buildkite-agent.nix ./services/chunkwm.nix ./services/emacs.nix diff --git a/modules/services/autossh.nix b/modules/services/autossh.nix new file mode 100644 index 0000000..8c5cd5c --- /dev/null +++ b/modules/services/autossh.nix @@ -0,0 +1,106 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.services.autossh; + +in + +{ + + ###### interface + + options = { + + services.autossh = { + + sessions = mkOption { + type = types.listOf (types.submodule { + options = { + name = mkOption { + type = types.string; + example = "socks-peer"; + description = "Name of the local AutoSSH session"; + }; + user = mkOption { + type = types.string; + example = "bill"; + description = "Name of the user the AutoSSH session should run as"; + }; + monitoringPort = mkOption { + type = types.int; + default = 0; + example = 20000; + description = '' + Port to be used by AutoSSH for peer monitoring. Note, that + AutoSSH also uses mport+1. Value of 0 disables the keep-alive + style monitoring + ''; + }; + extraArguments = mkOption { + type = types.string; + example = "-N -D4343 bill@socks.example.net"; + description = '' + Arguments to be passed to AutoSSH and retransmitted to SSH + process. Some meaningful options include -N (don't run remote + command), -D (open SOCKS proxy on local port), -R (forward + remote port), -L (forward local port), -v (Enable debug). Check + ssh manual for the complete list. + ''; + }; + }; + }); + + default = []; + description = '' + List of AutoSSH sessions to start as systemd services. Each service is + named 'autossh-{session.name}'. + ''; + + example = [ + { + name="socks-peer"; + user="bill"; + monitoringPort = 20000; + extraArguments="-N -D4343 billremote@socks.host.net"; + } + ]; + + }; + }; + + }; + + ###### implementation + + config = mkIf (cfg.sessions != []) { + + launchd.daemons = + lib.fold ( s : acc : acc // + { + "autossh-${s.name}" = + let + mport = if s ? monitoringPort then s.monitoringPort else 0; + in + { + # To be able to start the service with no network connection + environment.AUTOSSH_GATETIME="0"; + + # How often AutoSSH checks the network, in seconds + environment.AUTOSSH_POLL="30"; + + command = "${pkgs.autossh}/bin/autossh -M ${toString mport} ${s.extraArguments}"; + + serviceConfig = { + KeepAlive = true; + UserName = "${s.user}"; + }; + }; + }) {} cfg.sessions; + + environment.systemPackages = [ pkgs.autossh ]; + + }; +} |
