Commit 0e3a3b0c1a31
Changed files (1)
home
common
shell
home/common/shell/openssh.nix
@@ -9,17 +9,30 @@
}:
let
# FIDO2 keys are only available on hosts with Yubikey attached
- hasFido2Keys = hostname == "kyushu";
+ hasFido2Keys = hostname == "kyushu" || hostname == "aomi";
isAomi = hostname == "aomi";
isAion = hostname == "aion";
isOkinawa = hostname == "okinawa";
in
{
- home.packages = with pkgs; [
- sshfs
- ];
- # Using NixOS programs.ssh.startAgent instead (has proper SSH_ASKPASS support for FIDO2)
- services.ssh-agent.enable = false;
+ home.packages =
+ with pkgs;
+ [
+ sshfs
+ ]
+ # aomi is Fedora (no NixOS programs.ssh.startAgent); provide a GTK askpass
+ # so FIDO2 sk-key PIN prompts work with the home-manager ssh-agent.
+ ++ lib.optionals isAomi [ openssh-askpass ];
+
+ # NixOS hosts use programs.ssh.startAgent (proper SSH_ASKPASS for FIDO2).
+ # aomi has no NixOS layer, so run a home-manager systemd user ssh-agent.
+ services.ssh-agent.enable = isAomi;
+
+ # FIDO2 sk-keys spawn ssh-sk-helper which needs an askpass for the PIN.
+ home.sessionVariables = lib.mkIf isAomi {
+ SSH_ASKPASS = "${pkgs.openssh-askpass}/libexec/gtk-ssh-askpass";
+ SSH_ASKPASS_REQUIRE = "prefer";
+ };
programs.ssh = {
enable = true;
enableDefaultConfig = false;
@@ -73,7 +86,7 @@ in
mkOverride = id: lib.nameValuePair id { identityFile = "~/.ssh/id_ed25519"; };
mkShpoolOverride = id: lib.nameValuePair "${id}/*" { identityFile = "~/.ssh/id_ed25519"; };
in
- lib.optionalAttrs (isAomi || isAion || isOkinawa) (
+ lib.optionalAttrs (isAion || isOkinawa) (
builtins.listToAttrs (map mkOverride allHostIds ++ map mkShpoolOverride allHostIds)
);
in