部署网站时,短时间反复登录服务器,SSH 突然连不上、卡到超时 —— 不是断网,是服务器把你当攻击者拉黑了。
这条是一次真实踩坑:给本站频繁上传文件时,SSH 突然连不上了 —— 网站照常打开、能 ping 通,唯独 SSH 卡住直到超时。排查下来,是服务器的安全机制把上传方的 IP 临时拉黑了。
直接原因:短时间反复登录
每传一次文件,本质都是新开一条 SSH 连接、登录一次。如果「改一点→传一次」来回十几趟,再加上网络抽风时的重试,几分钟内就对 22 端口发起了几十次连接。在服务器眼里,「同一 IP 短时间疯狂敲 SSH」和黑客暴力破解扫密码长得一模一样,于是自动把这个 IP 封禁一段时间(常见默认 10 分钟)。
谁在拦你 —— 两个常见角色
- fail2ban:专门盯 SSH 日志的工具。发现某 IP 频繁连接、或连接没走完就断开,判定为攻击,自动下一条防火墙规则把它的网络包直接丢弃(DROP)。被 DROP 的典型特征 —— 能 ping、网站能开,但 SSH「卡住直到超时」(而不是干脆拒绝)。
- sshd 的 MaxStartups:当太多「还没登录成功」的连接同时挤在门口,SSH 服务端会主动随机踢掉新连接,表现为「banner exchange 超时」。
两者都不是因为账号或密钥有问题,纯粹是连接的频率和节奏看着像攻击。
为什么会"反复横跳":一会儿能连一会儿不能
fail2ban 是「踩到阈值才封、封一段时间自动解」。于是现象就是:能连 → 密集操作 → 触发阈值被封 → 等会儿自动解封 → 又密集操作 → 又被封,循环往复。
怎么根治(以后部署不再被误伤)
- 连接复用(最优解):给 SSH 开
ControlMaster/ControlPersist,让多次scp/ssh共用同一条已登录的连接 —— 十次部署也只算一次登录,根本不触发阈值。 - 合并传输:把所有文件打包成一个 tar 一次传完,把"几十次连接"压成"一次"。
- 加白名单:在 fail2ban 配置里把自己固定的出口 IP 写进
ignoreip,直接豁免。 - 已被封了怎么办:别再猛连(那只会让你一直撞在 DROP 上),等它自动解封;或从服务商的网页版控制台(VNC/Console)进去手动解封。
反过来看,这正说明 fail2ban 在替你挡住真正的暴力破解 —— 它误伤了"自己人"。所以解法不是关掉它,而是让自己的连接行为别像攻击(复用连接)+ 把自己加白名单。