linux ssh安全加固的核心是显式授权,需禁用密码登录、root直连和全网访问,启用ed25519密钥认证,限制allowusers与listenaddress,配置fail2ban及最小权限sudo,并关闭x11forwarding等无用功能。

Linux SSH 安全加固的核心,是把“默认开放”变成“显式授权”——不靠运气防攻击,而靠配置堵漏洞。重点不在堆砌功能,而在切断最常被利用的路径:密码爆破、root直连、全网可访。
密钥登录必须启用,密码认证必须关闭
密码登录是暴力破解的入口,哪怕密码再强,也扛不住自动化工具轮询。密钥认证本质是“你有私钥才进门”,不可复制、不可猜测。
- 先本地生成安全密钥:ssh-keygen -t ed25519 -C "admin@prod"(OpenSSH 8.8+ 已弃用老旧 rsa,ed25519 更快更稳)
- 上传公钥到服务器:ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 22222 user@server
- 确认能免密登录后,再改配置:PasswordAuthentication no 且 PubkeyAuthentication yes
- 客户端连接时加 -o PreferredAuthentications=publickey,避免 fallback 到密码提示
root登录必须禁用,普通用户需有可控提权路径
允许 root 远程登录等于把管理员钥匙挂在门把手上。真实运维中,应先建好带 sudo 权限的普通账户,再关掉 root 通道。
- 配置项设为:PermitRootLogin no(如确需密钥登录 root,可用 prohibit-password 折中)
- 创建部署用户:useradd -m -s /bin/bash deploy
- 授予最小必要 sudo 权限,例如:deploy ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx
- 重启前务必执行 sshd -t 检查语法,并用新终端测试登录,别在唯一会话里 reload
访问控制要精细,不能只靠改端口
把 SSH 端口从 22 改成 22222 能过滤掉 90% 的脚本扫描,但对定向攻击无效。真正有效的是限制“谁能在哪连”。
- 用 AllowUsers deploy@192.168.10.* admin@2001:db8::/64 锁定可信来源(白名单比黑名单可靠)
- 配合 ListenAddress 10.0.1.5:22222,让 SSH 只监听内网管理地址或指定公网 IP,不绑定 0.0.0.0
- 防火墙同步放行:ufw allow from 192.168.10.0/24 to any port 22222 或 firewalld 富规则
- 限制尝试次数:MaxAuthTries 3,防并发撞库;LoginGraceTime 30 缩短登录等待窗口
配套机制要跟上,单点加固容易失效
SSH 配置只是第一道门,后面还得有监控、审计和自动响应,形成闭环。
- 安装 fail2ban,监控 /var/log/auth.log,对 5 分钟内失败 4 次的 IP 封禁 1 小时
- 关闭无用功能:X11Forwarding no、UseDNS no、TCPForwarding no(除非明确需要隧道)
- 日志审计不能少:确保 rsyslog 正常运行,关键操作(sudo、su、ssh 登录)写入集中日志系统
- 定期检查账户:cut -d: -f1 /etc/passwd | xargs -I{} ssh {}@localhost echo OK 2>/dev/null 快速验证可用性










