oracle rac节点ssh互信失败主因是安装工具严格校验scp输出格式、强制rsa-2048密钥、禁用.ssh/config全局配置、要求节点自连及/home权限为700,而非密钥未传输。

Oracle RAC节点间SSH互信失败,大概率不是密钥没传过去,而是Oracle安装/校验工具在用一套“更严、更老、更特定”的方式调用SSH——它不认ed25519密钥、不走标准ssh_config、甚至不看你手动执行过的ssh node date是否成功。
为什么ssh node date能通,但cluvfy或gridSetup.sh仍报INS-06006?
Oracle内部脚本(如cluvfy、runInstaller)实际调用的是带固定参数的ssh和scp命令,且对输出格式、算法、权限、环境变量极度敏感:
- 它调用
scp传输测试文件,但OpenSSH 8.0+(RHEL 8.3+/OL8+默认)改了进度输出格式,导致Oracle解析失败——哪怕ssh -V显示OpenSSH_8.x,就基本锁定此因 - 它强制要求RSA-2048密钥:
ssh-keygen -t rsa -b 2048;ed25519会被Grid Infrastructure静默忽略,ssh-copy-id可能因签名算法不匹配而失败 - 它不读
/etc/ssh/ssh_config,但会自己解析~/.ssh/config——一旦存在Host *或StrictHostKeyChecking no,直接报PRVF-7532 - 它以
root身份运行校验(CVU阶段),所以/root/.ssh权限和密钥也必须合规,不只是oracle或grid用户
如何验证SSH互信是否真被Oracle认可?
别只信你终端里敲的命令。要模拟Oracle真实调用路径:
- 用
su - grid -c "ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 -o BatchMode=yes grid@node2 date",必须5秒内返回且无密码提示 - 同样跑
scp -T -o StrictHostKeyChecking=no -o ConnectTimeout=5 /tmp/testfile grid@node2:/tmp/——-T禁用伪终端,是绕过OpenSSH 8.x输出变更的关键 - 检查
/home/grid权限:必须是700;~/.ssh必须是700;id_rsa必须是600;authorized_keys必须是644 - 确认
$(hostname)和localhost都出现在ssh-copy-id目标列表中,缺一不可——Oracle校验时会尝试连这两个标识
哪些配置项最容易被忽略却直接导致失败?
这些点不常出现在教程里,但实操中高频踩坑:
-
/etc/ssh/sshd_config里PubkeyAuthentication和PermitRootLogin必须为yes(或without-password),且不能被注释;改完必须systemctl restart sshd -
/etc/hosts中每台节点的IP映射必须严格匹配hostname命令输出(小写、无别名、无空格),且所有节点内容一致;hostname -f结果必须能反向解析 - 禁用
~/.ssh/config:临时重命名它,比如mv ~/.ssh/config ~/.ssh/config.bak;Host *块哪怕只有一行,也会触发PRVF-7532 - OCR磁盘I/O慢或SSH响应慢都会拖垮
crsctl等命令——但它们的失败表现和互信失败高度相似,需用dd if=/dev/oracle/ocr01 of=/dev/null bs=1M count=1024 iflag=direct和ssh -o ConnectTimeout=5 ...分开验证
真正卡住的从来不是“怎么配SSH”,而是Oracle用一套封闭逻辑去验证SSH——它不关心你多懂OpenSSH,只认它文档里写的那几条硬约束。每次失败,先查ssh -V、ls -l ~/.ssh、grep -i "pubkey\|permit" /etc/ssh/sshd_config、cat /etc/hosts | grep $(hostname),比重跑sshUserSetup.sh快得多。











