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
相关产品推荐
相关产品推荐

