SSH 配置核查查什么
SSH 是最重要的管理入口,配置问题直接影响边界强度。核查项集中在四类:谁能登录(root 是否允许、是否有 AllowUsers/AllowGroups 白名单)、怎么登录(密码还是密钥、是否允许多因素)、从哪里登录(来源地址限制)、用什么算法(是否仍启用老旧算法)。判断依据必须以实际生效值为准——配置文件里写了、但被后续 include 或默认值覆盖的情况很常见,正确做法是读取服务端的生效配置。
基本信息
| 关键项 | PermitRootLogin、PasswordAuthentication、AllowUsers/AllowGroups |
|---|---|
| 生效值查询 | sshd -T 输出实际生效配置(Linux 各发行版通用) |
| 来源限制 | 监听地址、防火墙放行网段、sshd 的 Match 段 |
| 算法项 | KexAlgorithms、Ciphers、MACs 是否仍含老旧算法 |
| 平台 | Linux 与 Unix;Windows 侧对应 OpenSSH for Windows 的 sshd_config |
典型使用场景
- 服务器安全基线核查的基础项
- 评估管理入口收敛程度:是否只有密钥登录且限制来源
- 排查「改了配置没生效」:确认生效值与配置文件是否一致
- 评估自动化与运维工具的连接方式是否依赖密码登录
- 修复验证:确认变更后仍能正常登录且策略已生效
核查命令
核查命令
sudo sshd -T | grep -Ei 'permitrootlogin|passwordauthentication|maxauthtries' # 生效值
sudo sshd -T | grep -Ei 'allowusers|allowgroups|listenaddress' # 白名单与监听
sudo sshd -T | grep -Ei 'kexalgorithms|ciphers|macs' # 算法套件
# 记录实际生效值,而非仅查看 /etc/ssh/sshd_config
grep -rE 'Include|Match' /etc/ssh/sshd_config* # 确认是否有 include 或 Match 覆盖配置项与风险
| 配置项 | 风险配置 | 建议 |
|---|---|---|
| PermitRootLogin | 设为 yes 允许 root 直接登录 | 改为 prohibit-password 或 no |
| PasswordAuthentication | 保留密码登录,可被爆破 | 密钥优先,必要时仅内网保留 |
| AllowUsers/AllowGroups | 未设置,任何账号都可尝试登录 | 按需设置白名单 |
| 算法套件 | 仍启用老旧算法 | 按客户端兼容情况收敛 |
修改 sshd 前保留一个已登录会话,并在独立会话验证新配置可用后再断开,避免把自己锁在门外。
限制来源前先摸清自动化任务的连接来源:CI、监控与备份系统可能来自不同网段,配置过严会让运维流程中断。