ssh合规检查关键在于收权限、控行为、留痕迹、防绕过:禁用root登录和密码认证,限制用户/ip范围,设置失败尝试阈值与空闲超时,开启verbose日志并确保90天留存可查,关闭x11转发等非必要功能,显式指定ssh-2协议及强加密算法。

要让 SSH 服务通过安全合规检查(如等保2.0、ISO 27001 或企业内部审计),关键不是“加功能”,而是**收权限、控行为、留痕迹、防绕过**。合规关注的是可验证、可审计、有策略、有响应——不是配置多炫,而是每项设置都有明确目的、能被日志佐证、且无法被轻易规避。
禁用高危登录方式
默认的 root 登录和密码认证是合规检查的高频扣分项。
-
禁止 root 直接远程登录:在
/etc/ssh/sshd_config中设PermitRootLogin no。必须确保已创建普通用户并配好sudo权限(如usermod -aG sudo deploy); -
关闭密码认证,只留密钥登录:设
PasswordAuthentication no和PubkeyAuthentication yes。注意:操作前务必用ssh-copy-id把你的公钥传上去,否则会锁死自己; -
禁用空密码和交互式认证:确认
PermitEmptyPasswords no、ChallengeResponseAuthentication no已启用。
限制访问来源与尝试行为
合规要求对“谁可以连”“连多少次”“连多久”有明确控制。
-
缩小允许登录的用户范围:用
AllowUsers deploy@192.168.10.0/24 admin@203.12.55.100精确限定用户+源IP,避免宽泛的AllowGroups; -
限制暴力破解窗口:设
MaxAuthTries 3,配合 PAM 模块锁定账户(如pam_faillock.so),实现“输错3次,锁5分钟”; -
强制空闲超时退出:设
ClientAliveInterval 300(5分钟发一次心跳)、ClientAliveCountMax 3(3次无响应即断开),总空闲上限约15分钟。
增强审计与可观测性
没有日志=没做过;日志不全=没做实。合规检查必查 /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(RHEL/CentOS)。
-
开启详细日志级别:在
sshd_config中设LogLevel VERBOSE,确保记录公钥指纹、登录来源、认证方式、失败原因; -
确保日志不被覆盖或删除:检查
logrotate配置是否保留至少90天,禁止普通用户写入/var/log; -
验证日志有效性:手动触发一次失败登录,立刻执行
tail -n 10 /var/log/auth.log | grep "Failed password",确认条目存在且含 IP、时间、用户。
基础加固与最小化暴露
这是合规的“入场券”——不满足就直接不达标。
-
改非标端口(可选但推荐):设
Port 22222。虽不能防定向攻击,但能过滤90%以上的自动化扫描,显著降低日志噪音; -
关闭无用功能:禁用
X11Forwarding no、AllowTcpForwarding no(除非业务真需要)、UseDNS no(防反向DNS查询拖慢认证); -
协议与算法收紧:显式声明
Protocol 2,并在新系统中禁用弱加密套件(如Ciphers和KexAlgorithms可参考 CIS Benchmark 推荐列表)。











