近期要做一些集群的维护工作,打算开发一些实用的脚本协助集群的管理:
实现基于sshpass模块的远程操作和批量复制,依赖前体要通过离线或者在线的方式在运行脚本的机器上安装sshpass命令(Python2和使用到的模块好像已经默认集成到centos系统中,如果没有使用“yum install -y sshpass”);还有集群所有节点的密码要统一,如果不统一可以稍作修改指定不同的用户账户和密码实现统一控制。
sshUtil.py的内容如下:
#! /usr/bin/python # -*- coding:UTF-8 -*- import os import sys import commands import datetime import re import argparse class Run(object): def __init__(self,user,host,password): self.__host=host self.__password=password self.__user=user def sshdo(self, cmd): cmd = "sshpass -p'%s' ssh -o 'StrictHostKeyChecking=no' %s@%s '%s'" %(self.__password,self.__user,self.__host, cmd) if os.system(cmd)!=0: print("[err]: "+cmd) def sshcopy(self, srcfile, destfile): cmd = "sshpass -p'%s' scp -r %s %s@%s:%s" % (self.__password, srcfile, self.__user, self.__host, destfile) (status, output) = commands.getstatusoutput(cmd) print("[status]"+str(status)) return status def runHosts(args): showArgs(args) user = "root" password = "root" for line in open(args.f): line=line.replace("\n", "").replace("\r", "").strip() if not line.startswith("192"): continue host = re.split(" |\t",line)[-1] print("-----["+host+"]------") run = Run(user,host,password) if args.cmd=="run": run.sshdo(args.c) elif args.cmd=="cp": run.sshcopy(args.s, args.d) elif args.cmd=="chage_passwd_time": #通过修改密码过期时间,做到密码防止过期(用于不能修改密码过期策略的集群) run.sshdo("chage -d %s %s" %(datetime.datetime.today().strftime('%Y-%m-%d'),user)) run.sshdo("chage -l %s| head -n 1" %(user)) else: print("error cmd!!!!!") def showArgs(args): if args.cmd=="run": print("[cmd]run:"+args.c) elif args.cmd=="cp": print("[cmd]cp:"+args.s +" to "+args.d) elif args.cmd=="chage_passwd_time": print("[cmd]chage_passwd_time") else: print("error cmd!!!!!") if __name__ == "__main__" : parser = argparse.ArgumentParser(description='run or cp for each node.') parser.add_argument('cmd',type=str,help='run cmd[run/cp/chage_passwd_time]') parser.add_argument('-s',type=str,help='srcFile [cp]') parser.add_argument('-d',type=str,help='destPath [cp]') parser.add_argument('-c',type=str,help='cmd [run]') parser.add_argument('-f',type=str,help='hosts file',default='/etc/hosts') args = parser.parse_args() print("[begin]...............") runHosts(args) print("[finish]!!!!!!!!!!!!!!")用法演示如下,其中还可以通过 -f指定要使用的配置文件路径
[root@n101 python]# python sshUtil.py --help usage: sshUtil.py [-h] [-s S] [-d D] [-c C] [-f F] cmd run or cp for each node. positional arguments: cmd run cmd[run/cp/chage_passwd_time] optional arguments: -h, --help show this help message and exit -s S srcFile [cp] -d D destPath [cp] -c C cmd [run] -f F hosts file [root@n101 python]# python sshUtil.py cp -s /root/shell/python/test -d /root [begin]............... [cmd]cp:/root/shell/python/test to /root -----[n101]------ [status]0 -----[n102]------ [status]0 -----[n103]------ [status]0 [finish]!!!!!!!!!!!!!! [root@n101 python]# python sshUtil.py run -c "ls -l /root" [begin]............... [cmd]run:ls -l /root -----[n101]------ 总用量 171364 -rw-------. 1 root root 1231 6月 16 09:43 anaconda-ks.cfg drwxr-xr-x. 3 root root 134 7月 9 23:09 shell drwxr-xr-x. 2 root root 15 7月 18 17:07 test -----[n102]------ 总用量 4 -rw-------. 1 root root 1231 6月 16 09:43 anaconda-ks.cfg drwxr-xr-x. 2 root root 15 7月 18 17:07 test -----[n103]------ 总用量 4 -rw-------. 1 root root 1231 6月 16 09:43 anaconda-ks.cfg drwxr-xr-x. 2 root root 15 7月 18 17:07 test [finish]!!!!!!!!!!!!!! [root@n101 python]# python sshUtil.py chage_passwd_time [begin]............... [cmd]chage_passwd_time -----[n101]------ 最近一次密码修改时间 :7月 18, 2019 -----[n102]------ 最近一次密码修改时间 :7月 18, 2019 -----[n103]------ 最近一次密码修改时间 :7月 18, 2019 [finish]!!!!!!!!!!!!!!