服务器被暴力破解,SSH 登录失败怎么办?

暴力破解到底有多野?先了解现状

云服务器只要暴露在公网上,服务器被暴力破解几乎是每天都会发生的事。
SSH(远程登录协议)默认端口22,是扫描机器最常盯上的目标。
如果你发现 ssh root@你的服务器IP 提示连接被拒绝、登录超时或反复输入密码都进不去,十有八九是SSH登录失败次数太多,系统或安全组把IP封了。
别慌,按下面的步骤一步步排查和修复。

前期准备:登录服务器与查看日志工具

操作前需要:

  • 一台运行 Linux(CentOS/Ubuntu/Debian)的云服务器,能通过VNC控制台或阿里云/腾讯云的“远程连接”功能进入系统(如果SSH已经连不上)。
  • 确认你拥有 root 权限或 sudo 权限。
  • 准备一个记事本,记录下后续要修改的IP和端口。

如果服务器还能 SSH 登录(只是偶尔掉线),直接打开终端即可。
如果完全连不上,请从云服务商的管理后台使用 VNC 或 Web Shell 进入系统,照样能执行命令。

紧急处理:临时封禁恶意IP(两行命令)

查看登录失败记录

首先查看SSH登录失败的统计,找到攻击者的IP:

# 查看最近1000条认证失败的日志,提取IP并排序去重
journalctl -u sshd -n 1000 | grep "Failed password" | grep -oP "from \K[^ ]+" | sort | uniq -c | sort -rn | head -10

如果系统是 CentOS 6/7 或使用 rsyslog,用 /var/log/secure

sudo grep "Failed password" /var/log/secure | grep -oP "from \K[^ ]+" | sort | uniq -c | sort -rn | head -10

Ubuntu/Debian 用 /var/log/auth.log

输出类似:

 520 203.0.113.5
 230 198.51.100.20

次数最高的几个IP就是攻击源。

临时封禁IP

用 iptables 或 firewalld 临时封禁,比如封掉 203.0.113.5:

sudo iptables -A INPUT -s 203.0.113.5 -j DROP

注意:这个规则重启后失效,但能立刻解决问题。
如果想永久生效,需要保存规则(不同系统命令不同)。
更推荐下一步的长期方案。

如果是宝塔面板用户,可以在 安全 > 防火墙 里直接添加 IP 黑名单,效果等同。

长期防护:安装Fail2ban + 密钥登录

临时封IP只是止血,要避免服务器被暴力破解反复发生,必须加固 SSH。

方法一:安装 Fail2ban(自动封禁)

Fail2ban 会监控登录日志,发现多次失败就自动封IP。
安装和配置一条龙:

# CentOS
sudo yum install epel-release -y && sudo yum install fail2ban -y
# Ubuntu/Debian
sudo apt update && sudo apt install fail2ban -y

启动并开机自启:

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

检查状态:

sudo fail2ban-client status sshd

看到 Status 输出,说明已生效。
默认设置下,同一个IP在10分钟内失败5次就会被封10分钟。
如果需要调策略,编辑 /etc/fail2ban/jail.local,比如:

[sshd]
enabled = true
maxretry = 3
bantime = 3600
findtime = 600

然后重启服务。

方法二:改用密钥登录 + 关闭密码登录

密码登录是暴力破解的靶子。
用密钥登录几乎可以杜绝暴力破解。

  1. 在本地电脑生成密钥对(Windows 用 Git Bash / PowerShell,Mac/Linux 直接终端):
   ssh-keygen -t ed25519 -f ~/.ssh/my_server_key -N ""

生成后得到 my_server_key(私钥)和 my_server_key.pub(公钥)。

  1. 将公钥添加到服务器:
   ssh-copy-id -i ~/.ssh/my_server_key.pub root@你的服务器IP

如果无法使用 ssh-copy-id,手动复制:

   # 在本地查看公钥内容
   cat ~/.ssh/my_server_key.pub
   # 在服务器上执行(使用VNC或Web Shell)
   mkdir -p ~/.ssh && chmod 700 ~/.ssh
   echo "粘贴公钥内容" >> ~/.ssh/authorized_keys
   chmod 600 ~/.ssh/authorized_keys
  1. 测试用密钥登录:
   ssh -i ~/.ssh/my_server_key root@你的服务器IP

成功登录后,关闭密码登录:编辑 /etc/ssh/sshd_config,找到并修改:

   PasswordAuthentication no
   PubkeyAuthentication yes

保存后重启 SSH:

   sudo systemctl restart sshd

务必保留VNC控制台作为救急通道,万一密钥不对还能从后台修复。

高频问题与避坑(含验证效果)

常见问题

  • Q:我按步骤操作了,但SSH登录还是失败? A:检查安全组是否放行了新端口(如果改了端口),或者 Fail2ban 是否把你自己封了。用 sudo fail2ban-client set sshd unbanip 你的IP 解封。
  • Q:封禁IP后自己也被封了怎么办? A:从VNC控制台登录,执行 sudo iptables -F 清空规则,或者用 sudo fail2ban-client set sshd unbanip 你的公网IP
  • Q:Fail2ban 没生效? A:检查日志 sudo journalctl -u fail2ban,确认 sshd jail 加载成功。部分系统需要手动启用 [sshd] 的 enabled = true。

避坑说明

  • 不要直接删除 /var/log/secure 或 auth.log,这些日志是排查依据,应该定期轮转而非删除。
  • 修改 SSH 配置时千万别关闭当前连接的 Shell,先执行 ssh -O check 或另开一个窗口测试,否则你可能彻底锁在外面。
  • 使用 Fail2ban 时,默认的 “maxretry = 5” 对正常用户可能太宽松,建议改为 3。但也不要太低(比如2),以免误封。

验证最终效果

重启后,用新配置登录几次,观察 sudo fail2ban-client status sshd 中的 Banned IP 列表。
如果连续多次尝试错误密码,IP 会被自动封禁。
也可以查看系统日志确认无新攻击:

sudo journalctl -u sshd --since "1 hour ago" | grep "Failed password" | wc -l

如果返回数字持续为0,说明服务器被暴力破解的问题已基本解决。

如果你正在处理服务器被暴力破解,SSH登录失败怎么办?建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。

分享到:
上一篇
Docker 容器无法启动,常见错误原因汇总
下一篇
用 AI 写自动化脚本,误删服务器文件怎么办?
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意