oui在图形会话中启动时环境变量继承错乱,导致$home、ssh_auth_sock异常,无法正确读取~/.ssh/id_rsa或写入known_hosts;需确认实际运行用户家目录、严格校验.ssh权限与属主,并清理重建密钥对。
检查~/.ssh目录权限是否被oui继承错乱
oracle安装器(oui)在图形会话(如vnc、x11)中启动时,不会继承你终端里验证用的shell环境。它常以错误的home路径或空的ssh_auth_sock运行,导致读不到~/.ssh/id_rsa,或写入known_hosts失败——哪怕ssh rac2 date手动执行完全正常。
关键点在于:OUI实际操作的是grid或oracle用户的家目录,但可能因环境变量污染或VNC会话初始化不全,把$HOME指向了/、/root,甚至空字符串。
- 先确认OUI真正使用的用户家目录:
ps -ef | grep gridSetup.sh | grep -v grep,再找其父进程的env或直接查/proc/<pid>/environ</pid>(需root) - 对比终端中
echo $HOME和OUI实际看到的$HOME是否一致;不一致就说明环境没传进去 - 检查
~/.ssh是否存在且属主正确:ls -ld /home/grid/.ssh,必须是grid:oinstall,权限严格为700 -
~/.ssh/id_rsa和id_rsa.pub权限必须是600和644;任何group或other可读都会被OpenSSH拒绝
验证known_hosts是否被OUI写入到错误位置
OUI在跑互信测试时,会尝试ssh连接并自动追加远端主机密钥到known_hosts。但如果$HOME不对,它可能写到/root/.ssh/known_hosts甚至报错“no such file or directory”后静默失败——而你手动验证时用的是自己的$HOME,所以完全不受影响。
最直接的验证方式是:在OUI启动前,用同一用户在干净终端中模拟其行为:
- 临时清空
~/.ssh/known_hosts:rm -f ~/.ssh/known_hosts - 重放OUI会做的动作:
su - grid -c "ssh -o StrictHostKeyChecking=no rac2 date" - 观察是否成功生成
~/.ssh/known_hosts,以及该文件是否归属grid、权限是否为644 - 若失败,看错误输出——常见是
mkdir: cannot create directory ‘/root/.ssh’: Permission denied,这就暴露了HOME错配
避免VNC/X11会话污染HOME和SSH_AUTH_SOCK
VNC会话常以root启动,再切换到grid用户,但未重置关键环境变量。OUI直接继承这个“脏”环境,导致SSH逻辑走偏。
不要依赖VNC里点开终端再运行gridSetup.sh——这大概率复现问题。稳妥做法是:
- 用
su - grid切到目标用户(带-确保加载.bash_profile),再启动OUI:./gridSetup.sh & - 或者显式导出干净环境:
HOME=/home/grid SSH_AUTH_SOCK= su -c "./gridSetup.sh" grid - 禁用
SSH_AUTH_SOCK(OUI不用代理转发):unset SSH_AUTH_SOCK后再启动 - 确认
/etc/passwd中grid用户的home字段正确:getent passwd grid | cut -d: -f6
清理残留并重建.ssh比反复重试更有效
一旦发现权限或路径异常,别在原.ssh上修修补补。OUI对.ssh状态极其敏感,残留的authorized_keys格式错误、known_hosts权限越界、或config里写了OUI不识别的指令(如ProxyJump),都会导致检测中断。
标准清理重建流程(以grid用户执行):
rm -rf ~/.sshmkdir -m 700 ~/.sshssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""- 用
ssh-copy-id或手动分发公钥,确保所有节点(含自连)都写入~/.ssh/authorized_keys - 逐个测试:
ssh rac1 date、ssh rac2 date、ssh $(hostname) date、ssh $(hostname -s) date
做完这些再进OUI点Setup,不是“碰运气”,而是把OUI能踩的坑提前堵死。真正的麻烦不在SSH通不通,而在OUI用哪套环境、往哪写文件、按什么规则校验——这些细节一旦错位,ssh -V显示再新也没用。











