Oracle RAC集群SSH等价性如何正确配置?

来源:站长平台作者:香港程序员头衔:程序员
导读:本期聚焦于香港程序员创作的《Oracle RAC集群SSH等价性如何正确配置?》,敬请观看详情。为什么Oracle RAC安装时经常在SSH互信这一步报错?很多情况下并不是密钥没有生成,而是权限、主机名解析或用户环境存在偏差。Oracle Grid Infrastructure在安装和升级阶段会通过ssh、scp在节点间执行命令和复制文件,必须提前建立双向免密登录。本文从RAC节点通信机制切入,说明Oracle软件如何调用SSH,然后给出基于RSA密钥的等价性配置步骤,包含密钥生成、authorized_keys权限设置、known_hosts初始化和批量下发方法。文章还会演示如何用ssh命令做双向验证,并分析权限过宽、SELinux拦截、DNS解析不一致等常见故障的排查思路。读者可以按照文中的脚本模板快速完成多节点配置,避免安装阶段因SSH互信问题返工。

RAC安装过程中最常见的报错之一就是节点间SSH互信失败,导致安装程序无法把软件分发到远端节点。这个问题的根源通常不是密钥没有生成,而是权限、主机名或用户环境存在偏差。Oracle Grid Infrastructure在安装和升级时会通过sshscp在节点间执行命令和复制文件,因此必须在所有节点之间建立双向的SSH等价性。

Oracle RAC集群SSH等价性如何正确配置?

本文从RAC节点通信机制切入,结合实际操作步骤说明如何用RSA密钥完成互信配置,并给出验证和排错方法。

一、为什么RAC节点必须配置SSH等价性

Oracle RAC由多个节点组成,集群软件安装阶段需要通过远程命令把Grid Infrastructure和数据库软件复制到其他节点。Oracle Universal Installer会在源节点执行sshscp等命令,要求目标节点无需输入密码即可执行。这里的等价性不是单向信任,而是任意两个节点之间都能双向免密登录,因为安装过程可能在任一节点发起。

如果没有配置等价性,安装程序会在执行远程命令时提示输入密码或直接因认证失败退出。即使手动输入密码能够继续,后续的运行期管理命令如srvctlcrsctl也可能在切换节点时受到阻碍。因此配置SSH等价性是RAC部署的前置条件,也是集群健康检查中常见的核对项。

从原理上看,SSH等价性依赖公钥认证机制。每个节点上的Oracle用户生成一对密钥,私钥留在本地,公钥写入所有节点~/.ssh/authorized_keys文件。当节点A访问节点B时,SSH客户端使用A的私钥签名一个随机挑战,节点B通过已保存的A公钥验证签名,从而确认身份。由于整个过程不需要口令,就实现了免密登录。

二、配置前的环境准备与用户检查

开始配置前,需要确认所有节点的主机名解析一致。RAC节点之间的通信基于主机名,如果/etc/hosts或DNS解析结果不一致,即使密钥配置正确,SSH连接也可能因为主机名无法解析而失败。建议在每台服务器的/etc/hosts中显式配置所有节点的IP地址和短主机名、全限定主机名,并保证文件内容一致。

同时要检查Oracle用户是否存在且UID相同。RAC要求所有节点上的oracle用户和grid用户拥有相同的UID和GID,否则安装程序在设置文件权限和共享存储访问时会产生权限冲突。可以使用id oracleid grid命令核对,必要时通过useradd -uusermod -u调整。

还需要确认~/.ssh目录的状态。如果该目录不存在,需要先创建;如果已经存在,检查归属用户和权限。默认情况下,sshdStrictModes参数为yes,要求~/.ssh目录仅属主可写,权限不能过宽。建议将目录权限设置为700,后续的密钥文件设置为600

三、基于RSA密钥的等价性配置步骤

首先在每个节点上以Oracle用户身份生成RSA密钥对。执行下面的命令可以生成2048位密钥,并且不设置私钥口令。没有口令是为了后续SSH命令能够在无人值守情况下自动执行。

mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa -b 2048 -N "" -f ~/.ssh/id_rsa

