shell(49) : 多个服务器批量设置相互免密

写在前面

  •  CentOS Linux release 7.9.2009 (Core)  系统已验证
  • 默认root账户, 其他账户无效
  • 创建[auto_mm.sh]必须vi创建文件然后粘贴

1.安装expect

1.1.在线安装

yum install -y tcl
yum install -y expect

1.2.离线安装(选其中一个即可)

1.2.1.在能联通公网的机器导出rpm包到不能联通公网的机器安装

参考 shell(30) : yum导出依赖包并离线安装_yum 导出包-CSDN博客

repotrack expect

1.2.2.百度网盘下载

待补充 ...

1.2.3.CSDN下载

待补充 ...

2.填下ip和密码信息(填好直接粘贴即可)

cat > ips <<'EOF'
192.168.1.1 abc123
192.168.1.2 abc123
EOF

若执行失败则创建ips文件, 填入以下内容

192.168.1.1 abc123
192.168.1.2 abc123

3.创建执行脚本 auto_mm.sh , 粘贴以下

#!/usr/bin/bash
path="$(cd "$(dirname "$0")" && pwd)"
cd $pathfunction info() {DATE_N=$(date "+%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23)echo -e "$DATE_N|INFO|$@ "
}function warning() {DATE_N=$(date "+%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23)echo -e "\033[33m$DATE_N|WARINIG|$@ \033[0m"
}function success() {DATE_N=$(date "+%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23)echo -e "\033[32m$DATE_N|SUCCESS|$@ \033[0m"
}function error() {DATE_N=$(date "+%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23)echo -e "\033[31m$DATE_N|ERROR|$@ \033[0m"exit
}cat >create_mm.sh <<'EOF'
ssh-keygen -t rsa -N '' <<EOF
/root/.ssh/id_rsa
yes\EOF
EOF
sed -i "s#\\\\\EOF#EOF#g" create_mm.shrm -rf auto_mm_mysif ! test -e ips; thenerror "[ips]文件不存在"
fiecho "-----------------[拉取公钥]-----------------"
while read line; doip=$(echo $line | awk '{print $1}')pass=$(echo $line | awk '{print $2}')# 创建ssh秘钥expect <<EOFspawn ssh root@$ip "ls /root/.ssh/id_rsa.pub |wc -l > /root/auto_mm_rs"expect {"yes/no" { send "yes\n";exp_continue}  "password" { send "$pass\n"}}expect eof
EOFexpect <<EOFspawn scp root@$ip:/root/auto_mm_rs ./expect {"yes/no" { send "yes\n";exp_continue} "password" { send "$pass\n"}}expect eof
EOFrs=$(cat auto_mm_rs)if [ $rs -eq 0 ]; thenwarning "$ip未创建ssh秘钥, 执行创建ssh秘钥"expect <<EOFspawn scp create_mm.sh root@$ip:/rootexpect {"yes/no" { send "yes\n";exp_continue} "password" { send "$pass\n"}}expect eof
EOFexpect <<EOFspawn ssh root@$ip "sh /root/create_mm.sh"expect {"yes/no" { send "yes\n";exp_continue} "password" { send "$pass\n"}}expect eof
EOFsleep 1sexpect <<EOFspawn ssh root@$ip "ls /root/.ssh/id_rsa.pub |wc -l > /root/auto_mm_rs"expect {"yes/no" { send "yes\n";exp_continue} "password" { send "$pass\n"}}expect eof
EOFexpect <<EOFspawn scp root@$ip:/root/auto_mm_rs ./expect {"yes/no" { send "yes\n";exp_continue} "password" { send "$pass\n"}}expect eof
EOFrs=$(cat auto_mm_rs)if [ $rs -eq 0 ]; thenerror "[$ip]ssh秘钥创建失败"elsesuccess "[$ip]ssh秘钥创建成功"fielsewarning "$ip已创建ssh秘钥"fi# 拉取ssh公钥expect <<EOFspawn scp root@$ip:/root/.ssh/id_rsa.pub ./expect {"yes/no" { send "yes\n";exp_continue} "password" { send "$pass\n"}}expect eof
EOFif ! test -e id_rsa.pub; thenerror "[$ip]ssh公钥拉取失败"ficat id_rsa.pub >>auto_mm_myssuccess "[$ip]拉取公钥成功"
done <ipsecho "-----------------[发送公钥]-----------------"
while read line; doip=$(echo $line | awk '{print $1}')pass=$(echo $line | awk '{print $2}')expect <<EOFspawn scp auto_mm_mys root@$ip:/rootexpect {"yes/no" { send "yes\n";exp_continue} "password" { send "$pass\n"}}expect eof
EOFexpect <<EOFspawn ssh root@$ip "cat /root/auto_mm_mys >> /root/.ssh/authorized_keys"expect {"yes/no" { send "yes\n";exp_continue} "password" { send "$pass\n"}}expect eof
EOF
done <ipsecho "-----------------[验证]-----------------"
cat >auto_mm_yz.sh <<'EOF'
function info() {DATE_N=$(date "+%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23)echo -e "$DATE_N|INFO|$@ "
}function warning() {DATE_N=$(date "+%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23)echo -e "\033[33m$DATE_N|WARINIG|$@ \033[0m"
}function success() {DATE_N=$(date "+%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23)echo -e "\033[32m$DATE_N|SUCCESS|$@ \033[0m"
}function error() {DATE_N=$(date "+%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23)echo -e "\033[31m$DATE_N|ERROR|$@ \033[0m"
}
EOFwhile read line; doip=$(echo $line | awk '{print $1}')pass=$(echo $line | awk '{print $2}')echo "ssh $ip -o PreferredAuthentications=publickey -o StrictHostKeyChecking=no \"date\" > /dev/null 2>&1" >>auto_mm_yz.shcat >>auto_mm_yz.sh <<'EOF'
if [ $? -eq 0 ]; then
EOFecho "    success \"[local_ip] ====> [$ip]设置免密成功\"" >>auto_mm_yz.shecho "else" >>auto_mm_yz.shecho "    warning \"[local_ip] ====> [$ip]设置免密失败\"" >>auto_mm_yz.shecho "fi" >>auto_mm_yz.sh
done <ips
sed -i "s#local_ip#\$1#g" auto_mm_yz.shcat > yz.sh <<'EOF'
#!/usr/bin/bashfunction info() {DATE_N=$(date "+%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23)echo -e "$DATE_N|INFO|$@ "
}function warning() {DATE_N=$(date "+%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23)echo -e "\033[33m$DATE_N|WARINIG|$@ \033[0m"
}function success() {DATE_N=$(date "+%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23)echo -e "\033[32m$DATE_N|SUCCESS|$@ \033[0m"
}function error() {DATE_N=$(date "+%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23)echo -e "\033[31m$DATE_N|ERROR|$@ \033[0m"
}function yz() {ssh $1 -o PreferredAuthentications=publickey -o StrictHostKeyChecking=no "date" >/dev/null 2>&1if [ $? -eq 0 ]; thensuccess "=================[$1]配置免密成功================="info "验证【[$1]】对所有服务器的免密配置"scp auto_mm_yz.sh root@$1:/rootssh root@$1 "sh /root/auto_mm_yz.sh $1"elsewarning "=================[$1]配置免密失败================="expect <<EOFspawn scp auto_mm_yz.sh root@$1:/rootexpect {"yes/no" { send "yes\n";exp_continue} "password" { send "$2\n"}}expect eof
\EOFinfo "验证【[$1]】对所有服务器的免密配置"expect <<EOFspawn ssh root@$1 "sh /root/auto_mm_yz.sh $1"expect {"yes/no" { send "yes\n";exp_continue} "password" { send "$2\n"}}expect eof
\EOFfi
}EOF
sed -i "s#\\\\\EOF#EOF#g" yz.shwhile read line; doip=$(echo $line | awk '{print $1}')pass=$(echo $line | awk '{print $2}')echo "yz $ip $pass" >> yz.sh
done <ipssh yz.sh# 清理
rm -rf auto_mm_mys
rm -rf auto_mm_rs
rm -rf auto_mm_yz.sh
rm -rf create_mm.sh
rm -rf id_rsa.pub
rm -rf yz.sh

4.执行脚本

sh auto_mm.sh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/225427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Pytorch】Transposed Convolution

文章目录 1 卷积2 反/逆卷积3 MaxUnpool / ConvTranspose4 encoder-decoder5 可视化 学习参考来自&#xff1a; 详解逆卷积操作–Up-sampling with Transposed Convolution PyTorch使用记录 https://github.com/naokishibuya/deep-learning/blob/master/python/transposed_co…

每天五分钟计算机视觉:Inception网络是由多个Inception模块构成

本文重点 inception从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征,从而提升训练结果。可以简单的理解为Inception 网络是由一个一个的Inception模块构建成的,我们来看一下。 Inception模块 如上就是Inception模块的 通过一个1…

采埃孚4D成像雷达拆解

1 基本信息 品牌&#xff1a;海外Tier1采埃孚 • 应用&#xff1a;上汽飞凡中高端纯电平台 • 数量&#xff1a;单车2个&#xff0c;安装在前后保内部 • 最远探测距离&#xff1a;350米 拆解来看&#xff0c;4D雷达主要可以分为4个部分&#xff0c;分别为数字接口板及结构件…

JAVA对文档加密

当 Word 文档中包含无法公开的机密信息时&#xff0c;我们可以对其进行加密&#xff0c;使其在没有密码的情况下无法打开。本文将向您介绍如何使用 Spire.Doc for Java 加密 Word 文档和移除 Word 密码保护。 加密 Word 文档删除 Word 密码保护 安装 Spire.Doc for Java 首先…

eclipse连接mysql数据库(下载eclipse,下载安装mysql,下载mysql驱动)

前言&#xff1a; 使用版本&#xff1a;eclipse2017&#xff0c;mysql5.7.0&#xff0c;MySQL的jar建议使用最新的&#xff0c;可以避免警告&#xff01; 1&#xff1a;下载安装&#xff1a;eclipse&#xff0c;mysql在我之前博客中有 http://t.csdnimg.cn/UW5fshttp://t.csdn…

富文本内容图片点击实现多图预览

实现思路: 获取到富文本中所有的img标签&#xff0c;方面给图片添加类名方便后面取dom&#xff1b; 获取所有的img类 给每个img绑定点击事件 利用数组的splice方法&#xff0c;将当前点击的图片放置数组的第一项 调用vant预览方法 import { showImagePreview } from vant;<p…

云上丝绸之路| 云轴科技ZStack成功实践精选(西北)

古有“丝绸之路” 今有丝绸之路经济带 丝路焕发新生&#xff0c;数智助力经济 云轴科技ZStack用“云”护航千行百业 沿丝绸之路&#xff0c;领略西北数字化。 古丝绸之路起点-陕西 集历史与现代交融&#xff0c;不仅拥有悠久的历史文化积淀&#xff0c;而且现代化、数字化发…

创建k8s账号与RBAC授权使用

创建账号 1、创建私钥[rootkub-k8s-master ~]# (umask 077; openssl genrsa -out soso.key 2048) Generating RSA private key, 2048 bit long modulus ............................... .......................... e is 65537 (0x10001) ​ 用此私钥创建一个csr(证书签名请求…

【setDS】牛客小白月赛83 E

登录—专业IT笔试面试备考平台_牛客网 题意 思路 首先&#xff0c;一个必要步骤是把它转化为两个序列&#xff0c;这样就变成了一个序列DS问题 我们的答案是一个位置 pos 后面还有多少位置和这个位置的颜色相同&#xff0c;考虑得到这个答案我们需要维护什么东西 我们只需要…

springboot rabbitmq 发布订阅 广播模式

根据amqp协议、rabbitmq入门、springboot集成rabbitmq 可知&#xff0c;rabbitmq的广播模式关键是使用fanout类型的exchange&#xff0c;fanout exchange会忽略message中的routing-key、queue中的binding-key&#xff0c;发给绑定exchange的全部queue。 创建fanout类型的excha…

Jmeter,提取响应体中的数据:正则表达式、Json提取器

一、正则表达式 1、线程组--创建线程组&#xff1b; 2、线程组--添加--取样器--HTTP请求&#xff1b; 3、Http请求--添加--后置处理器--正则表达式提取器&#xff1b; 4、线程组--添加--监听器--查看结果树&#xff1b; 5、线程组--添加--取样器--调试取样器。 响应体数据…

Axure动态面板的使用以及示例分享

目录 一. 什么是动态面板 二. 动态面板教程——以轮播图为例 2.1 创建动态面板 2.2 动态面板自适应大小 2.3 重复状态&#xff0c;将图片导入 2.4 添加交互事件——图片切换 2.5 效果展示 三. 多方式登录示例展示 四. 后台主界面左侧菜单栏示例展示 一. 什么是动态面板…

【C语言】C的面向对象

一、BREW接口实现 高通的BREW&#xff08;Binary Runtime Environment for Wireless&#xff09;是一个早期为手机设备开发的应用程序平台&#xff0c;用于开发在CDMA手机上运行的软件。尽管这个平台目前已经不太流行&#xff0c;但是在其使用高峰时期&#xff0c;开发者需要使…

vue2 tailwindcss jit模式下热更新失效

按照网上教程安装的tailwindcss&#xff0c;但是修改类名后热更新的时候样式没有生效&#xff0c;参考了大佬的文章&#xff0c;解决了该问题。 安装cross-env 修改前 "dev": " vue-cli-service serve", 修改后 "dev": "cross-env TAILWIN…

什么是数据项,什么是数据元

"数据项"和"数据元"是在数据管理和数据建模领域中经常使用的术语&#xff0c;它们有一些相似之处&#xff0c;但也有一些区别。 数据项&#xff08;Data Item&#xff09;&#xff1a; 定义&#xff1a; 数据项是数据的最小单位&#xff0c;是不可分割的…

动手学深度学习-自然语言处理-预训练

词嵌入模型 将单词映射到实向量的技术称为词嵌入。 为什么独热向量不能表达词之间的相似性&#xff1f; 自监督的word2vec。 word2vec将每个词映射到一个固定长度的向量&#xff0c;这些向量能更好的表达不同词之间的相似性和类比关系。 word2vec分为两类&#xff0c;两类…

PPT插件-好用的插件-放映笔、绘图板-大珩助手

放映笔 幻灯片放映时&#xff0c;工具在幻灯片的左下方&#xff0c;本工具在幻灯片的右侧&#xff0c;可以移动&#xff0c;可以方便在右侧讲课时候使用 绘图板 可在绘图板上写签名、绘制图画、写字等等&#xff0c;点画笔切换橡皮擦&#xff0c;点插入绘图&#xff0c;将背景…

QT 记录

qml 移动窗口会闪烁 int main(int argc, char *argv[]) {QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);//orQCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL); }window 拉取qml程序依赖文件 打开QT自带的命令窗口&#xff0c;转到exe程序目录&#xff1a; …

车载以太网笔记

文章目录 以太网协议分层协议中间设备子网掩码物理层测试内容比较杂,后续会整理。 以太网协议分层 协议 中间设备

智能高效|AIRIOT智慧货运管理解决方案

随着全球贸易的增加和消费需求的不断扩大&#xff0c;货运行业面临更大的压力&#xff0c;传统货运行业运输效率低下、信息不透明&#xff0c;往往存在如下的运维问题和管理痛点&#xff1a; 无法实时定位和追踪信息&#xff1a;无法提供实时的货物位置信息&#xff0c;以便随…