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

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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值