linux ssh安全提升聚焦四大关键动作:禁用密码登录启用密钥认证(ed25519 优先)、禁止 root 直连并限制 AllowUsers、修改 端口 配合 防火墙 精准放行、启用 f ail2ban 及加固协议 算法;建议按序实施并逐项验证。

Linux SSH 安全提升不是靠 堆配置,而是聚焦几个关键动作:关掉高危入口、换掉弱认证方式、加一层访问控制。下面这些操作在主流发行版(ubuntu 22.04+/centos 8+/RHEL 9+)上均可直接执行,每一步都有明确目的和验证方法。
禁用密码登录,只用密钥认证
这是最有效的单步加固——暴力破解几乎立刻失效。前提是已配好密钥且能稳定登录。
- 本地生成强密钥:
ssh-keygen -t ed25519 -C "admin@prod"(优先选 ed25519,比 RSA 更快更安全) - 上传公钥到服务器:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip - 登录服务器后,编辑
/etc/ssh/sshd_config,确认以下两行:PubkeyAuthentication yesPasswordAuthentication no - 重启服务:
sudo systemctl restart sshd - ⚠️ 操作前务必新开一个终端,用密钥成功登录一次再关闭旧连接,避免锁死
禁止 root 直接登录 + 限制可登录用户
消除最高权限账户暴露面,同时缩小攻击目标范围。
- 在
/etc/ssh/sshd_config中设置:PermitRootLogin noAllowUsers deploy admin backup(只写你真正需要 SSH 的用户名,多个空格分隔) - 如需按组限制,可用:
AllowGroups ssh-users,然后用sudo usermod -aG ssh-users username加入用户 - 改完立即生效,无需重启,但新连接才受控;已有 root 会话不受影响
改 端口 + 配合 防火墙 精准放行
不为“防高手”,只为过滤掉 99% 的 自动化 扫描流量——实测日志中无效尝试下降两个数量级。
- 修改端口(例如改为 5678):
Port 5678(写在sshd_config顶部或单独一行) - 防火墙同步更新:
Ubuntu:sudo ufw allow 5678/tcp && sudo ufw deny 22/tcp
RHEL/CentOS:sudo firewall-cmd --permanent --add-port=5678/tcp && sudo firewall-cmd --reload - SELinux 用户额外执行:
sudo semanage port -a -t ssh_port_t -p tcp 5678 - 测试连接:
ssh -p 5678 user@server_ip
启用失败锁定 + 协议与算法加固
堵住暴力破解最后一道缝隙,并淘汰已知有漏洞的加密组件。
- 在
sshd_config中添加或修改:Protocol 2MaxAuthTries 3LoginGraceTime 45Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.commacs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com - 装 fail2ban(自动封 IP):
sudo apt install fail2ban或sudo yum install fail2ban - 启用默认 jail:
sudo systemctl enable --now fail2ban,它会自动监控 /var/log/auth.log 并封禁多次失败的 IP
基本上就这些。不需要全部一步到位,建议按顺序做:先密钥 → 再禁 root 和限用户 → 接着改端口 + 防火墙 → 最后加 fail2ban 和算法加固。每做完一项,用另一台机器测试连接,留好应急回滚路径(比如 console 访问或云平台 VNC)。