跳转到内容
搜索 Rocky Linux 文档

    浏览当前文档目录

    Rocky 10:为什么 sshd -T 看不到你的 Match 设置

    Rocky Linux 10.2 Server 组虚拟机,OpenSSH_9.9p1。

    实验:读全局有效配置 → 加一个按来源地址限定的 Match 块 → 用 sshd -T -C 对两个地址分别取值 → 清理。截图:public/evidence/sshd/rocky-match.png。

    $ sshd -T -C user=labuser,host=localhost,addr=192.168.2.241 | grep -E '^(maxauthtries|x11forwarding|passwordauthentication)'
    maxauthtries 6
    passwordauthentication yes
    x11forwarding yes
    命令看什么什么时候用
    sshd -t语法是否正确改完配置先跑它
    sshd -T全局上下文的有效值查默认值
    sshd -T -C user=…,host=…,addr=…该连接的有效值验证 Match 是否命中

    只跑 sshd -T 就断言「配置没生效」,是最常见的误判来源。

    /etc/ssh/sshd_config.d/50-lab-match.conf
    Match Address 192.168.2.240
    MaxAuthTries 2
    X11Forwarding no
    $ sshd -t && echo "config OK"
    config OK

    同一进程,两个客户端两个答案

    Section titled “同一进程,两个客户端两个答案”
    $ sshd -T -C user=labuser,host=localhost,addr=192.168.2.240 | grep -E '^(maxauthtries|x11forwarding)'
    maxauthtries 2
    x11forwarding no
    $ sshd -T -C user=labuser,host=localhost,addr=192.168.2.241 | grep -E '^(maxauthtries|x11forwarding)'
    maxauthtries 6
    x11forwarding yes

    这就是 Match 的本质:一份配置按条件求值,而不是把规则叠加到所有连接上。

    Rocky Linux 10.2:Match 与逐连接有效配置

    Match 之后的所有指令都属于该块,直到文件结束或下一个 Match:

    Match Address 192.168.2.0/24
    PasswordAuthentication no
    X11Forwarding no ← 这行也被吞进 Match,只对网段内生效

    sshd_config.d/*.conf 按文件名排序加载,所以「某设置只对部分客户端生效」通常就是这么来的:一条本该全局的指令落在了 Match 块里。

    排查动作:

    Terminal window
    sudo sshd -T -C user=labuser,host=localhost,addr=<可疑地址> | diff - <(sudo sshd -T) | head

    Match 只改变参数取值,不改变可达性:

    • 想让某网段完全连不上,用 firewalld,而不是 Match + 不存在的用户;
    • 想只允许特定用户,用 AllowUsers(它可以在 Match 块里细化);
    • 认证失败仍会走 PAM,MaxAuthTries 只是限制重试次数。
    • sshd -t 通过就以为生效:它只查语法;
    • 改完不 reload:systemctl reload sshd;
    • Match 后续写了全局项:被吞进块内;
    • 用错地址段写法:192.168.2.0/24 与 192.168.2.* 都支持,但混用容易漏。

    练习:把「只对某人生效」验证清楚

    Section titled “练习:把「只对某人生效」验证清楚”
    Terminal window
    sudo tee /etc/ssh/sshd_config.d/70-user.conf >/dev/null <<'EOF'
    Match User labuser
    MaxSessions 1
    EOF
    sudo sshd -t
    sudo sshd -T -C user=labuser,host=localhost,addr=192.168.2.10 | grep maxsessions
    sudo sshd -T -C user=root,host=localhost,addr=192.168.2.10 | grep maxsessions
    sudo rm /etc/ssh/sshd_config.d/70-user.conf

    检查:

    1. labuser 得到 1,root 保持默认 10;
    2. 未 reload 也能用 -T -C 验证(读文件,不影响会话);
    3. 删除后两者一致;
    4. 理解 user= 维度与 addr= 维度可以组合。

    常见问题

    Match 支持哪些条件?

    Address、User、Group、Host、LocalAddress、LocalPort、RDomain 等,可用逗号组合表示「或」,多个 Match 关键字之间是「且」。

    sshd -T -C 会影响线上连接吗?

    不会,它只解析配置并打印结果,不建立会话、不重新加载。

    旧版本没有 -T -C 怎么办?

    -T 自 OpenSSH 6.8 起提供,-C 自 7.x 起;EL8 及以上都有,EL7 需要升级。