问题说明
在客户那边suse12环境中安装Oracle 11g RAC,在做ssh互信那一步时报错无法建立互信。通过查看日志文件和自己手动ssh发现报错信息如下:
cannot read from H\203\354\030\276\001
后来我在自己的测试的SUSE 12环境中模拟这个报错信息是:
EOF reading /dev/urandom
当时看到这个错误信息一脸懵逼,看不懂H\203\354\030\276\001
这是啥玩意。然后strace
命令跟踪后发现,最后一步是在读取/dev/urandom
这个文件时报错异常退出
close(4) = 0
close(3) = 0
ioctl(0, TCGETS, {B38400 opost isig icanon echo ...}) = 0
stat("/dev/urandom", {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
open("/dev/urandom", O_RDONLY) = 3
read(3, "", 6) = 0
close(3) = 0
write(2, "EOF reading /dev/urandom\r\n", 26EOF reading /dev/urandom
) = 26
exit_group(255) = ?
+++ exited with 255 +++
所以发现可能时权限问题,但是客户说这个系统是新装的(之前已经装过一次一模一样的环境都是正常的),纳闷了,和正常节点对比也没发现什么问题。
test65:~ # ll /dev/urandom
crw-rw-rw- 1 root root 1, 3 Dec 29 09:16 /dev/urandom
后来发现这种特殊的文件,权限如果发生变化,只能通过把原有问题删除,并通过mknod
命令重新创建该文件。
解决方法:
rm /dev/random
rm /dev/urandom
mknod -m 644 /dev/random c 1 8
mknod -m 644 /dev/urandom c 1 9
chown root:root /dev/random /dev/urandom
执行以上命令后即可解决问题。