生成后每个节点都会产生id_rsaid_rsa.pub两个文件。私钥必须仅保存在本节点,公钥则需要分发到所有节点。最简单的分发方式是使用ssh-copy-id命令,它可以自动把公钥追加到目标节点authorized_keys文件并修正权限。假设节点名为rac1rac2,可在rac1上执行:

ssh-copy-id -i ~/.ssh/id_rsa.pub oracle@rac1
ssh-copy-id -i ~/.ssh/id_rsa.pub oracle@rac2

如果环境中没有ssh-copy-id,可以手动合并公钥。先将各节点的id_rsa.pub集中到一个临时文件,再使用重定向追加到authorized_keys。注意追加符号在代码中使用时需要写成>>,下面示例已经转义。

cat /tmp/rac1_id_rsa.pub >> ~/.ssh/authorized_keys
cat /tmp/rac2_id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

所有节点都完成公钥分发后,要再次检查权限。正确状态是~/.ssh700id_rsa600authorized_keys600。如果权限过宽,SSH服务端会拒绝公钥认证,即使文件内容完全正确也会要求输入密码。可以通过ls -ld ~/.sshls -l ~/.ssh/authorized_keys查看。

另外,首次连接时需要在每个节点上执行一次手动SSH,以生成known_hosts文件并记录主机指纹。否则后续自动执行命令时可能会因为无法确认主机指纹而中断。可以在一个节点上运行循环,依次连接所有主机,回答yes后再继续。

四、等价性验证与常见故障排查

配置完成后,必须在每个节点之间双向验证。可以在rac1上执行ssh rac2 date,再在rac2上执行ssh rac1 date。如果两条命令都能在不输入密码的情况下返回目标节点时间,说明等价性配置成功。注意需要同时测试短主机名和全限定主机名,因为Oracle安装程序两种名称都可能使用。

验证失败时,先查看目标节点日志/var/log/secure/var/log/auth.log中的SSH记录,常见原因包括Authentication refused: bad ownership or modesPermission denied (publickey,password)等。此时重点检查家目录权限、~/.ssh目录权限和authorized_keys文件权限。某些Linux发行版的sshd还会检查用户家目录是否组可写,如果/home/oracle权限为775也会被拒绝。

如果权限没有问题但仍然失败,需要确认SELinux状态。在RHEL或CentOS系统中,SELinux可能阻止SSH读取authorized_keys文件,可以通过getenforce查看状态,并在测试环境中使用setenforce 0临时关闭。如果关闭后成功,则需要通过restorecon -R -v ~/.ssh恢复文件安全上下文,或者调整SELinux布尔值,而不是永久关闭。

另一个容易忽略的是主机名解析。若/etc/hosts中同一IP对应多个主机名,或者不同节点对同一主机名解析到不同IP,即使密钥正确,连接也可能被拒绝。建议使用hostnamehostname -igetent hosts核对每个节点的解析结果,确保所有节点信息一致。

五、多节点批量配置与安全建议

当节点数量较多时,手动逐台执行命令容易遗漏。可以编写一个批量脚本,将公钥收集到一个目录后统一分发。下面示例假设节点列表存储在hosts.txt中,每行一个主机名,脚本会自动生成密钥并复制到所有节点。

#!/bin/bash
USER=oracle
HOSTS="rac1 rac2 rac3 rac4"
for h in $HOSTS; do
  ssh-copy-id -i ~/.ssh/id_rsa.pub $USER@$h
done
for h in $HOSTS; do
  ssh $USER@$h "chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys"
done

安全方面,建议不要为root用户配置等价性,而是使用专门的gridoracle用户,并且定期轮换密钥。RAC安装完成后的日常管理中,SSH互信仍然会被集群工具使用,因此不要随意删除公钥或修改权限。如果服务器维护导致家目录被重置,需要重新执行上述检查。

最后还要注意,在某些云环境或强制使用证书登录的场景中,密码登录可能已经被禁用,此时只能通过控制台或带外管理先将公钥注入系统。无论如何,只要保证所有节点之间能够双向免密执行命令,Oracle RAC的安装和后续集群管理就能顺利进行。

Oracle RACSSH等价性集群互信修改时间:2026-08-26 04:25:48

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。