SSH连接超时设置通过ClientAliveInterval 60与ClientAliveCountMax 3实现服务端心跳探测,连续3次无响应即断开;多重认证机制依托pam_faillock.so配置失败锁定策略,同一用户输错3次密码锁定900秒,并支持密钥+密码双因子登录闭环。

Linux SSH 安全加固中,连接超时设置和多重认证机制是两块关键拼图:前者防会话滞留,后者防暴力破解。它们不依赖复杂工具,只需修改几个配置项,就能显著提升服务器抗攻击能力。
服务端空闲超时:用 ClientAliveInterval 控制心跳
SSH 默认不发心跳,中间防火墙或 NAT 设备常在 60–300 秒后清空“静默连接”,导致看似网络不稳的断连。真正起效的是服务端主动探测:
- ClientAliveInterval 60:每 60 秒向客户端发送一次加密心跳包(不能设为 0,否则等同于关闭)
- ClientAliveCountMax 3:连续 3 次未收到响应即断开,容忍约 3 分钟无操作
- 这两行需写入 /etc/ssh/sshd_config 文件末尾,取消注释或直接新增
- 改完必须执行 systemctl restart sshd 才生效,reload 不触发新连接策略
PAM 登录失败锁定:用 pam_faillock 实现账户级防护
SSH 本身不处理“输错 5 次就锁账号”,这个逻辑由 PAM 模块接管。推荐使用较新的 pam_faillock.so(替代已弃用的 pam_tally2):
- 在 /etc/pam.d/sshd 中添加两行(位置很关键,通常放在 auth [default=die] 之前):
auth [default=die] pam_faillock.so authfail silent deny=3 unlock_time=900
auth [default=die] pam_faillock.so authsucc silent deny=3 unlock_time=900 - 含义:同一用户连续输错 3 次密码,锁定 900 秒(15 分钟),成功登录后重置计数
- 同时确保 /etc/security/faillock.conf 中未覆盖全局策略,或按需微调
- 验证方式:用错误密码反复登录,再用 faillock --user username 查看当前状态
密钥+密码双因子:让登录既安全又可控
仅靠密码或仅靠密钥都存在短板。密钥防暴力破解,但丢失即失权;密码易撞库,但可重置。组合使用才能兼顾安全与运维弹性:
- 在 /etc/ssh/sshd_config 中启用:
PubkeyAuthentication yes
PasswordAuthentication yes
KbdInteractiveAuthentication yes - 这样 SSH 支持密钥登录,也允许密码登录——但前提是 PAM 已配置 faillock,形成“密钥优先、密码兜底、失败即锁”的闭环
- 若只允许密钥,务必先确认目标用户已部署有效公钥,再设 PasswordAuthentication no,避免锁死自己
配套日志与验证:配完不是结束,而是开始
加固配置是否真起作用,不能靠猜,得靠日志和实测:
- 登录失败记录在 /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(RHEL/CentOS),搜索 Failed password 或 pam_faillock
- 用另一台机器反复输错密码,观察是否在第 3 次后拒绝连接,并检查 faillock 输出是否显示 locked
- 保持一个 SSH 连接闲置超过 3 分钟,确认是否自动断开;再尝试输入命令,应提示 “Write failed: Broken pipe”
- 所有修改前备份原配置,如 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak


















