脚本1:需要机器之间免密

ssh-copy-id [-i [identity_file]] [user@]machine
#!/bin/bash
# -------------------------------------------------------------------------------
# Author: Loya.Chen
# Description: Execute commands on multiple remote hosts at the same time.
# -------------------------------------------------------------------------------
set -e
Usage() {
echo "Usage: $0 host1 host2 ... 'command'"
}
if [ $# -lt 2 ] ;then
Usage
exit 0
else
cmd=${!#}
fi
logfile=$(mktemp)
i=1
success=0
failed=0
for ip in $@;do
if [ $i -eq $# ];then
break
fi
ssh $ip $cmd &> $logfile
if [ $? -eq 0 ];then
#((success++))
success=$(($success+1))
echo -e "\n\033[32m$ip | success \033[0m \n"
cat $logfile
else
((failed++))
echo -e "\n\033[31m$ip | failed \033[0m\n "
cat $logfile
fi
((i++))
done
echo -e '\n-------------------------'
echo -e "\033[32msuccess: $success | failed: $failed \033[0m"
echo '-------------------------'

方法2:这种方式可以不用免密,但是需要在执行命令的机器用户名和密码一致

#!/bin/bash
# -------------------------------------------------------------------------------
# Author: JiangTao.Yu
# Description: Execute commands on multiple remote hosts at the same time.
# -------------------------------------------------------------------------------
set -e
Usage() {
echo "Usage: $0 host1 host2 ... 'command'"
}
if [ $# -lt 2 ] ;then
Usage
exit 0
else
cmd=${!#}
fi
logfile=$(mktemp)
i=1
success=0
failed=0
for ip in $@;do
if [ $i -eq $# ];then
break
fi
sshpass -p "mypasswd" ssh -o "StrictHostKeyChecking no" hduser@$ip $cmd &> $logfile
if [ $? -eq 0 ];then
#((success++))
success=$(($success+1))
echo -e "\n\033[32m$ip | success \033[0m \n"
cat $logfile
else
((failed++))
echo -e "\n\033[31m$ip | failed \033[0m\n "
cat $logfile
fi
((i++))
done
echo -e '\n-------------------------'
echo -e "\033[32msuccess: $success | failed: $failed \033[0m"
echo '-------------------------'

方法3、从文件读取ip、username、passwd

#!/bin/bash
set -e
success=0
failed=0
while read ip username passwd
do
ip=$ip
username=$username
passwd=$passwd
sshpass -p $passwd ssh -n -o "StrictHostKeyChecking no" $username@$ip "free -m"
if [ $? -eq 0 ];then
success=$(($success+1))
echo -e "\n\033[32m$ip | success\033[0m\n"
else
failed=$(($failed+1))
echo -e "\n\033[32m$ip | failed\033[0m\n"
fi done < ip_user_passwd.txt
echo -e '\n-------------------------'
echo -e "\033[32msuccess: $success | failed: $failed \033[0m"

 

[root@test ~]# cat ip_user_passwd.txt
192.168.0.235 hduser mypasswd
192.168.4.50 root 123456
192.168.4.50 root 123456

  

借鉴:https://www.jb51.net/article/119541.htm

shell 脚本同时对远程多台机器执行命令的更多相关文章

  1. Linux centosVMware运行告警系统、分发系统-expect讲解、自动远程登录后,执行命令并退出、expect脚本传递参数、expect脚本同步文件、指定host和要同步的文件、shell项目-分发系统-构建文件分发系统、分发系统-命令批量执行

    一运行告警系统 创建一个任务计划crontab -e 每一分钟都执行一次 调试时把主脚本里边log先注释掉 再次执行 没有发现502文件说明执行成功了,每日有错误,本机IP 负载不高 二.分发系统-e ...

  2. shell脚本命令远程连接ssh并执行命令

    环境: redhat 6.5 根据网上提供方法,测试了很多写法都不成功,测试了很久才有了以下脚本. 命令远程连接ssh并执行命令,scp/ftp等远程连接操作同理: #!/usr/bin/expect ...

  3. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---6

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: <Linux命令行与shell脚本 ...

  4. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---5

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: <Linux命令行与shell脚本 ...

  5. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---4

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: <Linux命令行与shell脚本 ...

  6. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---3

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: <Linux命令行与shell脚本 ...

  7. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---2

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: <Linux命令行与shell脚本 ...

  8. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---1

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: <Linux命令行与shell脚本 ...

  9. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---0

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: <Linux命令行与shell脚本 ...

随机推荐

  1. Pyhton模块和包

    一 模块 1.1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用pytho ...

  2. MySQL性能测试调优

    MySQL性能测试调优 操作系统 基本操作 查看磁盘分区mount选项 $ mount 永久修改分区mount选项(系统重启后生效) 修改文件 /etc/fstab 中对应分区的mount optio ...

  3. Java程序员的自我修养

    一.自我修养路线图 如图,这是笔者所走的路.且不论这路走的对不对,这个过程中行业环境会影响到你,大可不必钻牛角尖.附上这张图的目的是为了说,如果你想成为一个优秀的程序员,那么你一定要有规划.当然,别想 ...

  4. 网络基础 URL

    一.用JAVA实现URL  在JAVA中,Java.net包里面的类是进行网络编程的,其中java.net.URL类和java.net.URLConection类使编程者方便地利用URL在Intern ...

  5. Qt中C++与QML交互

    ###main.c部分int main(int argc, char *argv[]){    QString info1 = "xxxxxxxxxxx";    QString ...

  6. 【DevOps】在Rancher2中启动Docker-Registry仓库服务

    准备 拥有Rancher2环境,已经在Rancher2配置Kubernetes集群 拥有域名,拥有SSL证书,可以自行在阿里云申请 启动Docker-Registry仓库服务 第一步:进入集群应用 第 ...

  7. 【OF框架】搭建标准工作环境

    前言 统一工作环境,统一工具集,是沟通效率的基础.如同语言一样,使用不同语言的人,需要花更多的精力去理解语言,然后才是理解语言的内容,而使用相同语言的人,对话过程直接进入到内容.对于语言不统一增加的效 ...

  8. 深入剖析TOMCAT

    理解tomcat之搭建简易http服务器 做过java web的同学都对tomcat非常熟悉.我们在使用tomcat带来的便利的同时,是否想过tomcat是如何工作的呢?tomcat本质是一个http ...

  9. 使用unittest测试(基础一)

    #导入unittest单元测试框架 ##用例的方法前缀必须要以 test 开头的 #这是用来组织用例的 import unittest class TestDBQB(unittest.TestCase ...

  10. 什么是webpack模块化构建工具

    百度百科模块化:是指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程,有多种属性,分别反映其内部特性. 计算机模块化:一般指的是可以被抽象封装的最小/最优代码集合,模块化解决的是功能耦合问题. ...