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