sshd 配置校验是什么
sshd -t 只做配置语法检查,改完 sshd_config 先跑它再重启,是避免把自己锁在门外的标准动作;sshd -T 则把 Includes 展开、把默认值补全,输出最终生效的完整配置。想问「哪条配置最后生效」「为什么改了没反应」,-T 是权威依据;想模拟某个来源地址或用户命中的 Match 分支,再配合 -C 参数。
基本信息
| 适用平台 | Linux/Unix(OpenSSH 服务端) |
|---|---|
| 命令语法 | sshd -t 校验语法;sshd -T 导出最终配置;sshd -T -C 条件 模拟连接 |
| -C 支持的条件 | user、host、addr、laddr、lport、rdomain 等 |
| 典型用法 | 改配置后先 sshd -t 通过,再 systemctl reload sshd |
| 权限说明 | 读取主机密钥通常需要 root,因此一般用 sudo 执行 |
典型使用场景
- 改配置后的守门动作:语法不通过就不要重启服务
- 排查改了不生效:确认最终生效值,而不是只看文件里写了什么
- 核验安全基线:批量检查密码认证、root 登录、最大尝试次数等项
- 验证 Match 分支:模拟指定来源地址,确认它命中了哪一个分支
- 交付前留档:把 -T 的输出存档,作为配置基线
常用示例
常用示例
sudo sshd -t && echo 'config ok'
sudo sshd -T | grep -Ei 'permitrootlogin|passwordauthentication|^port'
sudo sshd -T -C user=root,host=10.0.0.1,addr=10.0.0.1 # 模拟该来源命中的结果
sudo sshd -T | grep -Ei 'allowusers|allowgroups|maxauthtries|clientalive'
sudo systemctl reload sshd # 语法通过后再重载,新连接用新配置常用检查项与安全基线
| 配置项 | 建议方向 | 原因 |
|---|---|---|
| PasswordAuthentication | 生产环境建议关闭 | 改为密钥认证后,口令爆破失去着力点 |
| PermitRootLogin | prohibit-password 或 no | 避免直接以 root 口令登录 |
| MaxAuthTries | 调小(如 3) | 限制单连接认证尝试次数 |
| AllowUsers 与 AllowGroups | 按需白名单 | 把可登录范围收窄到明确名单 |
| ClientAliveInterval | 按需设置 | 及时释放僵死连接,间接减少会话占用 |
| X11Forwarding | 不需要时关闭 | 减少不必要的转发面 |
-T 会把 Include 与 drop-in 一并展开并补全默认值,所以它显示的是「最终生效」而不是「文件里写了什么」。排查「明明改了却没生效」时,先看这个文件是否真的被 Include 进来,再看是否有更后面的 Match 块覆盖了它。
把 -T 的输出纳入变更流程:改动前导出一次、改动后再导出一次并 diff,就能清楚看到这次操作到底影响了哪些最终生效值,比反复读配置文件与猜测优先级可靠得多。这份 diff 也适合作为变更单的附件留档。
改 sshd 配置属于高风险操作:动手前保留一个已经登录的会话不要退出,改完先 sshd -t 校验,通过后再用 reload 而不是 restart(重载不会断开现有连接),最后开一个新窗口验证能登录。改端口或改防火墙策略时,要先放行新策略再重启服务。