zoukankan      html  css  js  c++  java
  • shell 脚本同时对远程多台机器执行命令

    脚本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 "
    33[32m$ip | success 33[0m 
    "
        cat $logfile
      else
        ((failed++))
        echo -e "
    33[31m$ip | failed 33[0m
     "
        cat $logfile
      fi
      ((i++))
    done
    echo -e '
    -------------------------'
    echo -e "33[32msuccess: $success | failed: $failed 33[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 "
    33[32m$ip | success 33[0m 
    "
        cat $logfile
      else
        ((failed++))
        echo -e "
    33[31m$ip | failed 33[0m
     "
        cat $logfile
      fi
      ((i++))
    done
    echo -e '
    -------------------------'
    echo -e "33[32msuccess: $success | failed: $failed 33[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 "
    33[32m$ip | success33[0m
    " 
       else
           failed=$(($failed+1))
           echo -e "
    33[32m$ip | failed33[0m
    " 
       fi
    
    done < ip_user_passwd.txt
    echo -e '
    -------------------------'
    echo -e "33[32msuccess: $success | failed: $failed 33[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

  • 相关阅读:
    [转]数值分析——多项式插值之Lagrange插值
    [转]上拉电阻&下拉电阻&高阻态
    [转]Verilog学习笔记基本语法篇(十三)...............Gate门
    Spring MVC中的Controller是Serlvet吗?
    preparestatement和statement的区别&&简单的SQL注入
    jquery局部变量和全局变量的错误
    js 中{},[]中括号,大括号使用详解
    Java数据库学习之SQL语句动态拼接
    jquery中关键字写错导致的错误——dataType写成dateType(data写成date)
    一次隐蔽的while死循环
  • 原文地址:https://www.cnblogs.com/yjt1993/p/10283110.html
Copyright © 2011-2022 走看看