sshd -T 输出的是什么
sshd -T 会把 sshd_config 与编译期默认值合并后全部展开,输出的是真正生效的配置。这与直接读配置文件有本质区别:文件里被注释掉的行、被 Include 引入的行、出现多次但只有第一条生效的行,在文件里都看不出来。核查 SSH 一律以 sshd -T 的结果为准,报告里的「当前值」列也应该引用它。
基本信息
| 加固项 | SSH 服务生效配置核查 |
|---|---|
| 适用平台 | Linux(OpenSSH 服务端) |
| 风险等级 | 高 |
| 命令 | sshd -T,多数系统需要 root 或 sudo |
| 用途 | 确认实际生效值,而不是配置文件里写了什么 |
典型使用场景
- 基线核查:一次性拿到全部关键参数的当前值,形成核查表
- 整改验证:改完配置后确认新值已生效,避免改了没生效
- 故障排查:登录被拒时确认是否走了预期的认证方式
- 证据留档:把完整输出存档,作为测评时的现行值证据
- 批量比对:多台主机各存一份输出,快速找出配置漂移
核查命令
核查命令
sudo sshd -T 2>/dev/null | grep -Ei 'permitrootlogin|passwordauthentication|pubkeyauthentication'
sudo sshd -T 2>/dev/null | grep -Ei 'maxauthtries|logingracetime|x11forwarding|permitemptypasswords'
sudo sshd -T 2>/dev/null | grep -Ei 'allowtcpforwarding|kbdinteractiveauthentication|allowusers|allowgroups'
sudo sshd -T 2>/dev/null > /root/sshd-effective-$(date +%F).txt # 全量留档核查项与基线值
| 参数 | 建议值 | 说明 |
|---|---|---|
| PermitRootLogin | no 或 prohibit-password | 禁止 root 用口令直登,需保留应急路径时用后者 |
| PasswordAuthentication | no | 关闭口令认证,爆破失效 |
| PubkeyAuthentication | yes | 密钥认证必须开启,否则会全员登不上 |
| MaxAuthTries | 3 到 4 | 限制单次连接的认证尝试次数 |
| LoginGraceTime | 30 到 60 秒 | 缩短未完成认证的连接占用时间 |
| PermitEmptyPasswords | no | 禁止空口令登录,必须为否 |
| X11Forwarding | no | 服务器上通常不需要,关闭可减少攻击面 |
| AllowUsers 或 AllowGroups | 按需配置 | 来源人员收敛的补充手段 |
把完整输出存档进报告:基线核查表格里的当前值直接引用 sshd -T 的结果,评审时不会产生争议。同一份输出在不同时间取两次还能作为配置漂移的证据,比只写一句「配置符合基线」有力得多。
不要对着配置文件猜生效值:注释掉的行、被 Include 引入的行、重复参数只认第一条这些情况,光看文件都看不出来。改动 SSH 配置属于高风险操作,操作前保留一个已登录会话与带外通道,改完先 sshd -t 校验语法,再重载并新开窗口验证登录。
推荐的核查流程
固定五步:先取一份 sshd -T 全量输出作为现状,再逐项与基线值比对列出差异,然后只改差异项并用 sshd -t 校验语法,接着重载服务,最后新开一个连接验证登录正常并再取一次输出确认生效。整个过程的输出都留档,形成「现状、差异、整改、验证」的完整链条。