mirror of
https://github.com/kmein/niveum
synced 2026-03-16 10:11:08 +01:00
tor: enable ssh
This commit is contained in:
@@ -60,6 +60,7 @@
|
||||
user = "kfm";
|
||||
port = pkgs.lib.niveum.sshPort;
|
||||
};
|
||||
"*.onion".proxyCommand = "nc -xlocalhost:9050 %h %p";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{ pkgs, ... }:
|
||||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
sshPort = pkgs.lib.niveum.machines.${config.networking.hostName}.sshPort;
|
||||
in
|
||||
{
|
||||
services.tor.enable = true;
|
||||
services.tor.client.enable = true;
|
||||
@@ -6,4 +9,15 @@
|
||||
pkgs.tor
|
||||
pkgs.torsocks
|
||||
];
|
||||
|
||||
services.tor.relay.onionServices = {
|
||||
"ssh" = {
|
||||
version = 3;
|
||||
map = [{
|
||||
port = sshPort;
|
||||
target.port = sshPort;
|
||||
target.addr = "127.0.0.1";
|
||||
}];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -320,6 +320,7 @@
|
||||
swallow = prev.callPackage packages/swallow.nix { };
|
||||
tocharian-font = prev.callPackage packages/tocharian-font.nix { };
|
||||
ttspaste = prev.callPackage packages/ttspaste.nix { };
|
||||
niveum-ssh = prev.callPackage packages/niveum-ssh.nix { };
|
||||
unicodmenu = prev.callPackage packages/unicodmenu.nix { };
|
||||
vg = prev.callPackage packages/vg.nix { };
|
||||
vim-kmein = prev.callPackage packages/vim-kmein { };
|
||||
|
||||
@@ -81,6 +81,9 @@ in
|
||||
myceliumAddresses = lib.mapAttrs (_: v: v.mycelium.ipv6) (
|
||||
lib.filterAttrs (_: v: v ? "mycelium") machines
|
||||
);
|
||||
torAddresses = lib.mapAttrs (_: v: v.torAddress) (
|
||||
lib.filterAttrs (_: v: v ? "torAddress") machines
|
||||
);
|
||||
syncthingIds = lib.mapAttrs (_: v: { id = v.syncthingId; }) (
|
||||
lib.filterAttrs (_: v: v ? "syncthingId") machines
|
||||
);
|
||||
|
||||
@@ -31,6 +31,7 @@ in
|
||||
ipv6 = "42:0:3c46:aa73:82b0:14d7:7bf8:bf2";
|
||||
ipv4 = "10.243.2.77";
|
||||
};
|
||||
torAddress = "uoe7poyeliuaudf4x5nrwvs3t55ldcdpfqfyeqsadbs77ttjx7upquyd.onion";
|
||||
mycelium.ipv6 = "463:a0d4:daa3:aa8d:a9b1:744a:46a5:7a80";
|
||||
inherit sshPort;
|
||||
system = "x86_64-linux";
|
||||
@@ -45,6 +46,7 @@ in
|
||||
ipv6 = "42:0:3c46:2c8b:a564:1213:9fb4:1bc4";
|
||||
};
|
||||
mycelium.ipv6 = "5bf:d60e:bebf:5163:f495:8787:880c:6d41";
|
||||
torAddress = "ll3k2akcpwuo562hlbr452yvzhi6kmpjzcnjgw6z4nege2yftspgjjad.onion";
|
||||
inherit sshPort;
|
||||
system = "aarch64-linux";
|
||||
};
|
||||
@@ -54,6 +56,7 @@ in
|
||||
ipv6 = "42:0:3c46:156e:10b6:3bd6:6e82:b2cd";
|
||||
};
|
||||
mycelium.ipv6 = "5c5:49e0:7793:f017:59e1:1715:9e0e:3fc8";
|
||||
torAddress = "hurgxlejplh7lj2hyaj4gk2fuearibst6axdxl2ekfohiivyiab3gkad.onion";
|
||||
inherit sshPort;
|
||||
system = "x86_64-linux";
|
||||
};
|
||||
@@ -64,6 +67,7 @@ in
|
||||
ipv6 = "42:0:3c46:f7a9:1f0a:1b2b:822a:6050";
|
||||
};
|
||||
mycelium.ipv6 = "43f:ad4f:fa67:d9f7:8a56:713c:7418:164b";
|
||||
torAddress = "gnaoacvkhovpllpiwi4a4mbnx4awpdcufwtsj365tiweybdeec7thuyd.onion";
|
||||
inherit sshPort;
|
||||
system = "x86_64-linux";
|
||||
};
|
||||
|
||||
66
packages/niveum-ssh.nix
Normal file
66
packages/niveum-ssh.nix
Normal file
@@ -0,0 +1,66 @@
|
||||
{
|
||||
symlinkJoin,
|
||||
writers,
|
||||
lib,
|
||||
netcat,
|
||||
openssh,
|
||||
}:
|
||||
let
|
||||
inherit (lib.niveum) machines;
|
||||
sshableMachines = lib.filterAttrs (name: value: value ? "sshPort") machines;
|
||||
systemAddresses =
|
||||
system:
|
||||
lib.optionals (system ? "internalIp") [ system.internalIp ]
|
||||
++ lib.optionals (system ? "externalIp") [ system.externalIp ]
|
||||
++ lib.optionals (system ? "retiolum") [
|
||||
system.retiolum.ipv6
|
||||
system.retiolum.ipv4
|
||||
]
|
||||
++ lib.optionals (system ? "mycelium") [ system.mycelium.ipv6 ]
|
||||
++ lib.optionals (system ? "torAddress") [ system.torAddress ];
|
||||
addresses = lib.listToAttrs (
|
||||
map (name: {
|
||||
inherit name;
|
||||
value = systemAddresses (machines.${name});
|
||||
}) (builtins.attrNames sshableMachines)
|
||||
);
|
||||
in
|
||||
symlinkJoin {
|
||||
name = "niveum-ssh";
|
||||
paths = lib.mapAttrsToList (
|
||||
hostname: _:
|
||||
writers.writeBashBin "niveum-ssh-${hostname}" ''
|
||||
targets=(
|
||||
${lib.concatStringsSep " " (map (addr: "\"root@${addr}\"") addresses.${hostname})}
|
||||
)
|
||||
|
||||
for target in "''${targets[@]}"; do
|
||||
host="$(echo $target | cut -d'@' -f2)"
|
||||
|
||||
# Check if it's an onion address
|
||||
if [[ "$host" == *.onion ]]; then
|
||||
# For onion addresses, try connecting through Tor
|
||||
if ${netcat}/bin/nc -z localhost 9050 2>/dev/null; then
|
||||
echo "Trying $target via Tor..." >&2
|
||||
if echo | ${netcat}/bin/nc -x localhost:9050 -w 5 "$host" ${
|
||||
toString machines.${hostname}.sshPort
|
||||
} 2>/dev/null; then
|
||||
exec ${openssh}/bin/ssh -p ${toString machines.${hostname}.sshPort} \
|
||||
-o ProxyCommand="${netcat}/bin/nc -x localhost:9050 %h %p" \
|
||||
"$target" "$@"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
# For regular addresses, try direct connection
|
||||
echo "Trying $target..." >&2
|
||||
if ${netcat}/bin/nc -z -w 2 "$host" ${toString machines.${hostname}.sshPort} 2>/dev/null; then
|
||||
exec ${openssh}/bin/ssh -p ${toString machines.${hostname}.sshPort} "$target" "$@"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
echo "No reachable target found for ${hostname}" >&2
|
||||
exit 1
|
||||
''
|
||||
) sshableMachines;
|
||||
}
|
||||
Reference in New Issue
Block a user