首页/新闻资讯/正文详情

OpenSSH 8.x 下 Oracle 19c RAC OUI SSH 连接失败解决指南

发布时间:2026/9/21 0:40:26 来源:云帆数科 栏目:资讯中心
OpenSSH 8.x 下 Oracle 19c RAC OUI SSH 连接失败解决指南
先说个结论你手动 ssh/scp 都能通不代表 Oracle 19c RAC 安装界面里的 OUI 能通。我在 RHEL 8 系列系统上装 19c Grid Infrastructure 时就被这一幕卡了整整一个下午两台节点的 ssh 互信、免密登录全都正常可一走到 OUI 的 “SSH Connectivity” 步骤就是红叉报错信息翻来覆去就是那句“The ssh command failed. Ensure that ssh is installed and available in the PATH.”。后来扒日志、查算法、翻系统安全策略才发现真正的矛盾点根本不在这台机器的命令上而是 OpenSSH 8.x 默认关闭了老式 RSA 签名算法而 Oracle 安装器内嵌的 Java SSH 库还停在“旧世界”里挪不动步。这篇文章就把这次的完整排查过程和最终解决办法写出来给所有准备在 OpenSSH 8.x 环境下装 19c RAC 的人省点时间。1. 这个问题的现场还原手动 SSH 正常OUI 却一直失败1.1 我这次的部署环境先说下我手里的这套环境方便你对号入座项目配置操作系统RHEL 8.6内核 4.18.0-372两台节点主机名db01db02数据库版本Oracle Grid Infrastructure 19.3.0.0Oracle Database 19.3.0.0用户gridGI 安装、oracleDB 安装OpenSSH 版本OpenSSH_8.0p1, OpenSSL 1.1.1k共享存储ASM两节点各挂同一组共享 LUN整个安装流程走到 OUI 的 “SSH Connectivity” 界面前cluvfy的检查都正常网络、内核参数、用户组、存储属主权限也全都通过了。问题就出在这个步骤上——填上grid用户和口令点 “Test”界面不通过日志里记录到远端执行命令失败。1.2 手动命令全通到底哪里断了这是最让人抓狂的地方。我在 db01 上执行ssh db02 hostname scp /tmp/test.txt db02:/tmp/都正常用ssh-keygen生成 RSA 密钥、ssh-copy-id配好互信之后免密登录也完全没问题。所以一开始我根本不信是 SSH 本身的问题怀疑是权限、目录、防火墙甚至 OUI 的 Java 环境有问题。但问题恰恰就藏在“手动命令全通”的背后我在命令行手工执行 ssh 时系统用的是 OpenSSH 8.0p1 这个原生客户端它会和远端的 sshd 协商一套双方都支持的算法。而 OUI 里的 “SSH Connectivity” 检测是它自带的一个 Java SSH 库jcraft.jsch也就是常说的 JSch去连接远端节点并执行远程命令。这个库的版本相对老默认支持的算法和 OpenSSH 8.x 能提供的算法匹配不上结果就是命令行能过JSch 过不去。提示如果安装过程中 OUI 的 SSH Connectivity 失败第一反应不应该是重装 OpenSSH而是先确认是不是 JSch 和 OpenSSH 8.x 的算法协商问题。这个问题在 Oracle Linux 8、RHEL 8、CentOS 8 上非常典型。2. 追根溯源OUI 检测 SSH 背后到底发生了什么2.1 OUI 的 “SSH Connectivity” 并不是简单的 ping很多第一次装 RAC 的人可能以为点一下 “Test” 就是用ssh命令连一下远端服务器类似于看看通不通。实际它做的工作比这多得多OUI 会调用 JSch用你填的用户名和口令或者已有的密钥连接到每个节点然后到远程执行一些安装前需要的命令比如创建诊断目录、把安装介质同步到其他节点、验证远程节点的目录权限等。也就是说这个步骤不是“验证连通性”而是“真正在使用 SSH 通道做远程操作”。在这个场景下JSch 自身支持的算法列表决定了它能不能和远端的 sshd 成功握手。2.2 OpenSSH 8.x 和 JSch 的算法碰撞这里解释下冲突的根源。OpenSSH 8.0 开始出于安全考虑默认禁用了基于 SHA-1 的 SSH-RSA 签名算法。RSA 密钥本身没有问题但用 RSA 私钥去签名时旧版本默认走 ssh-rsaSHA-1这条算法而 8.x 的 sshd 默认不再接受这种签名除非在配置里显式加回ssh-rsa。JSch 的老版本在连接远端时默认也只会用 ssh-rsa 这个算法去做密钥交换和用户认证两边一碰服务端直接拒绝。打个比方JSch 是个只会说“方言 A”的人OpenSSH 8.x 的 sshd 是个已经不再说“方言 A”的当地人。命令行下的 OpenSSH 客户端因为本身也会说“方言 B”就能和当地人聊得热火朝天但 JSch 只会“方言 A”自然吃闭门羹。那怎么确认是这个原因最直接的办法是看 OUI 的详细安装日志。日志路径一般在$ORACLE_BASE/oraInventory/logs/installActions2025-XX-XX_XX-XX-XXPM.log或者你安装时指定的 inventory 目录下的 logs。用文本编辑器打开搜索JSch、Auth fail、no matching key exchange、Connection refused这类关键字一般能看到这样的内容com.jcraft.jsch.JSchException: Auth fail或者com.jcraft.jsch.JSchException: Algorithm negotiation fail看到 “Algorithm negotiation fail”基本就可以锁定了。注意网上搜这个问题很多人会建议你把~/.ssh/known_hosts删掉、检查authorized_keys权限、改成 DSA 密钥后再试。这些我都试过不能说完全没用但都没有触及根本——即使你完美配置好 RSA 免密JSch 和 sshd 之间算法协商不一致一样会认证失败。3. 排查过程记录那些试了以后没用的方案3.1 我一开始的排查侧重我先把节点间时钟同步、DNS 解析、防火墙、SELinux 都过了一遍都正常。然后手动在grid用户下重新生成密钥并配好互信ssh和scp依然通畅。再试ssh -v看连接过程能看到两边的算法协商列表ssh -vvv db02 hostname输出里能看到debug1: kex: algorithm: curve25519-sha256 debug1: kex: host key algorithm: ecdsa-sha2-nistp256 debug1: Server accepts key: /home/grid/.ssh/id_rsa debug1: Authentication succeeded (publickey).这说明在命令行场景下OpenSSH 客户端有足够多的算法选择甚至可以用 ECDSA 密钥或 curve25519 密钥交换来绕过 ssh-rsa 的限制。3.2 重装 OpenSSH、升级 OpenSSH都不是正路还有一个容易被带偏的方向就是网上有人建议把 OpenSSH 升级到更高版本说新版本和 Oracle 19c 更“兼容”。这里我强烈不建议在安装 Oracle RAC 期间去动系统的 OpenSSH原因有三点OpenSSH 升级后系统原有的 sshd 配置、PAM 模块、SELinux 策略都可能要跟着调整风险成倍增加。网上能搜到的一些 OpenSSH RPM来源不一定可靠而且版本和系统自带的 OpenSSL、内核 Crypto 策略可能不匹配。真正的问题不在 OpenSSH“不够新”而是“太新”新到把老算法默认关了。升级上去只会更难协商。你要做的是让 sshd 把老算法重新打开而不是把整个 SSH 协议栈换掉。4. 一劳永逸的解法让 OUI 和 OpenSSH 8.x 重新“通气”4.1 修改 sshd显式开启老算法直接在集群的每个节点的 sshd 配置里加上兼容老算法的设置。编辑/etc/ssh/sshd_config在文件末尾追加HostKeyAlgorithms ssh-rsa,ssh-rsa-cert-v01openssh.com PubkeyAcceptedAlgorithms ssh-rsa KexAlgorithms diffie-hellman-group14-sha1,diffie-hellman-group1-sha1需要注意OpenSSH 8.x 里PubkeyAcceptedAlgorithms这个参数的名称在更早版本里叫PubkeyAcceptedKeyTypes。如果你用的系统版本提示参数名不对可以改成PubkeyAcceptedKeyTypes ssh-rsa。这里我以 8.0p1 为准。改完后重启 sshdsudo systemctl restart sshd然后确认配置已生效sshd -T | grep -E pubkeyacceptedalgorithms|hostkeyalgorithms|kexalgorithms输出里应该能看到ssh-rsa出现在列表里了。4.2 把兼容配置固化避免系统更新后被覆盖如果你只是改/etc/ssh/sshd_config后续某个安全补丁把 sshd 配置重置或者安装别的软件修改了配置问题可能再次出现。更稳妥的做法是在/etc/ssh/sshd_config.d/目录下单独建一个文件比如oracle-rac.confsudo tee /etc/ssh/sshd_config.d/oracle-rac.conf EOF HostKeyAlgorithms ssh-rsa,ssh-rsa-cert-v01openssh.com PubkeyAcceptedAlgorithms ssh-rsa KexAlgorithms diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 EOF注意/etc/ssh/sshd_config里至少要有一行Include /etc/ssh/sshd_config.d/*.confRHEL 8 默认是有的确认一下没被注释就行。这样以后即使主配置被重置独立文件里的配置依然生效这就是我说的“一劳永逸”的思路不是靠一次手工修改碰运气而是把兼容策略做成独立的、可持续的配置单元。4.3 在 sshd 级别解决后还要留意客户端侧服务端开启这些算法后大多数情况下 OUI 就能连通了。但如果你后续还要让 OpenSSH 命令行客户端注意这里说的是纯命令行下的 ssh不是 OUI 里的 JSch也走 ssh-rsa 签名比如你生成的公钥格式是老式 RSA 密钥且没有用新算法签名那么客户端侧也要放开限制。在~/.ssh/config里加Host * PubkeyAcceptedAlgorithms ssh-rsa HostKeyAlgorithms ssh-rsa不过对这个案例来说Oracle 安装界面里的 JSch 是独立实现它走的是自己的算法逻辑所以只要服务端 sshd 愿意接受 ssh-rsaJSch 就应该能连上。我实测下来服务端改完配置后OUI 的 “Test” 红叉立刻变成绿勾。注意放开 ssh-rsa 相当于降低了 sshd 的默认安全水位。如果你的机器直接暴露在公网要谨慎评估这个风险。一般内网的数据库服务器问题不大但安装完成后如果不需要旧算法了我建议评估后移除ssh-rsa这类配置恢复系统默认的更高安全策略。4.4 如果不想动 sshd 配置还有一条“绕行路线”我后来复盘时也想明白了一个替代方案。如果你极度不想动 sshd 算法配置或者公司安全基线规定 sshd_config 不允许改动那么可以在运行 OUI 之前手工把集群节点间的 SSH 互信准备好然后在 OUI 的 “SSH Connectivity” 界面选择“跳过”或“不配置”。但如果你用的是图形化 OUI这一步通常是必填的跳过的操作不太顺畅而如果你用静默模式silent response file安装就可以在响应文件里把 SSH 相关参数置空或设为 false前提是你已经提前把互信配好并且安装进程能够用当前用户直接免密操作所有节点。这里推荐提前使用 Oracle 自带的sshUserSetup.sh脚本在 GI 安装介质解压目录下能找到$ORACLE_HOME/oui/bin/sshUserSetup.sh或者 Grid 安装包解压根目录里也有。它的用法是./sshUserSetup.sh -user grid -hosts db01 db02 -confirm -advanced这个脚本本质上就是帮你把公钥分发到各节点比手工一条条敲命令更规范。配好之后你用grid用户在 db01 上执行ssh db02 hostname能做到免密那 OUI 里的 JSch 即使算法协商有差异理论上也可以借你现有的互信做认证。但要注意我这次遇到的情况并不仅仅是“没有互信”而是 JSch 即使拿到密钥也可能因为算法不匹配而认证失败所以最稳妥的还是先放开 sshd 算法。5. 安装继续通过 SSH 检测之后还能遇到哪些坑5.1 完成 GI 安装和 root.shSSH Connectivity 通过后OUI 会继续执行后续的runInstaller步骤包括把安装文件同步到其他节点、运行root.sh等脚本。我这次在 db01 和 db02 上依次执行root.sh时又踩了一个小坑db01 的root.sh执行完后db02 的root.sh等了很久才跑完原因是节点间 SSH 验证又触发了一次。不过由于前面已经配置好兼容算法这次没有报错只是慢了几分钟。执行root.sh时建议在两个终端同时开好日志跟踪tail -f /u01/app/oraInventory/logs/installActions*.log5.2 安装后的基础验证GI 装完后用grid用户执行crsctl stat res -t cluvfy stage -post hwos -n db01,db02 cluvfy comp ssa -n db01,db02检查 CRS 资源是否 ONLINEASM 实例是否正常。然后再跑 DBCA 创建数据库。我在创建 RAC 数据库时ASM 磁盘组、监听配置这些都比较顺利但如果你是在装完 GI 很久之后才跑 DBCA要注意ORACLE_HOME和ORACLE_SID的环境变量别配错。还有一点如果是 19c 的 RACdbca时一定要选择 “Oracle Real Application Clusters” 选项别选成单实例。6. 避坑清单给后来者的一套速查6.1 常见问题速查表问题现象可能原因排查/解决办法OUI SSH Connectivity 报 The ssh command failedJSch 与 OpenSSH 8.x 算法协商失败修改 sshd_config 开启 ssh-rsa重启 sshd日志出现 Auth fail算法不匹配或用户/口令错误先确认手动 ssh 是否免密再查看 OUI 日志手动 ssh 免密正常OUI 仍失败JSch 不使用系统 ssh 命令而是内置库不要只看命令行重点看 OUI 的 installActions 日志修改 sshd_config 后重启 sshd 失败配置参数名写错或重复添加用sshd -t检查语法确认 OpenSSH 版本对应参数名系统被安全加固过禁止改 sshd安全基线限制预先用 sshUserSetup.sh 配好互信或走静默安装绕过 OUI 检测安装完成后 CRS 资源异常可能是网络心跳、ASM 磁盘权限问题用crsctl stat res -t、cluvfy逐步排查6.2 我的最终心得这个问题的本质是 Oracle 19c 自带的安装工具链没有跟上 OpenSSH 8.x 的安全策略更新。它不算一个难解决的问题但排查路径很绕因为“手动 SSH 正常”这个表象太有迷惑性了。我个人建议是以后只要是在 OpenSSH 8.x 或者更新版本的系统上装 Oracle 19c RAC先把/etc/ssh/sshd_config.d/oracle-rac.conf这个兼容文件放到所有节点上再开始跑安装。不要等到 OUI 报错才动手省出来的时间和心情都是实实在在的。还有一个小提醒这些兼容算法配置在安装完成后要记得评估是否需要移除毕竟安全永远是运维的一根底线。

相关推荐

OpenResearch:本地优先的研究工作流协议
OpenResearch:本地优先的研究工作流协议

1. OpenResearch 不是另一个 CLI 工具,而是本地优先研究工作流的底层协议OpenResearch 这个名字乍看像某个开源项目仓库名,或是某家科技公司的内部代号——但结合当前全网围绕CLI、autoresearch、local-first的密集搜索热度,以及大量重复出现… · 2026/9/21 0:40:26

pytest自动化测试框架进阶指南:从fixture到数据驱动与工程化实践
pytest自动化测试框架进阶指南:从fixture到数据驱动与工程化实践

1. 为什么说pytest是自动化测试进阶的第一选择1.1 先看看那些"跑得通但活不下去"的测试脚本做Python自动化测试做到一定阶段,你会发现一个扎心的现象:很多人写的测试代码,能跑,但没人敢改。我接手过一套几百个函数的接口… · 2026/9/21 0:40:26

OpenResearch实践指南:用Git和Markdown构建可回溯的研究工作流
OpenResearch实践指南:用Git和Markdown构建可回溯的研究工作流

上个月我们团队内部做了一个小决定,把一份已经做了三个月的行业研究报告,从“散落在十几个聊天窗口和共享文档里的素材”,彻底迁移到一套 OpenResearch 工作流上。当时只是抱着“试试看能不能少挨几次催”的念头,结果跑完一个完整… · 2026/9/21 0:40:26

Agent 直连 KES 拿不到内核诊断数据?TaoToken 这样改 Base URL 让 Codex 按 KEMCC 三层排查
Agent 直连 KES 拿不到内核诊断数据?TaoToken 这样改 Base URL 让 Codex 按 KEMCC 三层排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 1:36:39

RxJS v4 测试工具指南:深入理解 `Rx.ReactiveTest` 与虚拟时间断言体系
RxJS v4 测试工具指南:深入理解 `Rx.ReactiveTest` 与虚拟时间断言体系

RxJS v4 测试工具指南:深入理解 Rx.ReactiveTest 与虚拟时间断言体系 【免费下载链接】RxJS The Reactive Extensions for JavaScript 项目地址: https://gitcode.com/gh_mirrors/rxj/RxJS 导读 Rx.ReactiveTest 是 RxJS v4 测试体系(rx.testing… · 2026/9/21 1:36:39

Relay 14 指南:使用 useRefetchableFragment 以不同数据重取 Fragment
Relay 14 指南:使用 useRefetchableFragment 以不同数据重取 Fragment

前端开发工具 【免费下载链接】relay Relay is a JavaScript framework for building data-driven React applications. 项目地址: https://gitcode.com/gh_mirrors/relay29/relay 点击查看 免费下载 本篇技术指南围绕 Relay 中“以不同数据重取 Fragment&#xff… · 2026/9/21 1:36:39

基于 WKWebView 的官方 iOS WebView 插件:webview_flutter_wkwebview 深度指南
基于 WKWebView 的官方 iOS WebView 插件:webview_flutter_wkwebview 深度指南

基于 WKWebView 的官方 iOS WebView 插件:webview_flutter_wkwebview 深度指南 【免费下载链接】plugins Plugins for Flutter maintained by the Flutter team 项目地址: https://gitcode.com/gh_mirrors/pl/plugins webview_flutter_wkwebview 是 Flutter … · 2026/9/21 1:36:39

在赛灵思FPGA上部署YOLOv2目标检测:从Darknet权重到硬件加速全流程解析
在赛灵思FPGA上部署YOLOv2目标检测:从Darknet权重到硬件加速全流程解析

简介:FPGA凭借可编程与高能效特性成为深度学习边缘部署的理想选择。面向AI嵌入式开发者与FPGA工程师,这份资源聚焦在赛灵思平台上完成YOLOv2实时目标检测算法的移植,覆盖模型优化、硬件逻辑设计、Vivado HLS生成IP核、系统集成与验证等关键环… · 2026/9/21 1:36:39

山特UPS电源原理图深度解析:从读图顺序到故障维修实战
山特UPS电源原理图深度解析:从读图顺序到故障维修实战

简介:山特UPS电源原理图是一份面向电源维修人员、电子工程师及电气专业学习者的电路图纸资料,旨在帮助读者理解不间断电源的完整工作链路与排障要点。图纸覆盖输入电路、直流电源部分、输出电路与控制电路,清晰标出交流转直流、直流稳压、直流… · 2026/9/21 1:35:39

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化
Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡… · 2026/9/21 0:02:39

Word表格编号全攻略:从列表编号到题注交叉引用
Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技… · 2026/9/21 0:02:39

从第一个站到第二个站:独立开发者的静态网站选型与落地实践
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&… · 2026/9/20 0:00:41

Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行
Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 0:00:18

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程
agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and … · 2026/9/21 0:00:18

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,… · 2026/9/21 0:00:18

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码