高防服务器SSH故障排查方法
2026-01-01 02:36:38 丨 来源:紫云
高防服务器 SSH 故障排查方法
一 快速定位流程
- 从外到内、由简到繁:先判定是否为网络层问题,再检查端口与服务,最后核对认证与安全策略。
- 关键命令清单(客户端):
- 连通性:ping (ICMP 可能被高防/安全策略屏蔽,ping 不通不代表 SSH 不可用)
- 端口可达:nc -zv 22 或 telnet 22
- 路径追踪:mtr -rw (Linux);Windows 可用 tracert
- 调试连接:ssh -vvv user@IP -p <端口>
- 现象到原因速查:
- Connection refused:目标机端口无服务监听(sshd 未运行/端口不对)
- Connection timed out:路径上防火墙/安全组/清洗设备丢弃包(策略或限速导致)
- Host key verification failed:服务器重装或 IP 复用导致指纹变更,需清理客户端旧指纹
二 服务器端必查项
- 服务与监听
- 状态:systemctl status sshd(若 inactive,执行 systemctl start sshd && systemctl enable sshd)
- 监听:ss -tnlp | grep :22 或 netstat -tnlp | grep :22
- 配置核对:/etc/ssh/sshd_config
- Port 22(或自定义端口)、ListenAddress 0.0.0.0(避免仅 127.0.0.1)
- PasswordAuthentication yes/no、PubkeyAuthentication yes、PermitRootLogin yes|prohibit-password|no
- AllowUsers/AllowGroups/DenyUsers 是否限制了你的账户或来源 IP
- 防火墙与云安全组
- firewalld:firewall-cmd --list-all;放行:firewall-cmd --permanent --add-service=ssh && firewall-cmd --reload
- ufw:ufw status;放行:ufw allow 22/tcp
- 云控制台:入方向放行 TCP 22(或自定义端口),源地址尽量限定为你的 出口网段/CIDR
- 日志与认证
- 实时日志:Ubuntu/Debian tail -f /var/log/auth.log;CentOS/RHEL tail -f /var/log/secure
- 常见线索:invalid user(暴力破解)、Failed publickey(密钥不匹配)、error: Could not load host key(主机密钥缺失)
- 资源与连接限制
- 资源:df -h(磁盘满会导致会话/日志异常)、free -m / top(内存/CPU 过载)
- 连接限制:grep -E "MaxStartups|MaxSessions" /etc/ssh/sshd_config(过高并发可能被拒)
- 安全模块
- SELinux:getenforce(临时 setenforce 0 仅用于排查)、grep AVC /var/log/audit/audit.log
- AppArmor:检查策略与拒绝日志
三 客户端与高防侧专项
- 客户端常见错误
- 命令与端口:ssh user@IP -p <端口>;端口非 22 必须显式指定
- 密钥权限:chmod 600 ~/.ssh/id_rsa,chmod 644 ~/.ssh/id_rsa.pub,chmod 700 ~/.ssh
- 指定密钥:ssh -i ~/.ssh/your_key user@IP
- 配置覆盖:检查 ~/.ssh/config 中的 Host 条目是否误配
- 指纹变更:ssh-keygen -R 后重连
- 调试输出:ssh -vvv 定位卡在 “connecting/key exchange/auth” 哪个阶段
- 高防与运营商侧要点
- 端口策略:确认高防已对 TCP 22(或自定义端口)做放行/回源策略,且回源 IP 段已加入服务器防火墙白名单
- 清洗/限速:突发流量触发清洗时可能出现间歇性超时,观察高防控制台告警与回源状态
- 源地址变化:企业 NAT/代理出口导致源 IP 变化,需在安全组/防火墙中使用 地址段 而非单 IP
- 端口变更:若改用非 22 端口,确保高防、系统防火墙、sshd_config 三者一致
- 应急通道:保留 控制台/VNC/带外管理 通道,以便在策略误封时恢复访问
四 常见症状与处置对照表
| 症状 | 快速判断 | 处置要点 |
|---|
| Connection refused | 端口无监听或服务未起 | 启动 sshd;核对 Port/ListenAddress;ss -tnlp 确认监听 |
| Connection timed out | 包被丢弃或路径中断 | 检查服务器/本机防火墙、云安全组、高防策略;mtr 找中断节点 |
| Permission denied (publickey) | 密钥不匹配或未部署公钥 | 核对 ~/.ssh/authorized_keys 权限 600;ssh-copy-id 重发公钥;客户端 -i 指定正确私钥 |
| Permission denied (password) | 密码错误或密码登录被禁 | 确认 PasswordAuthentication 为 yes;改用密钥或重置密码 |
| Host key verification failed | 服务器指纹变更 | 执行 ssh-keygen -R 后重连 |
| Too many authentication failures | 触发 MaxAuthTries/MaxStartups | 增加 MaxAuthTries;清理本地 known_hosts 中重复条目;检查 fail2ban |
| PTY allocation request failed | 服务端限制或资源紧张 | 检查 MaxSessions/MaxStartups;排查系统负载与磁盘空间 |
五 最小化暴露与加固建议
- 限制来源:安全组/防火墙仅放行可信 IP/CIDR;避免使用 0.0.0.0/0
- 禁用密码:在确认密钥可用后设置 PasswordAuthentication no,仅保留 PubkeyAuthentication yes
- 端口与协议:可改用 非 22 端口;仅开放 TCP 22;必要时限制仅内网访问并配合跳板机
- 账号策略:优先使用普通用户登录,必要时 sudo 提权;谨慎设置 PermitRootLogin
- 入侵防护:部署 fail2ban,监控 /var/log/auth.log 的失败尝试
- 变更留痕:修改 /etc/ssh/sshd_config 前先备份;变更后 systemctl restart sshd 并验证新会话
- 监控告警:对 sshd 进程、22 端口连通性、登录失败率设置监控与告警,缩短故障恢复时间