问题出现得很突然,日志倒是留得挺全。加固脚本统一把 sshd 的 AllowTcpForwarding 改成 no,第二天所有走跳板机的数据库连接全断,客户端报 channel 3: open failed: administratively prohibited。

这类报错背后常见的原因有几处,逐个排除就行。AllowTcpForwarding no 直接禁掉 -L 与 -R,本地和远程转发都不能建。少数情况下是IDE 和数据库客户端默认都靠 SSH tunnel 连内网,一断就是整片。

少数情况下是加固脚本没区分跳板机与普通业务机,一刀切全改。

动手时先确认转发相关的配置

sshd -T | grep -i forward

跳板机放开但限制目标

AllowTcpForwarding yes 与 PermitOpen 10.0.0.21:3306

校验并重载

sshd -t && systemctl reload sshd

客户端建隧道验证

ssh -N -L 13306:10.0.0.21:3306 ops@10.0.0.8 &

同样的操作我在测试机上先走了一遍,线上只做验证过的部分。

怎么算真的好了,看的是同一批现象。本地 13306 能连上数据库(mysql -h127.0.0.1 -P13306 -e ‘select 1’ 返回正常),sshd 日志里不再有 administratively prohibited,PermitOpen 之外的目标仍被拒。

跳板机是转发能力的合法出口,加固要按角色区分策略;用 PermitOpen 收窄目标比直接关掉转发更安全也更好用。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189