近期要做一些集群的维护工作,打算开发一些实用的脚本协助集群的管理:
1、实现多机操控和文件复制
实现基于sshpass模块的远程操作和批量复制,依赖前体要通过离线或者在线的方式在运行脚本的机器上安装sshpass命令(Python2和使用到的模块好像已经默认集成到centos系统中);还有集群所有节点的密码要统一,如果不统一可以稍作修改指定不同的用户账户和密码实现统一控制。
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]!!!!!!!!!!!!!!