Oracle rac建立互信及ssh免密登陆配置的几种方法
简介
所谓用户等价,就是以Oracle用户从一个节点连接到另一个节点时,不需要输入密码。
Oracle GI和DB的安装过程都是先在一个节点安装,然后安装程序自动把本地安装好的内容复制到远程相同的目录下,这是一个后台拷贝过程,用户没有机会输入密码验证身份,必须进行配置。
虽然在安装软件的过程中,Oracle会自动配置SSH对等性,不过还是建议在安装软件之前手工配置。
为ssh和scp创建连接,检验是否存在:
ls -l /usr/local/bin/ssh
ls -l /usr/local/bin/scp
不存在则创建:
1 2 | /bin/ln -s /usr/bin/ssh /usr/local/bin/ssh /bin/ln -s /usr/bin/scp /usr/local/bin/scp |
另外需要说明的是,配置了ssh后也经常有连接拒绝的情况,多数情况下是由于/etc/ssh/ssh_config、/etc/hosts.allow和/etc/hosts.deny这3个文件的问题。
/etc/ssh/ssh_config文件中加入GRID及Oracle用户所在的组:
1 | AllowGroups sysadmin asmdba oinstall |
修改vi /etc/hosts.deny文件,用#注释掉sshd:ALL,或者加入ssh:ALL EXCEPT 2个节点的公网及2个节点的私网,中间用逗号隔开,如:
1 | ssd : ALL EXCEPT 192.168.59.128,192.168.59.129,10.10.10.5,10.10.10.6 |
也可以修改:/etc/hosts.allow文件,加入sshd:ALL或
1 | sshd:192.168.59.128,192.168.59.129,10.10.10.5,10.10.10.6 |
若2个文件的配置有冲突以/etc/hosts.deny为准。
重启ssd服务:/etc/init.d/sshd restart
方法1:脚本:用sshUserSetup.sh快速创建互信(推荐方法)
sshUserSetup.sh在GI安装介质解压缩后的sshsetup目录下。下面两条命令在一个节点上执行即可,在root用户下执行:
1 2 | ./sshUserSetup.sh -user grid -hosts "raclhr-12cR1-N2 raclhr-12cR1-N1" -advanced exverify –confirm ./sshUserSetup.sh -user oracle -hosts "raclhr-12cR1-N2 raclhr-12cR1-N1" -advanced exverify -confirm |
输入yes及密码一路回车即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [oracle@raclhr-12cR1-N1 grid]$ ll total 80 drwxr-xr-x 4 root root 4096 Jan 16 17:04 install -rwxr-xr-x 1 root root 34132 Jul 11 2014 readme.html drwxrwxr-x 2 root root 4096 Jul 7 2014 response drwxr-xr-x 2 root root 4096 Jul 7 2014 rpm -rwxr-xr-x 1 root root 5085 Dec 20 2013 runcluvfy.sh -rwxr-xr-x 1 root root 8534 Jul 7 2014 runInstaller drwxrwxr-x 2 root root 4096 Jul 7 2014 sshsetup drwxr-xr-x 14 root root 4096 Jul 7 2014 stage -rwxr-xr-x 1 root root 500 Feb 7 2013 welcome.html [oracle@raclhr-12cR1-N1 grid]$ cd sshsetup/ [oracle@raclhr-12cR1-N1 sshsetup]$ ll total 32 -rwxr-xr-x 1 root root 32334 Jun 7 2013 sshUserSetup.sh [oracle@raclhr-12cR1-N1 sshsetup]$ pwd /soft/grid/sshsetup |
校验:
1 2 3 4 5 6 7 | ssh raclhr-12cR1-N1 date ssh raclhr-12cR1-N2 date ssh raclhr-12cR1-N1-priv date ssh raclhr-12cR1-N2-priv date ssh-agent $SHELL ssh-add |
方法2:手工配置
分别配置grid和oracle用户的ssh
1 2 3 4 5 | [oracle@node1 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys [oracle@node1 ~]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys [oracle@node1 ~]$ ssh node2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys ->输入node2密码 [oracle@node1 ~]$ ssh node2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys ->输入node2密码 [oracle@node1 ~]$ scp ~/.ssh/authorized_keys node2:~/.ssh/authorized_keys ->输入node2密码 |
测试两节点连通性,校验:
1 2 3 4 5 6 7 8 9 | [oracle@node1 ~]$ ssh node1 date [oracle@node1 ~]$ ssh node2 date [oracle@node1 ~]$ ssh node1-priv date [oracle@node1 ~]$ ssh node2-priv date [oracle@node2 ~]$ ssh node1 date [oracle@node2 ~]$ ssh node2 date [oracle@node2 ~]$ ssh node1-priv date [oracle@node2 ~]$ ssh node2-priv date |
第二次执行时不再提示输入口令,并且可以成功执行命令,则表示SSH对等性配置成功。
方法3:图形界面
输入密码,按Setup按钮建立SSH无密码互连接。如果在安装准备阶段手工配置了SSH连接,直接点Test按钮测试即可。依照上图设置好,单击“Next”按钮。
配置ssh免密登陆
1. 有密码的情况
1.1 生成 SSH 密钥对
在本地计算机上使用 ssh-keygen 命令生成 SSH 密钥对。生成的密钥对包括公钥和私钥,公钥将用于免密登录。
1 | ssh-keygen |
在生成密钥对时,需要指定密钥类型(默认为 RSA),密钥长度(默认为 2048 位),并为私钥设置密码(可选)。
1.2 将公钥复制到服务器
将本地计算机上的公钥复制到服务器上,可以使用 ssh-copy-id 命令,该命令会将公钥添加到服务器上的 ~/.ssh/authorized_keys
文件中。要使用此命令,需要在命令中指定要将公钥添加到的服务器的用户名和 IP 地址。
1 | ssh-copy-id user@server_ip |
1.3 测试免密登录
测试使用 SSH 连接到服务器:
1 | ssh user@server_ip |
如果一切正常,将无需输入密码即可登录到服务器。
需要注意的是,为了确保安全,应该禁用密码登录。可以编辑服务器上的 SSH 配置文件 /etc/ssh/sshd_config,并将 PasswordAuthentication 选项设置为 no,以禁用密码登录。完成后,重新启动 SSH 服务以应用更改:
1 | sudo systemctl restart sshd |
这样,就可以在 CentOS 服务器上配置 SSH 公钥认证,实现免密登录了。
2. 无密码的情况
2.1 生成SSH密钥对
1 | ssh-keygen |
在生成密钥对时,需要指定密钥类型(默认为 RSA),密钥长度(默认为 2048 位),并为私钥设置密码(可选)。
2.2 手动拷贝公钥到目标服务器
手动拷贝上一步生成密钥对中的公钥内容,公钥存储在 ~/.ssh/id_rsa.pub
文件中,将其复制到目标服务器的~/.ssh/authorized_keys
文件中。
注意,authorized_keys每一行代表一个已知主机,每行末尾不要有多余的字符(如空格等),否则将无法登录
2.3 测试免密登录
测试使用 SSH 连接到服务器:
1 | ssh user@server_ip |
如果一切正常,将无需输入密码即可登录到服务器。
小结
公钥与私钥的用途:
在 SSH 连接中,公钥和私钥用于 SSH 公钥认证。当您连接到远程服务器时,服务器会向您的 SSH 客户端发送一个加密的请求,其中包括您本地计算机上的公钥。如果服务器在其 authorized_keys 文件中找到您的公钥,则服务器将认为您是可信任的,并允许访问服务器而不需要输入密码。
authorized_keys的作用:
authorized_keys 是 SSH 协议中用于公钥认证的文件名。当使用 SSH 连接到远程服务器时,SSH 客户端会向服务器发送一个加密的请求,其中包括本地计算机上的公钥。服务器会检查在 authorized_keys 文件中是否存在对应的公钥,如果存在,则认为是可信任的,并允许访问服务器而不需要输入密码。
值得注意的是,authorized_keys 文件是一个文本文件,每行包含一个公钥。通常情况下,当在本地计算机上生成 SSH 密钥对时,会自动在 ~/.ssh/authorized_keys 文件中添加本机公钥。如果需要添加其他用户的公钥以实现 SSH 公钥认证,则可以将该用户的公钥添加到服务器上的 authorized_keys 文件中。