SSH ProxyJump 连接 OceanBase 需本地及跳板机 OpenSSH ≥7.3,正确配置 ~/.ssh/config(含端口、用户、密钥)、权限设为600,并逐级验证免密连通性。
确认本地 SSH 版本是否支持 ProxyJump
不支持就根本连不上,不是配置问题,是版本卡死。2026 年主流系统大多默认满足,但老服务器或 macos 10.11 之前、centos 7 早期镜像仍可能卡在 openssh 7.2 或更低。
执行 ssh -v,输出必须是类似 openssh_8.9p1 或更高(7.3+ 即可)。若显示 openssh_6.7p1,-j 参数会直接报错 unrecognized option -- j,此时只能退用 proxycommand。
- Ubuntu/Debian:运行
sudo apt update && sudo apt install --only-upgrade openssh-client - CentOS/RHEL 8+:
sudo dnf upgrade openssh-clients;RHEL 7 需启用 EPEL 或手动编译,风险高,建议优先改用ProxyCommand - 跳板机(OceanBase 所在跳板)也得是 7.3+,否则链路第二跳失败——很多人只查本地,忘了验跳板机上的
sshd -V 2>&1 | head -1
~/.ssh/config 中配 ProxyJump 的真实写法
别照网上模板抄“Host jump”“Host target”就完事。OceanBase 环境里,跳板机往往有非标端口、专用用户、独立密钥,漏一项就卡在认证环节。
- 跳板机 Host 块必须声明
Port和IdentityFile,例如:Host ob-jumpHostName jump.ob-internal.example.comPort 22222User obadminIdentityFile ~/.ssh/id_ed25519_objump - 目标主机(OceanBase 数据库节点)块中,
ProxyJump值必须是上面定义的别名(ob-jump),不是 IP 或完整 user@host:Host ob-db01HostName 10.20.30.41User oceanbaseIdentityFile ~/.ssh/id_ed25519_obdbProxyJump ob-jump - 权限必须设为
chmod 600 ~/.ssh/config,否则 SSH 直接忽略该文件且不报错——这是最常被忽略的静默失败点
为什么 ssh -J 命令行方式容易连不通
命令行看着快,但在 OceanBase 这类多层隔离环境中极易出错,因为参数顺序、转义、嵌套连接都不可见。
-
ssh -J obadmin@jump.ob-internal.example.com:22222 oceanbase@10.20.30.41看似正确,但若跳板机上没部署oceanbase用户的公钥,会卡在第二跳并提示Permission denied (publickey),而错误信息全在跳板机侧,本地看不到上下文 - 如果跳板机 SSH 配置了
AllowUsers但没加oceanbase,连接会直接拒绝,报错却是模糊的Connection closed by remote host - 命令行无法复用
~/.ssh/config里的IdentityFile,必须显式加-i,导致同一连接要写两个-i(本地→跳板、跳板→OB),极易漏或错位
密钥免密链路必须逐级验证
OceanBase 跳板链路不是“本地配好就能通”,而是三级信任:本地信跳板机 → 跳板机信目标节点 → 目标节点接受跳板机来的连接。中间任一环断,就是黑屏或超时。
- 先测本地→跳板:
ssh -i ~/.ssh/id_ed25519_objump obadmin@jump.ob-internal.example.com -p 22222 - 再登录跳板机,测它→OB节点:
ssh -i ~/.ssh/id_ed25519_obdb oceanbase@10.20.30.41(注意:这个密钥必须存在跳板机的~/.ssh/下,且权限为 600) - 关键检查项:
ssh -T不适用,必须真连;跳板机上ssh -o ConnectTimeout=5 -o BatchMode=yes oceanbase@10.20.30.41可快速判断是否免密可用
很多故障其实卡在跳板机没生成自己的密钥对,或者 authorized_keys 权限是 644 而不是 600——SSH 服务端会静默拒收,连日志都不记。










