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.
This commit is contained in:
Hermes Agent
2026-10-24 15:08:11 -04:00
parent b9b165b2c3
commit 6ee385ce93
3 changed files with 23 additions and 4 deletions
+10 -1
View File
@@ -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"
];
+7
View File
@@ -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;
+6 -3
View File
@@ -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";