SSH安全加固核心是围绕最小权限、可审计、防滥用构建闭环:禁用密码认证(PasswordAuthentication no)、强制ed25519密钥登录、白名单AllowUsers、绑定ListenAddress、配置ClientAliveInterval/MaxAuthTries、启用VERBOSE日志及fail2ban响应。

SSH远程访问的安全合规性不是堆砌配置项,而是围绕“最小权限、可审计、防滥用”三个核心建立闭环。真正落地时,关键不在参数本身,而在于每项配置是否能对应到明确的风险控制目标,并具备验证手段。
禁用密码登录 + 强制密钥认证
这是最基础也最关键的一步。密码认证天然面临暴力破解和重放风险,而密钥认证依赖非对称加密,私钥不离本地,安全性高得多。
- 在/etc/ssh/sshd_config中设置:
PasswordAuthentication no
PubkeyAuthentication yes
PermitEmptyPasswords no - 密钥建议使用ed25519算法生成(比RSA更高效安全):
ssh-keygen -t ed25519 -a 100 -C "admin@company.com" - 公钥必须通过ssh-copy-id或手动追加到~/.ssh/authorized_keys,且该文件权限必须为600,用户主目录不能有组/其他写权限
限制登录主体与网络范围
即使认证方式安全,开放给所有人或所有IP仍是重大隐患。必须从源头收窄攻击面。
- 只允许指定用户登录:
AllowUsers deploy admin ops(避免用DenyUsers,白名单更可靠) - 绑定监听地址,避免暴露在公网网卡上:
ListenAddress 10.10.5.20(内网管理IP)或127.0.0.1(仅本地跳转) - 配合防火墙做二次过滤:例如ufw allow from 192.168.10.0/24 to any port 2222,端口需与Port配置一致
会话生命周期与行为管控
一次合法登录不等于长期可信。需防止会话被劫持、闲置被复用、超时未清理等隐性风险。
- 空闲断连:
ClientAliveInterval 300(5分钟发一次保活)
ClientAliveCountMax 0(不响应即断开) - 连接上限与超时:
MaxStartups 5:30:10(限制并发未认证连接)
LoginGraceTime 60(登录窗口仅1分钟) - 启用PAM会话控制(如需自动注销):
UsePAM yes,并在/etc/pam.d/sshd中添加:
session optional pam_timeout.so timeout=900
日志审计与异常响应能力
合规不仅要求“做了什么”,更要求“能证明做了什么、谁做的、何时做的”。日志是事后追溯与满足等保/ISO27001的关键证据。
- 确保LogLevel VERBOSE或INFO,记录认证尝试细节
- 将日志转发至集中SIEM系统(如rsyslog+ELK),避免本地日志被篡改
- 配置失败登录自动响应:可用fail2ban或自定义脚本监听/var/log/auth.log,对同一IP连续5次失败即封禁30分钟
- 定期检查lastb和journalctl -u sshd --since "2 hours ago",确认无异常源IP高频试探

















