1 Linux 公钥认证说明
在不同的Linux主机之间连接时,SSH支持两种认证方式:
- (1) 密码认证:每次ssh连接时都需要输入密码;
- (2) 公钥认证:创建一对密钥,把公钥放在需要访问的服务器上。只需在配置时输入一次密码,之后ssh连接就无需输入密码
ssh-keygen命令专门是用来生成密钥的。该命令有很多选项,这里列出了最基本的四个:
-t 用来指定密钥类型(dsa | ecdsa | ed25519 | rsa | rsa1);
-P 用来指定密语
-f 用来指定生成的密钥文件名
-C 用来添加注释
比如:ssh-keygen -t rsa -P 123456 -f dave -C 'the key of www.cndba.cn';就是新建了密语为123456文件名为dave的密钥。此命令会生成dave和dave.pub两个文件,前者为私钥文件,后者为公钥文件。
假设有两台主机为 A 和 B 。如果A主机想免密码登录到B主机上,则A主机上存放私钥,B 主机上存放公钥。
通过ssh-keygen 命令生成的两个文件为:公钥文件 ~/.ssh/id_rsa.pub; 私钥文件 ~/.ssh/id_rsa 。而B主机上存放公钥时,需要将id_rsa.pub的内容存放到~/.ssh/authorized_keys 文件内,并且保证权限为600 。
操作步骤如下:
1. A主机上生成key
$ ssh-keygen -t rsa
$ ls
id_rsa id_rsa.pub
然后将key导入到远程的B主机上,并修改权限
2. A主机上操作
$ cat /root/.ssh/id_rsa.pub | ssh root@远程服务器ip 'cat - >> ~/.ssh/authorized_keys'
3. B主机上操作
$ chmod 600 ~/.ssh/authorized_keys
这里也可以直接使用ssh-copy-id命令将公钥内容导入到远程主机上,而不需要在B主机上再修改权限: $ ssh-copy-id -i /root/.ssh/id_rsa root@xxx,xxx,xxx,xxx
当然也可以直接使用sshUserSetup.sh来配置,参考:
Linux SSH 互信配置脚本 sshUserSetup.sh
http://www.cndba.cn/dave/article/2530
使用Oracle的sshUserSetup.sh脚本配置SSH互信
http://www.cndba.cn/Expect-le/article/1766
Linux 系统之间是以密钥的方式建立的信任关系,而不是以用户的密码,所以在互信配置之后,密码是可以随意修改,且不影响互信的使用。
也就是说Linux密码认证和密钥认证在配置完ssh 互信之后就没有必然联系了,除非我们需要重新生成密钥的公钥,并上传远程Server,那时就需要输入远程的Server的密码,这个本身就是互信的配置过程。
在RAC 安装的时候,要求我们配置节点之间的用户等效性。 实际上主要用途是安装时的文件复制和同步执行安装。配置之后,只要我们采取不重建密钥文件的方式直接修改GRID用户和ORACLE用户的密码,对互信是没有影响的,那么两边的密码不相同。
下面来验证这个过程。
2 测试环境
[grid@www.cndba.cn/dave trace]$ crsctl query crs activeversion
Oracle Clusterware active version on the cluster is [12.2.0.1.0]
[grid@www.cndba.cn/dave ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.DATA.dg
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.FAST_RECOVERY.dg
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.LISTENER.lsnr
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.OCR_VOTE.dg
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.net1.network
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.ons
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE rac2 STABLE
ora.MGMTLSNR
1 OFFLINE OFFLINE STABLE
ora.asm
1 ONLINE ONLINE rac1 Started,STABLE
2 ONLINE ONLINE rac2 Started,STABLE
3 OFFLINE OFFLINE STABLE
ora.cvu
1 ONLINE ONLINE rac2 STABLE
ora.orcl.db
1 ONLINE INTERMEDIATE rac1 Instance Starting,ST
ABLE
2 ONLINE INTERMEDIATE rac2 Stuck Archiver,HOME=
/u01/oracle/12.2.0/d
b_1,STABLE
ora.qosmserver
1 ONLINE ONLINE rac2 STABLE
ora.rac1.vip
1 ONLINE ONLINE rac1 STABLE
ora.rac2.vip
1 ONLINE ONLINE rac2 STABLE
ora.scan1.vip
1 ONLINE ONLINE rac2 STABLE
--------------------------------------------------------------------------------
[grid@www.cndba.cn/dave ~]$
3 修改 GRI D和 Oracle 用户的密码并验证互信
—修改之前:
[grid@www.cndba.cn/dave ~]$ ssh rac1 date
Fri Dec 29 14:43:18 CST 2017
[grid@www.cndba.cn/dave ~]$ ssh rac2 date
Fri Dec 29 14:43:22 CST 2017
[grid@www.cndba.cn/dave ~]$
—修改rac1的grid用户密码:
[grid@www.cndba.cn/dave ~]$ passwd grid
passwd: Only root can specify a user name.
[grid@www.cndba.cn/dave ~]$
[root@www.cndba.cn/dave ~]# passwd grid
Changing password for user grid.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@www.cndba.cn/dave ~]#
—分别在rac1和rac2上验证互信:
[grid@www.cndba.cn/dave ~]$ ssh rac1 date
Fri Dec 29 14:44:20 CST 2017
[grid@www.cndba.cn/dave ~]$ ssh rac2 date
Fri Dec 29 14:44:23 CST 2017
[grid@www.cndba.cn/dave ~]$
[grid@www.cndba.cn/dave ~]$ ssh rac1 date
Fri Dec 29 14:44:30 CST 2017
[grid@www.cndba.cn/dave ~]$ ssh rac2 date
Fri Dec 29 14:44:35 CST 2017
现在rac1和rac2 2台主机的grid用户密码是不一样的。但这并不影响互信的使用。
—修改rac2 grid用户的密码,并且与之前rac1的密码不同:
[root@www.cndba.cn/dave ~]# passwd grid
Changing password for user grid.
New password:
BAD PASSWORD: The password is shorter than 7 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@www.cndba.cn/dave ~]#
—验证互信:
[grid@www.cndba.cn/dave ~]$ ssh rac1 date
Fri Dec 29 14:54:25 CST 2017
[grid@www.cndba.cn/dave ~]$ ssh rac2 date
Fri Dec 29 14:54:28 CST 2017
[grid@www.cndba.cn/dave ~]$
同理,修改Oracle用户,结果也是一样。
4 小结
SSH互信在服务器上保存的是密钥,而非密码。虽然等价用户的密码发生了修改,但是密钥本身没有变化,因此SSH的互信配置不受影响。经过互信配置的服务器端和客户端连接并不需要密码,只是密钥的匹配过程。只要我们不重建密钥文件,修改密码对互信就没有影响,即使在2边的密码不一样。
版权声明:本文为博主原创文章,未经博主允许不得转载。