linux网状互信的处理方法

基础材料

CentOS 7.7 minimal  关闭selinux  防火墙

通常我们使用ansible或者pssh等批量工具进行操作的一个重要前提是控制端到被控端的单向免密互信,又或者是做Oracle RAC或GPFS文件系统时双机间的需要双向互信,对于前者通常在做虚拟机模板时可以直接打入模板中即可,对于后者通常主机数量不是很多,手工生成一下也就可以了,最近遇到一个需求是在几十台主机间做网状互信,即从任何一台主机到其他所有主机都需要免密互信,这种情况必须要进行脚本作业了

整体步骤:

1、每台主机生成秘钥   2、控制端主机收集秘钥   3、分发控制主机收集的秘钥文件authorized_keys以及known_hosts到所有主机


执行脚本前需要准备:
1、找到一台控制机,确保到所有其他主机都可以ssh连通
2、在控制机安装软件包yum install -y sshpass
3、准备txt文件,将互信IP及密码每台主机一行存入txt文件(如果主机密码都相同写死在脚本中即可,这种情况只存IP,脚本中也不必单独取一次密码,会比较省事)
样例如下,本次分隔符使用了@,如果与实际密码冲突可自行更换
10.1.1.2@123456
10.1.1.3@567890

脚本如下:

#生成所有主机密钥,并完成秘钥收集
for i in `cat ip.txt`
do
ip=`echo $i |awk -F "@" '{print $1}'
password=`echo $i |awk -F "@" '{print $2}'
sshpass -p $password ssh $ip -o StrictHostKeyChecking=no "mv /root/.ssh/{id_rsa,id_rsa.pub} /tmp;ssh-keygen -t rsa -f /root/.ssh/id_rsa -N '';cat /root/.ssh/id_rsa.pub"|grep ssh-rsa>>/root/.ssh/authorized_keys
done
#分发authorized_keys及known_hosts
for i in `cat ip.txt`
do
ip=`echo $i |awk -F "@" '{print $1}'
password=`echo $i |awk -F "@" '{print $2}'
sshpass -p $password scp /root/.ssh/{authorized_keys,known_hosts} root@$ip:/root/.ssh/
done

执行脚本后随机挑选几台主机测试免密登陆

猜你喜欢

转载自blog.csdn.net/finalkof1983/article/details/110824708