linux ssh 安全需从访问控制、认证机制、服务暴露面、日志监控四层面系统加固:禁用密码登录并强制密钥认证;限制用户与IP访问(如禁止root、AllowUsers、IP白名单);修改默认端口并部署Fail2ban防爆破;开启登录日志审计与定期异常分析。

Linux SSH 安全不是靠一两个配置就能搞定的,而是需要从访问控制、认证机制、服务暴露面、日志监控四个层面系统加固。下面按实际运维顺序拆解关键步骤,每一步都可直接落地。
禁用密码登录,强制使用密钥认证
密码暴力破解是 SSH 最常见攻击方式。启用密钥登录后,攻击者即使猜中用户名也几乎无法登录。
- 在客户端生成密钥对:ssh-keygen -t ed25519 -C “your_email@example.com”(推荐 ed25519,比 rsa 更快更安全)
- 把公钥复制到服务器:ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
- 编辑 /etc/ssh/sshd_config,确认以下三行已设置:
PubkeyAuthentication yes
PermitEmptyPasswords no
PasswordAuthentication no
改完执行 sudo systemctl restart sshd 生效。⚠️ 操作前务必确保密钥已生效且能正常登录,否则可能被锁死。
限制用户与IP访问范围
最小权限原则:只允许必要的人、从必要的地方连进来。
- 禁止 root 直接登录:PermitRootLogin no
- 只允许特定用户登录:AllowUsers deploy admin(多个用户空格分隔)
- 限制来源 IP(适合固定办公网络):AllowUsers admin@192.168.1.* admin@203.123.45.0/24
- 配合防火墙进一步收紧(如 ufw):sudo ufw allow from 203.123.45.10 to any port 22,再 deny 22 默认拒绝
改默认端口 + 启用 Fail2ban 防爆破
虽然“隐蔽即安全”不绝对,但改端口能过滤掉大量自动化扫描;Fail2ban 则能实时封禁反复失败的 IP。
- 修改 SSH 端口:Port 22222(选 1024–65535 间未被占用的端口),同时更新防火墙规则放行新端口
- 安装 Fail2ban:sudo apt install fail2ban(debian/ubuntu)或 yum install fail2ban(centos)
- 启用并配置 SSH 防护:复制模板 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local,编辑 jail.local 中 [sshd] 区块,确保 enabled = true
- 重启服务:sudo systemctl enable fail2ban && sudo systemctl restart fail2ban
开启登录日志审计与定期检查
安全不是“设好就完事”,得知道谁连过、什么时候连、成功还是失败。
- SSH 日志默认在 /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(RHEL/CentOS)
- 快速查看最近登录记录:sudo last -n 20 或 sudo grep “Accepted|Failed” /var/log/auth.log | tail -20
- 建议搭配 logrotate 自动轮转,并用脚本每周汇总异常 IP,例如统计失败次数 Top 5:sudo grep “Failed password” /var/log/auth.log | awk ‘{print $(NF-3)}’ | sort | uniq -c | sort -nr | head -5
基本上就这些。不复杂但容易忽略——比如改完端口忘了开防火墙,或者关了密码登录却没测试密钥是否真可用。每次调整后花 2 分钟验证下连通性,比出问题半夜爬起来强得多。