当前位置: 首页 > news >正文

【Parallel SSH】Ubuntu系统配置pssh实现多主机并行执行Master分发的命令

文章目录

  • 一、配置多机免密登录
  • 二、ubuntu系统安装pssh
  • 三、并行命令脚本编写

一、配置多机免密登录

假设有1台主机作为Master分发命令,3台主机作为Servers执行命令。假设Master主机内网IP地址为192.168.0.12,Servers外网IP及对应的hostname分别为:

191.229.196.150 Client1
115.220.157.181 Client2
198.54.177.207 Client3

为了避免切换身份带来的权限问题,这里配置Master以root身份通过SSH免密登录Servers(同样是root),如何配置root作为默认登录使用的教程参考此篇文章。
首先,配置Master的/etc/hosts,在末尾添加以下內容,这里假设Master的hostname也叫Master(必要时可删除第一二行本地回环地址)

192.168.0.12 Master
191.229.196.150 Client1
115.220.157.181 Client2
198.54.177.207 Client3

在Master上生成密钥传输给所有的Servers:

ssh-keygen
cat id_rsa.pub >> authorized_keys
ssh-copy-id -i id_rsa.pub -p22 root@Client1

测试是否可以免密登录,成功后exit即可退出:

ssh Client1

二、ubuntu系统安装pssh

不知道是哪个起效果,反正可以都安装一遍:

sudo apt-get update
sudo apt-get install parallel
sudo apt-get install pssh

测试paraller-ssh是否安装成功

parallel-ssh --version

三、并行命令脚本编写

如果要实现多个Servers对各自某个路径下的文件进行操作(如查询使用量),或者多个Servers执行同一个命令(如清理缓存),可参考以下脚本编写(注意循环内的&一定不能丢,要不然就是顺序执行,不是并行了):

#!/bin/bashservers=("Client1" "Client2" "Client3")
folders=("/path/to/client1_folder" "/path/to/client2_folder" "/path/to/client3_folder")
My_ssh() {server="$1"folder="$2"ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -p 22 "$server" " time du -sh '$folder'"ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -p 22 "$server" " sync;echo 3 > /proc/sys/vm/drop_caches "
}export -f My_sshfor i in "${!servers[@]}"; do(output_file="output_${i}.txt"parallel -j 5 My_ssh ::: "${servers[i]}" ::: "${folders[i]}" > "$output_file") &
donewaitecho "All operations have been completed."

保存为XXX.sh,赋予其可执行命令,在Master主机上执行,执行结果保存为多个output_n.txt:

chmod +x XXX.sh
./XXX.sh

相关文章:

  • 突破与创新:Vue.js 创始人 尤雨溪 2024 年度技术前瞻
  • Python - Word转TXT文本,或TXT文本转Word
  • AI大模型探索之旅:深潜大语言模型的训练秘境
  • 【Linux系列】TEE 命令:同时输出到终端和文件
  • C语言之qsort函数
  • Go语言 切片slice
  • mindspore打卡22天之基于MindSpore通过GPT实现情感分类
  • Java---SpringBoot详解一
  • 6.S081的Lab学习——Lab11: Network
  • echarts使用自定义图形实现3D柱状图
  • (day18) leetcode 204.计数质数
  • 如何在idea安装git,使用gitee?
  • Pip换源:加速Python包安装的神操作,你get了吗?
  • Python与自动化脚本编写
  • 7.16做题总结
  • Angular6错误 Service: No provider for Renderer2
  • angular学习第一篇-----环境搭建
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • C++入门教程(10):for 语句
  • Flex布局到底解决了什么问题
  • httpie使用详解
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Java编程基础24——递归练习
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • OSS Web直传 (文件图片)
  • PhantomJS 安装
  • SQLServer之索引简介
  • 力扣(LeetCode)21
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 使用putty远程连接linux
  • 听说你叫Java(二)–Servlet请求
  • 写给高年级小学生看的《Bash 指南》
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 你对linux中grep命令知道多少?
  • Python 之网络式编程
  • ## 1.3.Git命令
  • (1)无线电失控保护(二)
  • (30)数组元素和与数字和的绝对差
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .Net Core 中间件与过滤器
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 命令行参数包含应用程序路径吗?
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • @Mapper作用