标题:SDR1.0(SHELL+Dialog+RSA)Linux主机管理[原创] 出处:运维进行时 时间:Mon, 02 Aug 2010 11:27:37 +0000 作者:刘天斯 地址:https://blog.liuts.com/post/210/ 内容: 前言 07年上线的一个Linux集中式管理,基于bash shell+Dialog+mysql+python+mod_perl来实现,现在共享出来,希望平台的思想及实现方法能够给大家一些帮助,以下为系统的说明文档。 一、开发目的 为了使管理Linux服务器群变得更安全、简单、高效、智能。一定程度上缩小了维护成本,提高工作效率,做好应付将来管理上千台Linux服务器打好基础。 二、背景 目前管理Linux服务器的方式还是走SSH到终端的管理方式,此方式存在一定的全安隐患。管理这些服务器的passwd就很头疼,稍微不注意,passwd会被黑客获取,造成灾难性的后果。管理应用方面,同样也是通过管理员电脑到每台服务器去操作,同样的一个操作就得到每台服务器上面重复地去做,消耗了很多时间与精力。在服务器性能监控方面,目前在应用Cacti、nagios平台,全此方式让管理员很被动,一般都是等到故障发生了才发现问题,影响了用户体验。主要原因是不能提前了解到服务器的健康状态。没有实时的跟踪、报警、分析机制。以后服务器会翻倍地增加,目前这种管理方式很明显已经不适应发展的需求。 三、系统特点 安全性-管理系统具有很好的安全性,通过2048位RSA密钥进行监控服务器与被监控服务器的认证,可以省去输入繁琐和易泄露的密码。系统管理员只要对主监控服务器做好安全配置并保管好私钥即可,被监控服务器外网远程终端默认将会被关闭,系统会定期扫描被监控服务器内/外网安全情况,生成分析结果给管理员。系统管理员可以定期更换公钥、私钥来提高安全系数。登录监控平台需要密码(perl pack加密)认证,每个操作窗口都加入会话认证,整个系统编译后的文件都是以二进制方式存放。 智能化-监控服务器会根据被监控服务器上的应用部署相应的代理客户端,由代理客户端来检查、监控、分析本服务器的状态,分析结果将通过邮件、WEB、短信通知给系统管理员。让管理员不间隔了解到服务器的状态信息,代理客户端同时也具备管理本服务器应用的权力,当应用发生故障时它会自我修复并通知管理员。 易用性-系统是基于Linux shell模式下的对话框展示,中文环境,同时也支持鼠标操作,功能清晰明了,操作时系统也会提示相应的文字提示,非常简单。 高效率-新上架的服务器只要进行如下三步即可上线提供服务,即添加服务器->初始化->部署应用。如果要在多台服务器上进行一样的操作,只要选择好操作事件跟操作对象就可以了。 灵活性-升级被监控服务器上的对象很方便,只要在监控服务器上更新好相应对象代码,系统会自动到被监控服务器上去更新它们。 可扩展性-系统提供的高级应用功能,其它同事也可以编写自己的模块,根据不同应用可以定制不同的功能模块,系统提供这样的接口。 4、系统网络架构图 点击在新窗口中浏览此图片 https://blog.liuts.com/attachment.php?fid=152 5、系统流程图 点击在新窗口中浏览此图片 https://blog.liuts.com/attachment.php?fid=155 6、系统主界面 点击在新窗口中浏览此图片 https://blog.liuts.com/attachment.php?fid=154 四、系统主要功能 SDR1.0是基于Linux bash shell+mysql+python+mod_perl工具开发,功能覆盖了Linux常用常用操作,下面详细介绍系统主要功能: 1、系统目录结构 / │ add_firewall 添加防火墙 │ add_server 添加服务器 │ add_app 部署应用 │ add_agent 部署代理 │ authorized_keys 公钥 │ checkonline 登录验证 │ config 配制文件 │ c_server_class 多选服务器列表 │ go 登录 │ identity 私钥 │ list_server_do 选择服务器 │ list_server_info 服务器信息 │ main 功能选择 │ msgbox 提示信息 │ r_server_class 单选服务器 ├─tyapp 应用安装脚本 │ ├─bin │ nohup.out tmpfile │ syslog2mysql.sh syslogs to mysql shell │ TyserverScan 服务器端口扫描(外网) │ ├─cron │ TyserverwebScan 验证WEB状态主程序 │ ├─document │ document.txt 开发文档 │ ├─key │ identitybak old key │ ├─logs 系统操作日志目录 ├─tyagent 代理程序目录 └─tysysadmin 前端cgi-bin目录 ├─cgi-bin │ config.pl │ index.cgi 模块入口程序 │ sendmail.cgi 邮件报警接口 │ ├─css │ style.CSS │ ├─js │ copyright.js │ └─modules └─Apache ServerLoglist.pm 服务器日志列表 ServerScanport.pm 服务器端口扫描 ServerScanweb.pm 服务器状态扫描 五、功能介绍 5.1服务器列表 [功能]列表显示已添加至系统的服务器及其状态。 [操作方法]选择添加服务器->选择服务器分类->列表出此类别服务器信息,包括LAN IP、WAN IP、日志客户端、SSH终端、防火墙、部署代理等等信息。 5.2添加服务器 [功能]添加服务器到系统。 [操作方法]选择添加服务器->选择服务器分类->输入服务器名称、内网IP、外网IP,上下方向键切换输入框,这几项都不允许为空,输入完毕后点[Add]。 5.3安全检测 [功能]扫描服务器内网端口开放情况。 [操作方法]选择安全检测->选择服务器分类->选择服务器->显示扫描进度条并将结果写入数据库。 5.4部署代理 [功能]给服务器部署代理。 [操作方法]选择部署代理->选择服务器分类->选择服务器->选择代理类型->[OK]。 5.5连接状态 [功能]查看已添加的被监控服务器与主监控服务器的连接状态,在做其它操作之前查看此项是一个好习惯。 [操作方法]选择连接状态->显示探测进度条->生成结果。 5.6更换证书 [功能]更新主、被监控服务器的私、公钥,为了保障整个安全,定期更换证书是很有必要的。 [操作方法]选择更换证->显示探测进度条。 5.7管理终端 [功能]开/关远程访问被监控服务器SSH终端。 [操作方法] 选择管理终终->选择服务器分类->选择服务器->(开/关)->[OK]。 5.8操作日志 [功能]查看系统操作日志,方便查看历史操作记录。 [操作方法]选择操作日志->选择日期(TAB切换年/月/日,方向键选择日)->显示操作日志记录。 5.9部署日志 [功能]添加被监控服务器系统日志到日志服务器,实时观察其状态。 [操作方法] 选择部署日志->选择服务器分类->选择服务器(显示未添加的服务器列表) ->[OK]。 6.0部署应用 [功能]给服务器部署应用。 [操作方法]选择部署应用->选择服务器分类->选择服务器->选择应用类型->[OK]。 6.1部署防火墙 [功能]给服务器部署防火墙(Firewall)。 [操作方法]选择部署应用->选择服务器分类->选择服务器->选择防火墙类型->[OK]。 6.2初始化 [功能]初始化服务器,优化系统内核、删除无用用户、停止无用服务等等。 [操作方法]选择初始化->选择服务器分类->选择服务器-> [OK]。 6.3高级应用 [功能]本系统扩展的一个接口。 [操作方法]选择高级应用->进入命令行状态->运行相应接口(参数)。 6.4用户管理 [功能]本系统用户帐号管理。 [操作方法]选择用户管理->开发中…。 6.5退出文字 [功能]退出本系统。 [操作方法]选择退出->操作结束。 六、截图说明 点击在新窗口中浏览此图片 https://blog.liuts.com/attachment.php?fid=151 [应用分类] 点击在新窗口中浏览此图片 https://blog.liuts.com/attachment.php?fid=150 [服务器清单] 点击在新窗口中浏览此图片 https://blog.liuts.com/attachment.php?fid=149 [添加服务器] 点击在新窗口中浏览此图片 https://blog.liuts.com/attachment.php?fid=145 [安装应用平台] 点击在新窗口中浏览此图片 https://blog.liuts.com/attachment.php?fid=146 [操作日志] 点击在新窗口中浏览此图片 https://blog.liuts.com/attachment.php?fid=147 [安装功能代理] 点击在新窗口中浏览此图片 https://blog.liuts.com/attachment.php?fid=148 [安全扫描] 七、使用指南 1、通过ssh登录监控管理器。 2、[root@sysadmin ~]#go 3、输入管理员密码: 4、验证通过进入管理窗口。 八、前端应用 1、定制作业 * */1 * * * /var/www/tyAdmin/cron/TyserverwebScan 30 0 * * * /var/www/tyAdmin/cron/TyserverScan 2、配置 将ServerLoglist.pm、ServerScanport.pm、ServerScanweb.pm复制到/opt/apache/perl/modules/Apache目录 #vi httpd.conf ServerName cgi.sina.com.cn ServerAdmin liutiansi@gmail.com ErrorLog /var/log/apache/cgi.sina.com.cn/error.log CustomLog /var/log/apache/cgi.sina.com.cn/access.log combined DocumentRoot /var/www/tysysadmin ScriptAlias /cgi-bin/ "/var/www/tysysadmin/cgi-bin/" SetHandler perl-script PerlResponseHandler ModPerl::Registry PerlOptions +ParseHeaders PerlSendHeader On Options +ExecCGI Order Deny,Allow Deny from all Allow from 192.168.100.0/255.255.255.0 Order Deny,Allow Deny from all Allow from 192.168.100.0/255.255.255.0 PerlRequire /var/www/tysysadmin/cgi-bin/index.cgi SetHandler perl-script PerlHandler Apache::ServerLoglist SetHandler perl-script PerlHandler Apache::ServerScanport SetHandler perl-script PerlHandler Apache::ServerScanweb 3、服务器日志时时跟踪 http://192.168.100.10/ServerLoglist 4、服务器端口扫描 http://192.168.100.10/ServerScanport 5、服务器WEB状态监控 http://192.168.100.10/ServerScanweb 九、安装 yum -y install dialog 1、tar -zxvf SDR1.0.tar.gz 2、cd SDR1.0 3、vi config 修改成实际参数 sysadmin_path="/home/SDR1.0" mysql_bin="/usr/local/mysql/bin/mysql" #mysql客户端连接器位置 mysql_host="localhost" #数据库主机 mysql_user="systemuser" #数据库帐号 mysql_passwd="123456" #数据库密码 scan_port="U:53,161,T:21-25,80,81,3306,8080" #安全扫描端口 ConnectTimeout="5" #连接远程服务器outime system_info="天涯Linux服务器管理系统SDR1.0" copyright_info="\Zb\Z7天涯在线网络有限公司 网络系统部 作者:刘天斯 邮箱:lliutiansi@gmail.com" 4、创建Mysql数据库"sysadmin",并导入SDR1.0/sql/sysadmin.sql 5、修改系统环境 5.1环境变量:vi /etc/profile 引用 export PATH=$PATH:/usr/local/bin:/home/SDR1.0 5.2配置ssh链接 引用 ln -s /usr/bin/ssh /usr/bin/sshto 5.3、修改mysql客户端编码 vi /etc/my.cnf 引用 [client] default-character-set=utf8 6、安装nmap yum -y install nmap 7、生成公私钥 引用 #cd /home/SDR1.0 删除原公私钥 #rm -rf authorized_keys identity #ssh-keygen -t dsa -b 2048 -f identity #mv identity.pub authorized_keys #chmod 600 identity authorized_keys 8、因修改了环境变量,退出终端exit再登录操作系统,进入/home/SDR1.0,运行"go",默认密码为“123456”。OVER:) 十、开发变量说明 1、go[$go_encrypt][服务器加密后的密码][全局] 2、go[$outmessage][密码不正确提示变量][全局(关闭窗口后失效)] 3、checkonline[$outmessage][检查是否登录][全局] 4、当前进程PID:main[$main_pid][登录进程号][全局] 5、选择当前功能值:main[$main_value][功能ID号][全局] 6、选择当前服务器类别值:c_server_class[$server_class_value][服务器列表][全局] 7、选择当前服务器类别值:r_server_class[$server_class_value][服务器列表][全局] 8、选择当前服务器值:$server_value [服务器内网IP][全局] #------------------------------------------------------------ *全局:对下级窗口有效,生命期为主窗口关闭。 十一、处理模块代码 #!/bin/sh #Function:select checklist server #Writer:liutiansi #Mail:lliutiansi@gmail.com #Date:2007-11-03 23:57 source config source checkonline list_server_do_tempfile=`list_server_do_tempfile 2>/dev/null` || list_server_do_tempfile=/tmp/server$main_pid trap "rm -f $list_server_do_tempfile /tmp/add_firewall$main_pid /tmp/add_agent$main_pid /tmp/add_app$main_pid" 0 1 2 5 15 #过滤服务器列表 case $main_value in 9) sqltj=" and TOLOG='N'" ;; 16) sqltj=" and TOFIREWALL='N'" ;; esac list_server_do_result=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "select SERVER,SERVERIP,SERVERNAME,TOLOG,TOLD,TOFIREWALL from sysadmin.ty_server where SERVERCLASS='$server_class_value'$sqltj order by SERVER;" | awk 'NR>1 {print NR,$0}'|awk '{print $2" "$3" 日志["$5"] 终端["$6"] 防火墙["$7"] "$4}'` list_server_do_result1=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "select SERVICENAME from sysadmin.ty_system_service where ID='$main_value';" | awk 'NR>1 {print NR,$0}'|awk '{print $2}'`"->" returncode=0 while test $returncode != 1 && test $returncode != 250 do exec 3>&1 dialog --clear --colors --backtitle "$copyright_info" --title "$system_info" \ --checklist "\n\n$list_server_do_result1选择服务器:" 25 70 14 \ $list_server_do_result \ 2>$list_server_do_tempfile returncode=$? #对returncode值进行选择分支; case $returncode in #0为点击[OK]按钮; 0) server_value=`cat $list_server_do_tempfile` export server_value #对功能ID进行选择 counter=`echo "$server_value"|awk '{print NF}'` Gap=`expr 100 / $counter` num=0 case $main_value in ###########################################安全扫描######################################## 3) PCT=$Gap ( while test $PCT -le 100 do num=`expr $num + 1` vlist=`echo "$server_value"|awk -F " " '{print $'$num'}'` vlist=`echo "$vlist"|awk -F "\"" '{print $2}'` #通过nmap扫描服务器端口; result=`nmap -p $scan_port $vlist|awk 'NR==5,NR==12{print $1"状态:"$2}' 2>&1` #将扫描结果入库; result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set SCANPORT='$result' where SERVER='$vlist';" 2>&1` if [ -z "$result_up" ]; then result_up_str="[√]ok:$vlist扫描结果$result已成功入库!" else result_up_str="[×]error:$vlist扫描结果$result入库失败!" fi echo "XXX" echo $PCT echo "\n正在扫描$vlist...\n-------------------------------------------------\n$result" echo "XXX" PCT=`expr $PCT + $Gap` #写运行结果到日志; logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str" RecordLog done ) |dialog --title "$system_info" --gauge "\n\n\n\n\n             开始扫描......" 18 70 0 exit ;; ##########################################部署代理######################################## 4) #调用代理选择对话框; add_agent #取选择代理的标志; agent_value=`cat /tmp/add_agent$main_pid` #无选择与取消处理; if [ "$agent_value" != "" ]; then if [ "$agent_value" == "0" ]; then exit fi else exit fi #进度表显示运行状态; PCT=$Gap ( while test $PCT -le 100 do num=`expr $num + 1` #取第num列以空格分隔的字符(服务器); vlist=`echo "$server_value"|awk -F " " '{print $'$num'}'` #取第2列"号分隔字符串 vlist=`echo "$vlist"|awk -F "\"" '{print $2}'` #循环代理个数; for agentkey in $agent_value do #取第2列"号分隔字符串 agentkey=`echo "$agentkey"|awk -F "\"" '{print $2}'` #获取代理crontab类型; AGENTCRONTAB=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "select AGENTCRONTAB from sysadmin.ty_server_agent where AGENTNAME='$agentkey';" | awk 'NR>1 {print NR,$0}'|cut -b 3-100` #创建代理目录; sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " mkdir -p /home/tyagent" 2>&1 result_check_conn=$? if [ $result_check_conn -eq 0 ]; then #传输代理文件到客户端服务器; scp -S sshto -oConnectTimeout=$ConnectTimeout -i $sysadmin_path/identity $sysadmin_path/tyagent/$agentkey root@$vlist:/home/tyagent 1>&3 result_do=$? if [ $result_do -eq 0 ]; then #非crontab运行; if [ "$AGENTCRONTAB" == "1" ]; then sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " if sed -n '1,100p' /etc/rc.local | grep $agentkey; then echo '0'; else echo \"/home/tyagent/$agentkey\" >> /etc/rc.local;fi;" 2>&1 else sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " crontab -l > /home/tyagent/cron.tmp;if sed -n '1,100p' /home/tyagent/cron.tmp | grep $agentkey; then echo '0'; else echo \"$AGENTCRONTAB\" >> /home/tyagent/cron.tmp;fi;crontab /home/tyagent/cron.tmp" 2>&1 fi #更新服务器字段代理标志; result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TO$agentkey='Y' where SERVER='$vlist';" 2>&1` if [ -z "$result_up" ]; then result_up_str="[√]ok:$vlist部署代理$agentkey成功!" else result_up_str="[×]error:$vlist部署代理$agentkey成功,但更新数据库失败!($result_up)" fi else result_up_str="[×]error:连接远程主机$vlist失败!" fi echo "XXX" echo $PCT echo "\n正在$vlist主机部署$agentkey代理。" echo "XXX" else result_up_str="[×]error:$vlist部署代理:$agentkey失败,连接服务器出现问题。" fi PCT=`expr $PCT + $Gap` sleep 1 #写运行结果到日志; logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str" RecordLog done; #循环结束; done ) |dialog --title "$system_info" --gauge "\n\n\n\n\n             准备部署......" 18 70 0 exit ;; ##########################################远程终端######################################## 7) PCT=$Gap ( while test $PCT -le 100 do num=`expr $num + 1` vlist=`echo "$server_value"|awk -F " " '{print $'$num'}'` vlist=`echo "$vlist"|awk -F "\"" '{print $2}'` #检查远程服务器/etc/iptables.sh有无包含192.168.100.0/24 22关键字来判断是否开通远程ssh; result=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "if sed -ne '/192.168.100.0/{/22/p}' /etc/iptables.sh|grep 192.168.100.0|grep 22; then echo 1; fi; " 2>&1` if [ $? -eq 0 ]; then if [ -n "$result" ]; then TOLD="N" TOLDstr="关闭" resultdo=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "sed -i '/192.168.100.0/{/22/d}' /etc/iptables.sh;/etc/iptables.sh" 2>&1` else TOLD="Y" TOLDstr="打开" resultdo=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "echo \"iptables -A INPUT -s 192.168.100.0/24 -p tcp --dport 22 -j ACCEPT\" >> /etc/iptables.sh;/etc/iptables.sh" 2>&1` fi #更新服务器标志; result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TOLD='$TOLD' where SERVER='$vlist';" 2>&1` if [ -z "$result_up" ]; then result_up_str="[√]ok:$vlist服务器已$TOLDstr远程终端!" else result_up_str="[×]error:$vlist开/关远程终端,更新数据库失败!" fi echo "XXX" echo $PCT echo "\n正在部署$vlist...\n\n$result_up_str" echo "XXX" else result_up_str="[×]error:$vlist开/关远程终端失败,连接服务器出现问题。" fi PCT=`expr $PCT + $Gap` sleep 1 #写运行结果到日志; logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str" RecordLog done ) |dialog --title "$system_info" --gauge "\n\n\n\n\n             准备部署......" 18 70 0 exit ;; ##########################################部署日志######################################## 9) PCT=$Gap ( while test $PCT -le 100 do num=`expr $num + 1` vlist=`echo "$server_value"|awk -F " " '{print $'$num'}'` vlist=`echo "$vlist"|awk -F "\"" '{print $2}'` #写客户端服务器/etc/syslog.conf文件; result=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "echo \"*.notice;cron.none;authpriv.* @syslog.com.cn\" >> /etc/syslog.conf;/etc/init.d/syslog restart" 2>&1` result_do=$? if [ $result_do -eq 0 ]; then #更新服务器标志; result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TOLOG='Y' where SERVER='$vlist';" 2>&1` if [ -z "$result_up" ]; then result_up_str="[√]ok:$vlist部署日志客户端成功!" else result_up_str="[×]error:$vlist部署日志客户端成功,但更新数据库失败!" fi else result_up_str="[×]error:$vlist部署日志客户端失败,连接服务器出现问题。" fi echo "XXX" echo $PCT echo "\n正在部署$vlist...\n\n$result_up_str" echo "XXX" PCT=`expr $PCT + $Gap` sleep 1 #写运行结果到日志; logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str" RecordLog done ) |dialog --title "$system_info" --gauge "\n\n\n\n\n             准备部署......" 18 70 0 exit ;; ##########################################部署应用######################################## 10) #调用应用选择对话框; add_app #取选择firewall的标志; app_value=`cat /tmp/add_app$main_pid` #无选择与取消处理; if [ "$app_value" != "" ]; then if [ "$app_value" == "0" ]; then exit fi else exit fi PCT=$Gap #进度表显示运行状态; while [ $PCT -le 100 ] do num=`expr $num + 1` #取第num列以空格分隔的字符(服务器); vlist=`echo "$server_value"|awk -F " " '{print $'$num'}'` #取第2列"号分隔字符串 vlist=`echo "$vlist"|awk -F "\"" '{print $2}'` #创建应用目录; sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " mkdir -p /home/tyagent/$app_value" 2>&1 result_check_conn=$? if [ $result_check_conn -eq 0 ]; then scp -S sshto -oConnectTimeout=$ConnectTimeout -i $sysadmin_path/identity $sysadmin_path/tyapp/$app_value root@$vlist:/home/tyagent/$app_value/$app_value 1>&3 sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " /home/tyagent/$app_value/$app_value " if [ $? -eq 0 ]; then result_up_str="[√]ok:$vlist部署应用:$app_value成功!" else result_up_str="[×]error:$vlist部署应用:$app_value失败!" fi #echo "XXX" echo "$result_up_str..................................................................[$PCT%]" #echo "XXX" else result_up_str="[×]error:$vlist部署应用:$app_value失败,连接服务器出现问题。" fi PCT=`expr $PCT + $Gap` sleep 1 #写运行结果到日志; logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str" RecordLog done #) |dialog --title "$system_info" --gauge "\n\n\n\n\n             准备部署......" 18 70 0 exit ;; ##########################################部署防火墙######################################## 11) #调用firewall选择对话框; add_firewall #取选择firewall的标志; firewall_value=`cat /tmp/add_firewall$main_pid` #无选择与取消处理; if [ "$firewall_value" != "" ]; then if [ "$firewall_value" == "0" ]; then exit fi else exit fi #进度表显示运行状态; PCT=$Gap ( while test $PCT -le 100 do num=`expr $num + 1` #取第num列以空格分隔的字符(服务器); vlist=`echo "$server_value"|awk -F " " '{print $'$num'}'` #取第2列"号分隔字符串 vlist=`echo "$vlist"|awk -F "\"" '{print $2}'` scp -S sshto -oConnectTimeout=$ConnectTimeout -i $sysadmin_path/identity $sysadmin_path/firewall/$firewall_value root@$vlist:/etc/iptables.sh 1>&3 result_do=$? if [ $result_do -eq 0 ]; then sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " if sed -n '1,100p' /etc/rc.local | grep iptables.sh; then echo '0'; else echo \"/etc/iptables.sh\" >> /etc/rc.local;fi;chmod u+x /etc/iptables.sh;/etc/iptables.sh" 2>&1 result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TOFIREWALL='Y' where SERVER='$vlist';" 2>&1` if [ -z "$result_up" ]; then result_up_str="[√]ok:$vlist部署Firewall成功!" else result_up_str="[×]error:$vlist部署Firewall成功,但更新数据库失败!" fi else result_up_str="[×]error:$vlist部署Firewall失败,连接服务器出现问题。" fi echo "XXX" echo $PCT echo "\n正在部署$vlist...\n\n$result_up_str" echo "XXX"i PCT=`expr $PCT + $Gap` sleep 1 #写运行结果到日志; logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str" RecordLog done ) |dialog --title "$system_info" --gauge "\n\n\n\n\n             准备部署......" 18 70 0 exit ;; esac ;; #*为点击[Cancel]按钮或其它中断。 *) dialog \ --clear \ --title "$system_info" \ --yesno "\n\n确定要取消操作吗?" 10 30 case $? in 0) break ;; 1) returncode=99 ;; esac ;; esac done 点击这里下载文件 如大家有什么疑问或感兴趣的话题可以通过weibo与我交流:http://t.qq.com/yorkoliu Generated by Bo-blog 2.1.1 Release