ssh安全核心是减少攻击面、增加验证门槛、及时发现异常;需限制 IP、用 f ail2ban 封禁、强密码或加密密钥管理,并加强 日志监控 与告警。

linux SSH 安全不是“开个密码就完事”,核心是 减少攻击面 + 增加验证门槛 + 及时发现异常 。很多新手一上来就改 端口、关密码登录,结果自己连不上,反而误以为“更安全”了——其实只是把门锁死了,钥匙却扔在门口。
别迷信“改 端口= 安全”
把 SSH 默认端口 22 改成 2222 或 3389,确实能过滤掉大量 自动化 扫描,但它 不防针对性攻击 ,也 不防暴力破解 。只要端口开放且可访问,nmap 一下就能扫出来。更关键的是:改端口后若没同步更新 防火墙 规则、跳板机配置或运维文档,容易导致自己失联。
- ✅ 正确做法:配合 ufw / firewalld 限制源 IP(比如只允许公司出口 IP 或跳板机)
- ✅ 真正有效的是:用 fail2ban 监控 auth.log,10 分钟内 5 次失败就封 IP 1 小时
- ❌ 错误操作:只改端口 + 关闭 SELinux/防火墙,等于换把塑料锁还拆了门框
密码登录不是原罪,弱密码才是
很多人一听“SSH 密码不安全”就立刻禁用 PasswordAuthentication,结果密钥配错、备份密钥丢失,服务器直接变砖。其实只要做到三点,密码登录一样可靠:
- ✅ 强制使用 12 位以上、含大小写字母 + 数字 + 符号的密码(可用
openssl rand -base64 12生成) - ✅ 设置
MaxAuthTries 3和LoginGraceTime 60,缩短爆破窗口 - ✅ 结合 PAM 模块(如
pam_pwquality)强制密码复杂度,拒绝弱口令登录
密钥登录≠高枕无忧,管理比生成更重要
生成一个 id_rsa 并放到 ~/.ssh/authorized_keys 里,只是第一步。真正风险藏在后续管理中:
- ✅ 私钥必须加密保存(创建时加 passphrase),并用
chmod 600 ~/.ssh/id_rsa严格权限 - ✅ 禁用空密码密钥:
PubkeyAuthentication yes+PermitEmptyPasswords no - ✅ 定期清理不用的公钥(尤其离职人员)、启用
AuthorizedKeysCommand统一纳管 - ❌ 别把私钥丢在 gitHub、截图发群里、或用同一对密钥登所有服务器
日志和监控才是最后防线
再强的配置,也挡不住 0day 或内部误操作。能快速发现异常,比“绝对防住”更现实:
- ✅ 开启详细日志:
LogLevel VERBOSE(非 DEBUG,避免日志爆炸) - ✅ 把 /var/log/auth.log 推送到集中日志系统(如 Loki + grafana),设置“1 小时内同一 IP 失败 ≥5 次”告警
- ✅ 用
lastb查看爆破记录,who -a和ss -tunap | grep :22实时看连接
基本上就这些。安全不是一步到位的开关,而是持续校准的习惯——每次改配置前问一句:我是不是同时加固了“进得来”和“出不去”的环节?