From 6ee385ce9327292bfd3da570b27ea65d2a1f8ca1 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Sat, 24 Oct 2026 15:08:11 -0400 Subject: [PATCH] feat(mac): tunnel SSH inverse autoreparant et cle du Mac acceptee ExitOnForwardFailure=yes sur l'autossh du Mac : un forward rate (port deja pris, sshd pas encore pret au boot) ne laisse plus une session inutile, launchd reessaie. La cle du Mac (marc@Air-de-Marc) est autorisee sur tower et sur le deck : ssh tower et ssh deck passent par rack en ProxyJump. --- modules/home-mac/autossh/default.nix | 11 ++++++++++- profiles/deck/configuration.nix | 7 +++++++ profiles/tower/configuration.nix | 9 ++++++--- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/modules/home-mac/autossh/default.nix b/modules/home-mac/autossh/default.nix index c2d67f2..549f548 100644 --- a/modules/home-mac/autossh/default.nix +++ b/modules/home-mac/autossh/default.nix @@ -1,4 +1,10 @@ -# profiles/macos/configuration.nix ou un module dédié +# Tunnel SSH inverse permanent Mac -> rack (VPS) : expose le sshd du Mac sur +# 127.0.0.1:2223 du VPS (GatewayPorts no : jamais exposé publiquement). +# Importé par profiles/macos/configuration.nix (module nix-darwin) ; la clé +# du Mac (marc@Air-de-Marc) est déjà autorisée pour root@rack. +# Depuis tower (alias `mac` dans ~/.ssh/config de hermes) : +# ssh -J rack -p 2223 marc@localhost +# Nécessite Remote Login activé (services.openssh.enable dans le profil). { pkgs, ... }: { environment.systemPackages = [ pkgs.autossh ]; @@ -10,6 +16,9 @@ "-N" "-o" "ServerAliveInterval=30" "-o" "ServerAliveCountMax=3" + # Sans ça, un forward raté (port pris, sshd down au boot) laisserait + # une session inutile ; avec, autossh sort et launchd réessaie. + "-o" "ExitOnForwardFailure=yes" "-R" "2223:localhost:22" "root@marcpartensky.com" ]; diff --git a/profiles/deck/configuration.nix b/profiles/deck/configuration.nix index 1444ad7..1d3d6d5 100644 --- a/profiles/deck/configuration.nix +++ b/profiles/deck/configuration.nix @@ -106,6 +106,13 @@ # système est donc déclaré à la main. Accès shell direct (et-session + # zellij, cf services/eternal-terminal déjà importé plus haut) + sudo # NOPASSWD nixos-rebuild pour pouvoir builder sur place. + # Clé du Mac pour marc : `ssh deck` depuis le Mac passe par rack + # (ProxyJump), l'authentification finale est de bout en bout avec la clé du + # Mac. La clé RSA de users.nix reste valable. + users.users.marc.openssh.authorizedKeys.keys = lib.mkAfter [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMdX5m7b8xWL/9ZUeFRxahB4YY0v2rAV5CCFv8xTOlUh marc@Air-de-Marc" + ]; + users.groups.hermes = {}; users.users.hermes = { isSystemUser = true; diff --git a/profiles/tower/configuration.nix b/profiles/tower/configuration.nix index e27b9b0..dd8d914 100644 --- a/profiles/tower/configuration.nix +++ b/profiles/tower/configuration.nix @@ -61,11 +61,14 @@ in { "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMdX5m7b8xWL/9ZUeFRxahB4YY0v2rAV5CCFv8xTOlUh marc@Air-de-Marc" ]; - # Clé root du VPS anywhere (/root/.ssh/id_ed25519) : donne au VPS l'accès SSH - # à tower par le tunnel wg1 (10.100.0.3), donc depuis n'importe où sans - # dépendre de l'IP publique de la box. Remplace l'ancien forward 42070. + # Clés autorisées pour marc, en plus de la clé RSA de users.nix : + # - root@anywhere : accès SSH du VPS par wg1 (10.100.0.3), sans dépendre + # de l'IP publique de la box ni d'un forward. + # - marc@Air-de-Marc : le Mac, pour `ssh tower` qui passe par rack + # (ProxyJump), d'où qu'il soit. users.users.marc.openssh.authorizedKeys.keys = lib.mkAfter [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAc2f6U09CWD2yQNcyGz6Pz9EN3aJzvdCvr7FrSSgpwx root@anywhere" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMdX5m7b8xWL/9ZUeFRxahB4YY0v2rAV5CCFv8xTOlUh marc@Air-de-Marc" ]; networking.hostName = "tower";