Linux 配置集群免密和文件分发
当我们的集群数据较多,为了方便管理,或者一些组件需要,尤其是大数据领域,这个时候是需要集群内主机节点之间是相互免密登录的;
在我们安装组件的时候,大部分的文件是重复的时候,我们一般是安装和配置好一个节点,然后以这个安装配置好的节点作为模板来分发文件;其他节点改改配置就可以了;
1.集群免密
1.1生成秘钥
这部分可以之前的文章【 4.生成公钥私钥对】
https://blog.csdn.net/weixin_44244088/article/details/126575345
生成的公钥配置到authorized_keys
[root@localhost .ssh]# ls
authorized_keys id_rsa id_rsa.pub known_hosts
[root@localhost .ssh]# cat id_rsa.pub >> authorized_keys
1.2 配置其他节点
用scp 把 文件拷贝到所有的节点 ( 如果是文件分发先做好了也可以文件分发的形式,不过每次都需要输入密码 )
scp /root/.ssh/authorized_keys root@CentOSB:/root/.ssh/
scp /root/.ssh/authorized_keys root@CentOSC:/root/.ssh/
scp /root/.ssh/authorized_keys root@CentOSD:/root/.ssh/scp /root/.ssh/id_rsa root@CentOSB:/root/.ssh/
scp /root/.ssh/id_rsa root@CentOSC:/root/.ssh/
scp /root/.ssh/id_rsa root@CentOSD:/root/.ssh/scp /root/.ssh/id_rsa.pub root@CentOSB:/root/.ssh/
scp /root/.ssh/id_rsa.pub root@CentOSC:/root/.ssh/
scp /root/.ssh/id_rsa.pub root@CentOSD:/root/.ssh/
1.3 连接测试
[root@localhost ~]# ssh CentOSC
Last login: Thu Dec 8 00:00:37 2022 from centosc
[root@localhost ~]# ssh CentOSD
Last login: Thu Dec 8 00:00:45 2022 from centosc
[root@localhost ~]# ssh CentOSB
Last login: Thu Dec 8 00:01:07 2022 from centosa
[root@localhost ~]# ssh CentOSA //有的会需要确认一下 yes就好 下次ssh 就不需要了
ECDSA key fingerprint is SHA256:eBaYUtAn+nFiiSVxWtSbDuve/2nIRN4uVBfmibrtX8w.
ECDSA key fingerprint is MD5:90:ab:af:1c:f6:28:8b:3a:6b:7c:a2:e1:15:3c:9b:a0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'centosa' (ECDSA) to the list of known hosts.
Last login: Thu Dec 8 00:00:55 2022 from centosd
1.4 注意
这里我集群的所有节点的公钥和私钥都是一样的; 可以达到免密; 比较方便;
如果要是每个主机都是不一样的秘钥对,添加起来则非常的麻烦,每个主机内的authorized_keys 文件都需要添加其他主机的id_rsa.pub,当集群主机数量达到一定规模,这种免密做起来还是比较麻烦的;
2.文件分发
1.安装rsync
注意:是所有主机都需要,在集群的所有主机 安装rsync
yum install -y rsync
2.编写脚本xsync
#!/bin/bash
#1)获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); thenecho no args;exit;
fi#2)获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir#4 获取当前用户名称
user=`whoami`#5 循环
for host in `cat hosts`;doecho ------------------- $host --------------rsync -rvl $pdir/$fname $user@$host:$pdir
done
3.脚本添加执行权限
chmod 777 xsync ## 省事 直接最大权限了 可酌情添加权限
4.添加hosts 文件
hosts 内部就是你文件要分发的节点
[root@centosa ~]# cat /usr/local/sbin/hosts
CentOSB
CentOSC
CentOSD
5.测试分发
因为CentOSB,CentOSC,CentOSD 和当前主机做过免密登录,发送文件的时候就不需要输入密码了;
[root@centosa ~]# xsync testxync //这里如果节点之间没有配置免密是需要输入密码的
fname=testxync
pdir=/root
------------------- CentOSB --------------
sending incremental file list
testxyncsent 88 bytes received 35 bytes 246.00 bytes/sec
total size is 0 speedup is 0.00
------------------- CentOSC --------------
sending incremental file list
testxyncsent 88 bytes received 35 bytes 246.00 bytes/sec
total size is 0 speedup is 0.00
------------------- CentOSD -------------- // 去主机验证文件 文件分发成功
sending incremental file list
testxyncsent 88 bytes received 35 bytes 246.00 bytes/sec
total size is 0 speedup is 0.00