You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NixOS服务器配置sshd仅允许局域网内密码登录失败求助

NixOS服务器配置sshd仅允许局域网内密码登录失败求助

嘿,太懂你这种频繁重置机器、每次要来回开关SSH密码认证的麻烦了!你想用Match Address只给局域网开密码登录的思路完全没问题,现在密码能输入但一直被拒绝,大概率是PAM配置或者NixOS的SSH配置优先级在搞鬼,咱们一步步来排查解决:

首先排查PAM配置冲突

你当前配置里开了UsePAM = true,但在Match块里没同步设置PAM规则——这会导致即使你给局域网开了PasswordAuthentication yes,PAM模块还是会按照全局的限制拒绝密码登录。试试把PAM设置也加到Match块里:

{
  services.openssh = {
    enable = true;
    ports = [ 22 ];
    settings = {
      PasswordAuthentication = false;
      AllowUsers = [ "user" ];
      PermitRootLogin = "no";
      UsePAM = true;
    };
    extraConfig = ''
      Match Address 192.168.0.0/24
        PasswordAuthentication yes
        ChallengeResponseAuthentication no
        UsePAM yes  # 给局域网登录单独指定PAM规则
    '';
  };
}

验证配置加载与服务重启

改完配置后一定要执行部署命令让配置生效:

sudo nixos-rebuild switch
sudo systemctl restart sshd

然后用实时日志看配置是否加载成功:

journalctl -u sshd -f

当你从局域网内尝试登录时,日志里应该会出现Match found for Address 192.168.x.x/24的提示,说明Match规则已经生效了。

额外排查点

  • 网段正确性:确认你的局域网网段确实是192.168.0.0/24,不少路由器用的是192.168.1.0/24,别写错掩码或网段。
  • 用户列表匹配:虽然全局已经设置了AllowUsers,但有时候Match块的优先级问题会导致用户匹配失败,可以尝试在Match块里也加上AllowUsers user(冗余但能避免优先级问题):
extraConfig = ''
  Match Address 192.168.0.0/24
    PasswordAuthentication yes
    ChallengeResponseAuthentication no
    UsePAM yes
    AllowUsers user
'';
  • PAM全局规则:如果之前自定义过NixOS的PAM配置,检查/etc/pam.d/sshd里有没有auth required pam_deny.so这类拒绝密码的规则,不过NixOS默认的sshd PAM配置是允许密码登录的,除非你手动改过。

如果还是不行,把journalctl -u sshd里登录失败时的完整错误日志贴出来,比如有没有显示PAM: Authentication failure之类的信息,这样能更精准定位问题!

备注:内容来源于stack exchange,提问作者Arad Reder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 12:14:33