SSH安全加固核心是精准做减法:关闭默认22端口(改至22222等非标端口)可过滤90%自动化扫描;禁用密码认证、强制ed25519密钥登录;禁止root直连,设AllowUsers白名单与MaxAuthTries 3;启用VERBOSE日志并配合fail2ban自动封禁异常IP。

SSH 安全加固不是堆砌功能,而是做减法:关掉不用的、锁住能用的、盯紧异常的。真正安全的远程入口,往往配置项不多,但每一条都精准生效。
关掉默认暴露面
22端口是攻击者的“默认起点”,大量自动化扫描脚本第一轮就扫它。改端口不能防专业扫描,但能过滤掉90%以上的通用暴力尝试,显著降低日志噪音和系统负载。
- 编辑 /etc/ssh/sshd_config,取消注释或新增 Port 22222(选 1024–65535 之间未被占用的端口)
- 防火墙同步放行新端口:sudo ufw allow 22222(Ubuntu/Debian)或 sudo firewall-cmd --permanent --add-port=22222/tcp(CentOS/RHEL)
- 重启服务前先测试配置:sudo sshd -t,无报错再执行 sudo systemctl restart sshd
只留一种登录方式
密码认证天然存在强度不可控、易撞库、易爆破的问题。密钥认证则把安全性锚定在本地私钥上,只要私钥不泄露,登录就几乎不可伪造。
- 客户端生成密钥对:ssh-keygen -t ed25519 -C "your_email@example.com"
- 公钥上传到服务器:ssh-copy-id -p 22222 user@server_ip(注意指定新端口)
- 服务端禁用密码登录:PasswordAuthentication no,启用密钥:PubkeyAuthentication yes
- 确认生效后,再关闭密码登录——务必先用新密钥成功登录一次再改配置
最小权限+精准准入
不是所有用户都需要 SSH,也不是所有 IP 都该被允许。从源头控制谁、从哪、以什么身份进来,是最直接的防线。
- 禁止 root 直接登录:PermitRootLogin no
- 只允许可信用户:AllowUsers deploy@192.168.1.* ops@203.101.55.0/24(支持用户名+IP 段组合)
- 限制单次登录最多试错 3 次:MaxAuthTries 3,避免暴力遍历
- 空闲 5 分钟自动断连:ClientAliveInterval 300 + ClientAliveCountMax 1
让异常无处隐藏
加固不是一劳永逸,而是持续感知。日志本身不防攻击,但它让你在攻击发生时能第一时间响应。
- 开启详细日志:LogLevel VERBOSE,记录登录来源、密钥指纹、失败原因
- 集中查看失败记录:sudo grep "Failed password" /var/log/auth.log | tail -20
- 配合 fail2ban 自动封禁高频失败 IP(安装后默认生效,无需额外配置)
- 定期检查 /var/log/auth.log 或用 journalctl -u sshd -S yesterday 回溯昨日活动

















