Linux多台机器一键免密互信脚本简介
扫描二维码
随时随地手机看文章
大家好,我是anyux。我将给大家介绍Linux多台机器一键免密互信脚本。
因为很多操作工具构架需要免密钥互信的基础才能实现,比如hadoop,MHA等,本人十分懒惰,不想因为反复克隆机器后,再搞复制粘贴的操作。从昨天晚上11点还完成,气得直接睡觉去了。
白天来公司,正巧无事(一会做完了),上手就开始完成这个脚本。
心急的同学,可以直接替换head_ip(前缀ip),arr(后缀ip),passwd(密码),以root权限直接运行
这个版本是很基础的小脚本,就跟闹着玩一样。
它的不足,
依赖第三工具,并且需要以root权限安装,运行ip限制,需要手动修改同步密钥的算法未优化,感觉可以优化,虽然还不知道优化的空间有多少
再说说它的实现逻辑
这里的前提,是所有同步密钥机器的密码一致(不一致的要等待下一个版本更新吧)
随机一台机器登录,生成密钥对,复制公钥到其他主机认证基于循环,逐个远程登录主机,删除密钥对,重新生密钥对基于循环,逐个远程登录主机,安装远程工具sshpass,复制公钥到其他机器,还有本地主机localhost检测多主机免密通信情况#!/bin/bash#算法密钥#分发给指定机器#ip_headerhead_ip='192.168.255.'#ip_footerarr=(113 114 115)#用户家密钥目录base_dir=~/.ssh/#公钥pub=id_rsa.pub#私钥key=id_rsa#用户名称user=root#用户密码passwd=root#需要root权限安装软件install_cmd(){yum install -y pssh sshpass}create_key(){sleep 2#删除本地初始密钥对rm -rf ${base_dir}sleep 1echo -e "删除完成\n"echo "开始分发"echo "\n"echo "++++++++++++++++++++"#本地主机生成密钥\ssh-keygen -t rsa -f ${base_dir}${key} -P ""for ip in ${arr[@]}doecho "输出ip**********"echo "ssh root@${head_ip}${ip} "tmp='ssh-keygen -t rsa -f ${base_dir}${key} -P ""'#本地主机公钥复制到其他主机认证文件sshpass -p${passwd} ssh-copy-id $user@${head_ip}${ip} -o StrictHostKeyChecking=no#远程主机连接,删除已生成的密钥,并重新生成密钥sshpass -p${passwd} ssh $user@${head_ip}${ip} "rm -rf ${base_dir}${key};rm -rf ${base_dir}{pub}"#远程主机连接,生成密钥sshpass -p${passwd} ssh $user@${head_ip}${ip} "ssh-keygen -t rsa -f ${base_dir}${key} -P ''"#远程主机连接,将公钥复制到其他主机认证文件for tmp_ip in ${arr[@]}do#安装远程连接工具sshpass -p${passwd} ssh $user@${head_ip}${ip} "yum install -y sshpass;"#远程主机,将公钥同步到其他机器sshpass -p${passwd} ssh $user@${head_ip}${ip} "sshpass -p${passwd} ssh-copy-id $user@${head_ip}${tmp_ip} -o StrictHostKeyChecking=no"#远程主机,将公钥同步localhost主机名下sshpass -p${passwd} ssh $user@${head_ip}${ip} "sshpass -p${passwd} ssh-copy-id $user@localhost -o StrictHostKeyChecking=no"donedoneecho -e "分发完结\n"}check_ip(){for ip in ${arr[@]}dopssh -H ${head_ip}${ip} -i $1done}bat(){echo "输出ok:";check_ip 'echo "ok"'echo "输出ping结果:";check_ip 'ping qq.com -c 2'echo "获取主机名:";check_ip 'ls ~/.ssh'echo "获取主机名:";check_ip "source /etc/profile;ip a | grep inet | grep ${head_ip}"}main(){install_cmd;create_key;bat}main