Linux SSH安全加固需组合实施:禁用密码登录并强制密钥认证、禁止root直连且配置带sudo权限的管理用户、通过AllowUsers和ListenAddress限制访问来源、辅以MaxAuthTries和fail2ban防爆破。

Linux SSH 安全加固不是调一个参数就万事大吉,而是靠几项关键措施组合生效:关掉密码登录、只认强密钥、限制谁能连、缩窄监听范围。单做某一项容易留漏洞,比如只改端口不关密码,攻击者换端口照样爆破;只禁 root 不配好普通用户 sudo 权限,可能把自己锁在外面。
强制密钥登录,彻底关闭密码认证
密码是暴力破解的主入口,必须禁用。但操作前务必确认公钥已成功部署并能免密登录,否则会断连。
- 编辑 /etc/ssh/sshd_config,确保这两行明确启用且关闭:
PubkeyAuthentication yes
PasswordAuthentication no
- 推荐生成 ed25519 类型密钥(比 RSA 更快更安全):
ssh-keygen -t ed25519 -C "admin@prod" - 上传公钥时指定新端口(如已修改):
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 4321 admin@192.168.1.100 - 检查服务器端权限:~/.ssh 目录应为 700,authorized_keys 文件应为 600
禁止 root 直连,创建带 sudo 权限的管理用户
PermitRootLogin no 是硬性要求,但不能只改配置就重启——得先验证普通用户能顺利提权。
- 新建用户并设密码:
sudo useradd -m -s /bin/bash admin && sudo passwd admin - 加入 sudo 组(Ubuntu/Debian)或 wheel 组(CentOS/Rocky):
sudo usermod -aG sudo admin 或 sudo usermod -aG wheel admin - 在 /etc/sudoers 中可细化授权(如仅允许重启 nginx):
admin ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx - 最后修改配置:
PermitRootLogin no,再 sudo systemctl restart sshd
限制访问来源,缩小暴露面
比起单纯改端口,控制“谁能在哪连”更有效。白名单机制比防火墙规则更贴近 SSH 层级,也更易维护。
- 用 AllowUsers 锁定可信用户和 IP 段:
AllowUsers admin@192.168.10.* admin@2001:db8::/64 - 若需更细粒度,配合 ListenAddress 绑定特定网卡或公网 IP:
ListenAddress 10.0.1.5:4321(只监听内网管理地址)
ListenAddress 203.0.113.10:4321(只开给堡垒机弹性 IP) - 检查当前监听状态:
ss -tlnp | grep :4321,确认没意外监听 0.0.0.0:4321
辅助加固:防爆破 + 缩短响应窗口
这些配置不替代核心策略,但能显著提高攻击成本,尤其对抗自动化扫描。
- 限制单次连接最多尝试 3 次认证:
MaxAuthTries 3 - 缩短登录等待时间至 30 秒:
LoginGraceTime 30 - 启用 fail2ban 监控日志,对 5 分钟内失败 4 次的 IP 封禁 1 小时:
配置 [sshd] 段启用,后端用 iptables 或 nftables - 禁用非必要功能降低攻击面:
X11Forwarding no
TCPForwarding no(如无需隧道)











