logingracetime用于限制ssh未认证连接的最长保持时间,仅在tcp连接建立后、认证完成前生效,超时即断开;默认120秒,建议设为30–60秒,并需配合maxstartups、iptables connlimit等机制协同防护。

直接通过 sshd_config 限制每个客户端未认证连接的最长保持时间,靠的是 LoginGraceTime 参数。它不是防“慢速爆破”的万能开关,但能有效压缩攻击者维持未完成认证连接的时间窗口,减少资源被长期占住的风险。
理解 LoginGraceTime 的作用边界
这个参数只管一件事:TCP 连接建立成功后、用户还没输完密码或完成密钥交换前的等待时长。一旦认证成功,它就完全失效;对已登录后的空闲会话、SYN Flood、半开连接也起不到作用。
默认值通常是 120 秒(2 分钟),对人工操作很友好,但给慢速扫描器留了充足时间反复试探、堆积连接。
设置合理值并启用
建议设为 30–60 秒,兼顾安全与可用性:
- 编辑配置文件:
sudo nano /etc/ssh/sshd_config - 找到或新增一行:
LoginGraceTime 45 - 若系统支持配置片段(如 Debian 12+/RHEL 9+),更推荐写入:
echo "LoginGraceTime 45" | sudo tee /etc/ssh/sshd_config.d/05-grace.conf - 重载服务(不中断已有会话):
sudo systemctl reload sshd
必须配合其他机制才真正有效
单设 LoginGraceTime 不足以抵御连接耗尽类攻击,需叠加以下防护:
-
MaxStartups:控制未认证连接并发数,例如
MaxStartups 5:30:10,防止大量未完成握手连接挤占资源 - iptables connlimit:在内核层限制单 IP 并发 SSH 连接数(如最多 3 个),避免一个 IP 开多个终端拖垮服务
-
fail2ban + 限速规则:用
iptables -m limit --limit 5/min控制新建连接频率,并结合 fail2ban 封禁高频失败尝试的 IP -
禁用密码登录:设
PasswordAuthentication no和PubkeyAuthentication yes,从源头消除暴力穷举入口
验证是否生效
可手动模拟测试:
- 执行
ssh -o ConnectTimeout=5 user@host,连接成功后在密码提示符下故意不输入 - 观察约 45 秒后是否返回
Connection closed by remote host - 查日志确认:
sudo journalctl -u sshd -n 30 --since "5 minutes ago" | grep timeout











