并发批量管理500台以上服务器脚本分享(shell版)

本文介绍了一种通过自定义脚本批量管理500多台服务器的方法。利用expect脚本和shell命令,实现了远程执行命令及文件传输的功能,并提供了详细的脚本使用说明。

也许很多人认为shell不能并发任务,其实可通过其它一些方式来实现。下面的脚本是我批量快速管理500+服务器脚本,阅读该脚本前建议先看《自动执行远程主机命令expect脚本》、《自动远程拷贝expect脚本》和《getopt:命令行选项、参数处理

用法:

Usage: ./multi_main.sh [-h|--help] [-v|-V|--version] [-l|--iplist ... ] [-c|--config ... ] [-t|--sshtimeout ... ] [-T|--fttimeout ... ] [-L|--bwlimit ... ] [-n|--ignore]

cat config.txt #上传文件和执行命令

file:~/scripts/test.sh /root/ push com:::./test.sh

cat iplist.txt  #ip列表

# Usage:
#ip port user password [password_2] [password_3] [password_4]
# Example: #192.168.0.100 22 root 123456 192.168.0.200 22 root 123456 192.168.0.201 22 root 123456 ...
./multi_main.sh -c config.txt -l iplist.txt #开始执行,可查看result目录下的日志来分析是否执行成功

脚本如下:

  1. mssh.exp 执行远程服务器命令expect脚本
  2. mscp.exp 向远程服务器上传或下载文件expect脚本(rsync)
  3. thread.sh 向一台服务器发起动作
  4. multi_main.sh 批量执行,对每台调用thread.sh

mssh.exp:

#!/usr/bin/expect --

if { [llength $argv] < 4 } { puts "Usage: $argv0 ip user passwd port commands timeout" exit 1 } match_max 600000 set ipcode [lindex $argv 0] set ip [exec dc -e $ipcode] set user [lindex $argv 1] set passwdcode [lindex $argv 2] set passwd [exec dc -e $passwdcode] set portcode [lindex $argv 3] set port [exec dc -e $portcode] set commands [lindex $argv 4] set timeoutflag [lindex $argv 5] set yesnoflag 0 set timeout $timeoutflag for {} {1} {} { # for is only used to retry when "Interrupted system call" occured spawn /usr/bin/ssh -o GSSAPIAuthentication=no -q -l$user -p$port $ip expect { "assword:" { send "$passwd\r" break; } "yes/no)?" { set yesnoflag 1 send "yes\r" break; } "FATAL" { puts "\nCONNECTERROR: $ip occur FATAL ERROR!!!\n" exit 1 } timeout { puts "\nCONNECTERROR: $ip Logon timeout!!!\n" exit 1 } "No route to host" { puts "\nCONNECTERROR: $ip No route to host!!!\n" exit 1 } "Connection Refused" { puts "\nCONNECTERROR: $ip Connection Refused!!!\n" exit 1 } "Connection refused" { puts "\nCONNECTERROR: $ip Connection Refused!!!\n" exit 1 } "Host key verification failed" { puts "\nCONNECTERROR: $ip Host key verification failed!!!\n" exit 1 } "Illegal host key" { puts "\nCONNECTERROR: $ip Illegal host key!!!\n" exit 1 } "Connection Timed Out" { puts "\nCONNECTERROR: $ip Logon timeout!!!\n" exit 1 } "Interrupted system call" { puts "\n$ip Interrupted system call!!!\n" } } 

转载于:https://www.cnblogs.com/L-H-R-X-hehe/p/3825317.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值