RAC手动配置SSH互信必须为root、grid、oracle三用户在各节点分别执行ssh-keygen生成密钥,并将所有节点(含本机hostname)公钥合并写入每个节点的authorized_keys,权限须设为600,且需临时禁用~/.ssh/config以防cluvfy校验失败。
ssh-keygen 和 authorized_keys 是 rac 环境下手动配置 ssh 互信最底层、最可控的方式。它不依赖 oracle 脚本,适合调试失败场景或定制化部署。
为什么不能只跑一次 ssh-keygen 就完事?
因为 RAC 要求每个用户(root、grid、oracle)在每个节点上都独立完成密钥对生成,并且所有节点的公钥必须互相写入对方的 authorized_keys —— 缺一不可。
常见错误是只在 node1 上生成密钥,然后试图把它的公钥复制到所有节点,结果 node2 到 node1 的反向连接失败,cluvfy 直接报 PRVF-7532。
实操建议:
- 逐个登录每个节点,切换到目标用户(如
su - grid),再执行密钥生成 - 强制指定密钥类型和空密码:
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N "" - 生成后立刻检查权限:
ls -l ~/.ssh/id_rsa*,私钥必须是600,公钥必须是644,否则 SSH 拒绝加载 - DSA 密钥已过时,Oracle 19c+ 官方不再推荐,但某些老版本 GI 仍会读取
id_dsa.pub,稳妥起见可额外生成:ssh-keygen -t dsa -f ~/.ssh/id_dsa -N ""
authorized_keys 文件怎么合并才不出错?
RAC 不接受“部分互信”,authorized_keys 必须包含所有节点(含本机)的公钥,且顺序无关,但重复条目会导致解析异常。
典型翻车点:用 cat id_rsa.pub >> authorized_keys 多次追加,结果同一公钥出现多次,SSH 认证反而变慢甚至失败。
实操建议:
- 先清空再重建:
rm -f ~/.ssh/authorized_keys && touch ~/.ssh/authorized_keys - 在 node1 上汇总所有节点公钥:
for n in node1 node2 localhost $(hostname); do ssh $n "cat ~/.ssh/id_rsa.pub" 2>/dev/null >> ~/.ssh/authorized_keys; done - 确保
$(hostname)参与——Oracle 内部工具严格按hostname解析,不是 IP 或localhost - 设置最终权限:
chmod 600 ~/.ssh/authorized_keys,漏掉这步,sshd会静默拒绝使用该文件
为什么 ssh-copy-id 在 RAC 里容易失效?
ssh-copy-id 默认不处理本地回环(localhost 和 $(hostname)),而 RAC 要求节点必须能免密登录自己,否则 addNode.sh 和 root.sh 都会中途退出。
更麻烦的是,它默认只写入一个公钥,不会合并已有内容,覆盖风险高。
实操建议:
- 放弃全自动模式,改用显式循环:
NODES="node1 node2 localhost $(hostname)"; for n in $NODES; do ssh-copy-id -i ~/.ssh/id_rsa.pub $n; done - 执行前先手工验证基础连通性:
ssh node1 date、ssh $(hostname) date,不通就查/etc/hosts是否把本机 IP 映射到了正确hostname - 如果某节点提示
Permission denied (publickey),别急着重跑,先确认目标节点sshd是否启用公钥认证:grep "^PubkeyAuthentication" /etc/ssh/sshd_config应为yes
~/.ssh/config 里哪些配置会让 RAC 认证崩掉?
RAC 工具链(尤其是 cluvfy)会读取 ~/.ssh/config,一旦里面存在全局匹配或跳过校验的配置,就会绕过预期认证路径,直接报 PRVF-7532。
最危险的三类配置:
-
Host *块:触发全局覆盖,导致密钥选择错乱 -
StrictHostKeyChecking no:RAC 视为不安全,直接中止验证 -
ProxyCommand或自定义IdentityFile:让工具误用非预期密钥
实操建议:配置互信期间,临时重命名该文件:mv ~/.ssh/config ~/.ssh/config.bak;等 cluvfy stage -pre crsinst 通过后再恢复。
真正容易被忽略的点是:即使你只配了 grid 用户,也必须同步为 root 和 oracle 用户做完全相同的流程——RAC 安装过程中,这三个用户会在不同阶段被调用,缺一个,root.sh 就可能卡死在 “Setting up Oracle Cluster Ready Services” 步骤。


















