linux ssh安全需从登录入口、权限控制、行为监控三方面系统加固,核心是禁用root密码登录、强制密钥认证、改端口限IP、启用Fail2ban、定期轮换密钥并清理过期账户。

Linux SSH 安全不是靠“堵漏洞”堆出来的,而是从登录入口、权限控制、行为监控三方面系统加固。关键不在装多少工具,而在改掉默认习惯。
禁用 root 直接登录 + 强制密钥认证
这是最基础也最有效的一步。默认允许 root 密码登录等于给攻击者留了条高速通道。
- 编辑 /etc/ssh/sshd_config,确认以下两行已设置:
- PermitRootLogin no
- PasswordAuthentication no
- 新增普通用户(如 deploy),用 ssh-keygen 生成密钥对,把公钥写入该用户的 ~/.ssh/authorized_keys
- 重启服务:sudo systemctl restart sshd,新会话必须用密钥登录
改默认端口 + 限制登录来源
不指望“隐蔽端口”防住专业扫描,但能大幅减少自动化爆破日志噪音,也降低误触发告警概率。
- 在 sshd_config 中修改:Port 2222(选 1024–65535 间未被占用的端口)
- 配合防火墙限制可连 IP:sudo ufw allow from 192.168.1.100 to any port 2222(仅允许可信IP)
- 若用云服务器,安全组也要同步放行对应端口和IP段
启用 Fail2ban 自动封禁暴力尝试
它能实时分析 /var/log/auth.log,对多次失败登录的IP自动加iptables规则封禁。
- 安装:sudo apt install fail2ban(debian/ubuntu)或 sudo yum install fail2ban(centos)
- 复制默认配置:sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- 编辑 jail.local,确保 sshd 段启用,并调整参数如:
maxretry = 3(3次失败即封)
bantime = 1h(封禁1小时) - 启动并设开机自启:sudo systemctl enable –now fail2ban
定期轮换密钥 + 禁用过期账户
密钥不是“一配永逸”,长期不用或人员变动后,旧密钥就是潜在后门。
- 为不同用途(运维、部署、审计)分配独立密钥,命名带环境和日期,例如:id_rsa_prod_202410
- 每3–6个月更新一次主密钥,更新后立即从所有服务器的 authorized_keys 中清理旧公钥
- 检查闲置账户:sudo lastlog -b 90 查90天未登录用户,确认无用后用 sudo userdel -r username 彻底删除
基本上就这些。不复杂,但容易忽略——尤其是密钥轮换和账户清理,往往拖到出事才补。安全不是功能开关,是日常习惯。