linux ssh安全需系统性加固:禁用密码登录、强制密钥认证(ed25519),白名单限制用户与IP,修改默认端口,关闭非必要子系统,设置连接限制,并启用日志审计与自动封禁。

Linux SSH 安全提升不是靠一两个配置开关,而是系统性加固:从访问控制、认证机制、服务暴露面到日志审计,每个环节都可能成为突破口。核心原则是“最小权限 + 明确拒绝 + 可追溯”。以下为经生产环境验证的标准流程,适用于云服务器、内网跳板机、容器宿主机等全部常见场景。
禁用密码登录,强制使用密钥认证
密码暴力破解仍是 SSH 入侵最常见入口。即使密码复杂,也无法抵御离线字典攻击或凭证复用风险。
- 生成强密钥对(ed25519 优先):ssh-keygen -t ed25519 -C “admin@company.com”
- 将公钥安全部署到目标服务器的 ~/.ssh/authorized_keys,并确保权限为 600
- 修改 /etc/ssh/sshd_config:
PasswordAuthentication no
PubkeyAuthentication yes
PermitEmptyPasswords no - 重启前务必用新密钥另开一个会话测试连接,避免锁死
限制可登录用户与来源IP范围
不给非必要账户登录权限,不开放非必要网络访问,是成本最低、效果最直接的防线。
- 用 AllowUsers 或 AllowGroups 明确放行(例如:AllowUsers deploy admin),禁止 root 直接登录(PermitRootLogin no)
- 结合防火墙限制源 IP:
若仅允许办公网访问,用 ufw allow from 203.0.113.0/24 to any port 22;
若为跳板机,建议配合 iptables 或云平台安全组做二层过滤 - 避免使用 DenyUsers,黑名单模式易遗漏,优先用白名单思维
降低服务暴露风险与攻击面
SSH 本身不是 Web 服务,不应长期暴露在公网高危端口上。减少被扫描、被探测、被利用的机会,就是提升安全性。
- 修改默认端口(如改为 2222)虽不能防专业攻击,但可大幅降低自动化扫描命中率;注意同步更新防火墙规则
- 禁用不必要子系统:Subsystem sftp /usr/lib/openssh/sftp-server 保留即可,关闭 rsync、tcpforwarding(除非明确需要)
- 设置连接限制:
MaxAuthTries 3(防爆破)
LoginGraceTime 60(缩短未认证停留时间)
ClientAliveInterval 300 与 ClientAliveCountMax 2(自动清理挂起会话)
启用审计与异常响应能力
再强的预防也不能保证 100% 不被突破。可记录、可回溯、可告警,才能快速止损并反制。
- 确保 /var/log/auth.log(debian/ubuntu)或 /var/log/secure(RHEL/centos)写入正常,日志保留至少 90 天
- 用 faillog 和 lastb 定期检查失败登录;搭配 logwatch 或 goaccess 做简单聚合分析
- 轻量级自动封禁推荐 sshguard(比 fail2ban 更低资源占用,支持多后端);若已用 SIEM,可将 auth 日志接入做规则匹配(如 5 分钟内 10 次失败即触发告警)
基本上就这些。没有“一劳永逸”的 SSH 配置,只有持续验证的习惯——每次系统更新后重检 sshd_config,每次新增用户时重审 AllowUsers,每次网络调整后重核防火墙策略。安全不是功能开关,而是运维节奏的一部分。