在集群节点上配置无口令的 SSH
要配置无口令的 SSH,必须先在每个集群节点上生成 RSA 或 DSA 密钥,然后将所有集群节点成员上生成的所有密钥复制到授权密钥文件 中,该文件在每个节点上都是相同的。注意,SSH 文件必须只能由 root 用户、软件安装用户(grid、Oracle)读取,因为如果其他用户可以访问一个私钥文件,则 SSH 会忽略该文件。以下示例中使用 DSA 密钥。
对于安装时要使用的 Oracle 软件安装所有者(grid、oracle),您必须为每个所有者分别配置无口令的 SSH。
要配置无口令的 SSH,完成以下任务:
在每个节点上创建 SSH 目录并生成 SSH 密钥
在每个节点上完成以下步骤:
以软件所有者身份(此例中为 grid 用户)登录。
[root@linuxidc1 ~]# su - grid
要确保您是以 grid 登录的,并验证用户 ID 与预期的用户 ID(即您已为 grid 用户分配的用户 ID)一致,输入 id 和 id grid 命令。确保 Oracle 用户组和用户与您当前使用的用户终端窗口进程的组和用户 ID 相同。例如:
如有必要,在 grid 用户的主目录下创建 .ssh 目录并设置相应权限,以确保仅 oracle 用户具有读写权限:
[grid@linuxidc1 ~]$ mkdir ~/.ssh
[grid@linuxidc1 ~]$ chmod 700 ~/.ssh
输入以下命令,为 SSH 协议生成 DSA 密钥对(公共密钥和私有密钥):出现提示时,接受默认的密钥文件位置和无口令短语设置(按 [Enter]):
[grid@linuxidc1 ~]$ /usr/bin/ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/grid/.ssh/id_dsa): [Enter]
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]
Your identification has been saved in /home/grid/.ssh/id_dsa.
Your public key has been saved in /home/grid/.ssh/id_dsa.pub.
The key fingerprint is:
7b:e9:e8:47:29:37:ea:10:10:c6:b6:7d:d2:73:e9:03grid@linuxidc1
注:Oracle Clusterware 11g 第 2 版及更高版本不支持使用口令短语的 SSH。Oracle 11g 第 2 版及更高版本必须使用无口令的 SSH。
此命令将 DSA 公共密钥写入 ~/.ssh/id_dsa.pub 文件,将私有密钥写入 ~/.ssh/id_dsa 文件。
绝不要将私钥分发给任何无权执行 Oracle 软件安装的用户。
对您想使其成为集群成员的所有其他使用 DSA 密钥的节点 (linuxidc2) 重复第 1 步到第 4 步。
将所有密钥添加到一个公共 authorized_keys 文件
现在,每个 Oracle RAC 节点都包含用于 DSA 的公共和私有密钥,您www.linuxidc.com需要在其中一个节点上创建一个授权密钥文件 (authorized_keys)。授权密钥文件只是一个包含每个用户(每个节点)的 DSA 公共密钥的文件。在授权密钥文件包含了所有公共密钥后,将其分发至集群中的所有其他节点。
注:每个节点上 grid 用户的 ~/.ssh/authorized_keys 文件必须包含您在所有集群节点上生成的所有 ~/.ssh/id_dsa.pub 文件中的内容。
在集群中的一个节点上完成以下步骤以生成授权密钥文件,然后分发该文件。对于此文而言,我将使用集群中的主节点 linuxidc1:
从 linuxidc1(本地节点)中确定所有者的主目录 .ssh 中是否存在授权密钥文件 ~/.ssh/authorized_keys。大多数情况下,该文件是不存在的,因为本文假设您正在进行新的安装。如果该文件不存在,那么现在进行创建:
[grid@linuxidc1 ~]$ touch ~/.ssh/authorized_keys
[grid@linuxidc1 ~]$ ls -l ~/.ssh
total 8
-rw-r--r-- 1 grid oinstall 0 Nov 12 12:34 authorized_keys
-rw------- 1 grid oinstall 668 Nov 12 09:24 id_dsa
-rw-r--r-- 1 grid oinstall 603 Nov 12 09:24 id_dsa.pub
在 .ssh 目录中,您会看到前面生成的 id_dsa.pub 密钥以及空白文件 authorized_keys。
在本地节点 (linuxidc1) 上,使用 SCP(安全复制)或 SFTP(安全 FTP)将 ~/.ssh/id_dsa.pub 公共密钥的内容从集群中的两个 Oracle RAC 节点复制到刚才创建的授权密钥文件 (~/.ssh/authorized_keys) 中。同样,从 linuxidc1 进行该操作。系统将提示您为每个访问的 Oracle RAC 节点输入 grid OS 用户帐户口令。
以下示例是在 linuxidc1 节点上运行的,假定集群有两个节点,分别是 linuxidc1 和 linuxidc2:
[grid@linuxidc1 ~]$ ssh linuxidc1 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
The authenticity of host 'linuxidc1 (192.168.1.151)' can't be established.
RSA key fingerprint is 2f:0d:2c:da:9f:d4:3d:2e:ea:e9:98:20:2c:b9:e8:f5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'linuxidc1,192.168.1.151' (RSA) to the list of known hosts.
grid@linuxidc1'spassword: xxxxx
[grid@linuxidc1 ~]$ ssh linuxidc2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
The authenticity of host 'linuxidc2 (192.168.1.152)' can't be established.
RSA key fingerprint is 97:ab:db:26:f6:01:20:cc:e0:63:d0:d1:73:7e:c2:0a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'linuxidc2,192.168.1.152' (RSA) to the list of known hosts.
grid@linuxidc2'spassword: xxxxx
第一次使用 SSH 从某个特定系统连接到节点时,您会看到类似以下的消息:
The authenticity of host 'linuxidc1 (192.168.1.151)' can't be established.
RSA key fingerprint is 2f:0d:2c:da:9f:d4:3d:2e:ea:e9:98:20:2c:b9:e8:f5.
Are you sure you want to continue connecting (yes/no)? yes
在该提示下输入 yes 继续。于是,会将公共主机名添加到 ~/.ssh 目录下的 known_hosts 文件中,以后再从此系统连接到相同节点时就不会看到此消息了。
此时,linuxidc1 上的授权密钥文件 (~/.ssh/authorized_keys) 中含有来自集群中各个节点的 DSA 公共密钥。
[grid@linuxidc1 ~]$ ls -l ~/.ssh
total 16
-rw-r--r-- 1 grid oinstall 1206 Nov 12 12:45 authorized_keys
-rw------- 1 grid oinstall 668 Nov 12 09:24 id_dsa
-rw-r--r-- 1 grid oinstall 603 Nov 12 09:24 id_dsa.pub
-rw-r--r-- 1 grid oinstall 808 Nov 12 12:45 known_hosts
我们现在将其复制到集群中的其余节点。在我们的双节点集群示例中,www.linuxidc.com唯一剩下的节点就是 linuxidc2。使用 scp 命令将授权密钥文件复制到集群中的所有其余节点:
[grid@linuxidc1 ~]$ scp ~/.ssh/authorized_keys linuxidc2:.ssh/authorized_keys
grid@linuxidc2'spassword: xxxxx
authorized_keys 100% 1206 1.2KB/s 00:00
通过登录到节点并运行以下命令,为集群中的两个 Oracle RAC 节点更改授权密钥文件的权限:
[grid@linuxidc1 ~]$ chmod 600 ~/.ssh/authorized_keys
在集群节点上启用 SSH 用户等效性
将包含所有公共密钥的 authorized_keys 文件复制到集群中的每个节点之后,完成本节中的各个步骤以确保正确配置了集群成员节点之间的无口令 SSH 连接。在本示例中,将使用名为 grid 的 Oracle Grid Infrastructure 软件所有者。
当您运行本节中的测试 SSH 命令时,如果看到除日期和主机名之外的任何其他消息或文本,则 Oracle 安装将失败。如果任一节点提示您输入口令或口令短语,则验证节点上的 ~/.ssh/authorized_keys 文件中包含了正确的公共密钥并且您已创建了具有同样组成员关系和 ID 的 Oracle 软件所有者。进行必要的更改,以确保您在输入这些命令时只显示日期和主机名。您应当确保对生成任何输出或询问任何问题的登录脚本的任何部分进行修改,以便它们仅当 shell 是交互式 shell 时才会生效。
在您希望运行 OUI 的系统 (linuxidc1) 上,以 grid 用户身份登录。
[root@linuxidc1 ~]# su - grid
如果 SSH 配置正确,您将能够从终端对话使用 ssh 和 scp 命令,而无需提供口令或口令短语。
[grid@linuxidc1 ~]$ ssh linuxidc1 date
Fri Nov 13 09:46:56 EST 2009
linuxidc1
[grid@linuxidc1 ~]$ ssh linuxidc2 date
Fri Nov 13 09:47:34 EST 2009
linuxidc2
如果需要密码的话,检查grid文件夹的权限,两边节点目标的权限需要一致,权限太大(比如是777)则需把权限改小(如755)