跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Oracle RAC环境怎么配置SSH互信_利用ssh-keygen和认证文件实现免密

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
。 最危险的三类配置: oracle知识库 oracle知识库下载 下载
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” 步骤。

相关文章