2.6.6 常见SSH故障排查
在生产环境中,SSH 故障通常由网络连通性、服务配置、认证机制或安全策略引起,应按“网络→服务→认证→策略”的顺序排查,避免盲目修改配置导致扩大影响。本节给出可执行的排查流程、典型命令、日志定位、配置示例与练习。
一、原理草图:SSH 连接链路与排查顺序
二、连通性与端口检查(含命令解释)
1) 目标主机可达性
# ICMP 可达性
ping -c 4 192.168.10.20
# 路由路径
traceroute 192.168.10.20
-c 4:发送 4 次探测包,避免无休止输出
2) 端口可达性与端口变更
# 端口连通性
nc -zv 192.168.10.20 22
# 若 SSH 端口改为 2222
ssh -p 2222 user@192.168.10.20
-z:不发送数据,仅探测端口-v:输出详细连接信息
3) 防火墙与安全组
# iptables 规则
iptables -L -n
# firewalld 规则
firewall-cmd --list-all
三、SSH 服务状态与配置语法(含示例)
1) 服务状态与重启
systemctl status sshd
systemctl restart sshd
2) 配置语法检查
sshd -t
# 无输出表示语法正确
3) 常见日志定位
# RHEL/CentOS
tail -f /var/log/secure
# Debian/Ubuntu
tail -f /var/log/auth.log
四、认证与权限问题(含示例与修复命令)
1) 密钥认证失败排查
# 检查公钥是否存在
ls -l ~/.ssh/authorized_keys
# 修复权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
2) 密钥格式兼容(PEM 转 OpenSSH)
ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
-m PEM:指定 PEM 格式- 适用于旧系统仅支持 PEM 的场景
3) 账户锁定与解锁
# 查看账户状态
passwd -S user
# 查看失败计数
faillock --user user
# 解锁
faillock --user user --reset
五、配置与策略冲突(含配置片段与解释)
1) 关键参数检查
# /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication yes
PubkeyAuthentication yes
AllowUsers opsadmin devops
DenyUsers test
AllowUsers与DenyUsers同时存在时,优先拒绝- 修改后必须重启
sshd生效
2) PAM 与 SELinux 影响
# SELinux 状态
getenforce
# 临时切换验证
setenforce 0
# PAM 规则
cat /etc/pam.d/sshd
六、连接异常与性能问题(带示例)
1) 登录缓慢(反向解析导致)
# /etc/ssh/sshd_config
UseDNS no
GSSAPIAuthentication no
修改后:
systemctl restart sshd
2) 连接后立刻断开(Shell 异常或 ForceCommand)
# 检查用户登录 shell
getent passwd user | cut -d: -f7
# 检查是否存在强制命令
grep -n "ForceCommand" /etc/ssh/sshd_config
3) 并发受限(MaxStartups/MaxSessions)
# /etc/ssh/sshd_config
MaxStartups 10:30:60
MaxSessions 10
MaxStartups 10:30:60:并发连接队列策略
七、标准化排查流程(可执行清单)
# 1. 网络连通性
ping -c 4 <host>
nc -zv <host> <port>
# 2. 服务状态
systemctl status sshd
sshd -t
# 3. 日志定位
tail -n 50 /var/log/secure
# 4. 认证与权限
ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys
# 5. 策略与限制
grep -E "AllowUsers|DenyUsers|PermitRootLogin" /etc/ssh/sshd_config
getenforce
八、排错演练(实操练习)
1) 练习一:端口更改后登录失败
- 将 /etc/ssh/sshd_config 中 Port 2222
- 重启 sshd
- 使用 ssh -p 2222 user@host 连接
- 目标:验证端口变更后客户端命令调整
2) 练习二:密钥权限错误导致认证失败
- 将 authorized_keys 权限改为 644
- 尝试登录,观察日志 Authentication refused
- 修复为 600
- 目标:掌握权限对认证的影响
3) 练习三:UseDNS 影响登录速度
- 开启 UseDNS yes
- 测试登录耗时
- 改为 UseDNS no 后对比
- 目标:定位 DNS 反向解析导致的延迟