• ssh-expire-time.py:查找~/.ssh/config配置文件,排列主机过期信息Python实现


    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    #列出~/.ssh/config主机到期时间
    #自用ssh-expire-time命令python实现版本
    #原始ssh-expire-time为shell脚本实现,参看:/v/bin/ssh-expire-time
    import sys
    import os
    import re
    import time
    
    foundCount=0
    allHostInfo=[]
    allExpireTime=[]
    
    def readHostsInfo(findflag,findNum=None):
    	global foundCount
    	global allHostInfo
    	global allExpireTime
    	with open(sshConfigFile,"r") as read_f:
    		Tag=False
    		findExpire=False
    		allHostInfo=[]
    		HostInfo=[]
    		for num,line in enumerate(read_f.readlines(),1):
    			if Tag==True and re.match(r'[ ]*Host ',line,re.I):
    				Tag=False
    				if findExpire==True:
    					allHostInfo.append(HostInfo)
    					findExpire=False
    			if Tag==False and re.match(r'Host .*',line,re.I):
    				Tag=True
    				HostInfo=[]
    				HostInfo.append(line)
    				continue
    			if Tag==True:
    				if re.match(r'.*#[ ]*到期时间.*',line,re.I):
    					findExpire=True
    					if findflag=="all":							
    						foundCount+=1
    						allExpireTime.append(line)
    					elif findflag=="m":
    						timeRegexp=time.strftime("%Y-%m", time.localtime())
    						timeRegexp=timeRegexp.replace("-0","-0?",1)
    						if not re.match(r'.*'+timeRegexp+'[^0-9]+.*',line,re.I):
    							HostInfo=[]
    							Tag=False
    							findExpire=False
    							continue
    						else:
    							HostInfo.insert(0,line)
    							foundCount+=1
    					elif findflag=="n":
    						nowTime=time.localtime()
    						nowYear=nowTime.tm_year
    						nextMonth=nowTime.tm_mon+1
    						if nextMonth>12:
    							nextMonth=1
    							nowYear+=1
    						nextMonth=str(nextMonth).zfill(2)
    						timeRegexp="{year}-{month}".format(year=nowYear,month=nextMonth)
    						timeRegexp=timeRegexp.replace("-0","-0?",1)
    						if not re.match(r'.*'+timeRegexp+'[^0-9]+.*',line,re.I):
    							HostInfo=[]
    							Tag=False
    							findExpire=False
    							continue
    						else:
    							HostInfo.insert(0,line)
    							foundCount+=1
    				HostInfo.append(line)
    	return
    
    def printUsage():
    	print("""
        /v/bin/ssh-expire-time.py
        查询所有主机到期时间,按日期顺序排列
        参数一可附加参数 (month/m) 查看当月到期主机详情;
        参数一可附加参数 (next/n) 查看下月到期主机详情;
        参数二可指定最多列出的主机,缺省为-1,即列出全部匹配主机;
        Example:ssh-expire-time.py m 或 ssh-expire-time.py n;
        Example:ssh-expire-time.py m 2 (匹配两次,只显示到期前两个)	
    	""")
    	return
    
    sshConfigFile="~/.ssh/config"
    sshConfigFile=os.path.expanduser(sshConfigFile)
    
    if len(sys.argv)<2 or (len(sys.argv)==2 and (str(sys.argv[1]).lower()=="--help" or str(sys.argv[1]).lower()=="-h")):
    	printUsage()
    	readHostsInfo('all')
    	if len(allExpireTime)>0:
    		allExpireTime.sort(key=None, reverse=False)
    		for expireTime in allExpireTime:
    			print(expireTime,end="")
    	sys.exit(0)
    elif len(sys.argv)==2:
    	findflag=str(sys.argv[1]).lower()
    	findNum=None
    elif len(sys.argv)==3:
    	findflag=str(sys.argv[1]).lower()
    	findNum=int(sys.argv[2])
    
    if not (findflag=="m" or findflag=="n"):
    	print("参数错误!")
    	printUsage()
    	sys.exit(0)
    
    readHostsInfo(findflag,findNum)
    allHostInfo.sort()
    
    suffixText=""
    if findNum!=None and findNum<len(allHostInfo):
    	allHostInfo=allHostInfo[:findNum]
    	suffixText=",显示前 %d 个"%findNum
    
    for Host in allHostInfo:
    	Host.pop(0)
    	print("".join(Host))
    
    if foundCount>1:
    	print("共找到主机 %s 个%s"%(foundCount,suffixText))
    
    print("
    ssh-expire-time.py执行完毕;Python版本:%s"%sys.version)
    
    

    本文来自博客园,作者:晴云孤魂,转载请注明原文链接:https://www.cnblogs.com/cnhack/p/14825111.html

  • 相关阅读:
    SPSS分析技术:CMH检验(分层卡方检验);辛普森悖论,数据分析的谬误
    揭秘10个大数据神话 为你排除几个误区
    SPSS统计分析案例:无空白列重复正交试验设计方差分析
    SPSS统计分析案例:无空白列重复正交试验设计方差分析
    单点登录系统和CAS的简介
    多线程
    HTTP 400错误--请求无效
    前端框架bootstrap(响应式布局)入门
    MQ(队列消息的入门)
    ActiveMQ下载与安装(Linux环境下进行)
  • 原文地址:https://www.cnblogs.com/cnhack/p/14825111.html
Copyright © 2020-2023  润新知