python实现批量修改服务器密码的方法


Posted in Python onAugust 13, 2019

求:机房、线上有多台主机,为了保障安全,需要定期修改密码。若手动修改,费时费力易出错。

程序应该满足如下需求 :

1、在现有的excel密码表格,在最后一个字段后面生成新的密码,另存为一个新的excel密码文件

2、根据新的excel密码文件,更新服务器密码,将更新后的结果保存到另外一个excel文件。

a、原始excel文件字段格式,最后一个字段为原始密码

IP USER PORT pwd

b、生成新的密码文件字段格式,最后一个字段为更新密码

IP USER PORT pwd pwd20180929

c、生成新的密码文件字段格式,最后一个字段为更新是否成功的标识

IP PORT USERNAME OLDPASS NEWPASS FLAG

按照面向对象编程的思想,可以设计2个类,excelhandler和ChangePassword

excelhandler主要负责excel文件的读取,写入,增加一个生成密码文件

ChangePassword主要利用paramiko登陆服务器进行密码更新

excelhandler类

#_*_ coding: utf-8 _*_
'''
@author liaogs
'''
import json
import xlrd
import xlwt
import time
import datetime
import base64
import random
from xlutils.copy import copy
class excelhandler():
  def __init__(self,path):
    self.path = path
    self.workbook = None
    self.rows = 0
    self.cols = 0
    self.serverlist = []
  def read_excel(self):
    self.workbook = xlrd.open_workbook(self.path)
    sh1 = self.workbook.sheet_by_index(0)
    self.rows = sh1.nrows
    self.cols = sh1.ncols
    for row in range(1,sh1.nrows):
      server = []
      for col in [0,1,2,sh1.ncols-2,sh1.ncols-1]:
        server.append(sh1.cell(row,col).value)
      self.serverlist.append(server)
  def gen_new_password_excel(self):
    old_excel = xlrd.open_workbook(self.path)
    new_excel = copy(old_excel)
    ws = new_excel.get_sheet(0)
    coldt = "pass"+ str(datetime.date.today())
    ws.write(0,self.cols,coldt)
    for row in range(1,self.rows):
      ws.write(row,self.cols,self.gen_key())
    dt = time.strftime("%Y%m%d%H%M%S",time.localtime())
    new_excel.save(dt+self.path)
  def write_excel(self,serverlist):
    wb = xlwt.Workbook()
    ws = wb.add_sheet(u'sheet1',cell_overwrite_ok=True)
    header = ["IP","PORT","USERNAME","OLDPASS","NEWPASS","FLAG"]
    for col in range(0,6):
      ws.write(0,col,header[col])
    for row in range(len(serverlist)):
      for col in range(0,6):
        ws.write(row+1,col,serverlist[row][col])
    dt = time.strftime("%Y%m%d%H%M%S", time.localtime())
    wb.save(dt+".xlsx")
  def get_server_list(self):
    return self.serverlist
  def get_rows(self):
    return self.rows
  def get_cols(self):
    return self.cols
  def gen_key(self):
    pool = "1234567890abcdefghijklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM"
    length = len(pool)
    key = ""
    for i in range(28):
      c = random.randint(0,length)
      key += pool[c:c+1]
    return key

ChangePassword类

#_*_ coding: utf-8 _*_
'''
@author liaogs
'''
import paramiko
import sys
class ChangePassword():
  def __init__(self,hostip,port,username,oldpass,newpass):
    self.hostip = hostip
    self.port = port
    self.username = username
    self.oldpass = oldpass
    self.newpass = newpass
    self.updateflag = False
  def run_change(self):
    s = paramiko.SSHClient()
    s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    tasklist = []
    try:
      s.connect(hostname=self.hostip, port=self.port, username=self.username, password=self.oldpass)
      print ('"%s" is updating password' % self.hostip)
      stdin, stdout, stderr = s.exec_command('echo %s |passwd --stdin root' % self.newpass)
      r_message = stdout.read()
      if "successfully" in r_message:
        self.updateflag = True
        print('%s is successful' %self.hostip)
      else:
        print('%s is failed' %self.hostip)
        self.updateflag = False
      s.close()
    except Exception:
      self.updateflag = False
      print("connection error")
    tasklist = [self.hostip, self.port, self.username, self.oldpass, self.newpass, self.updateflag]
    return tasklist

main

#_*_ coding: utf-8 _*_
'''
@author liaogs
'''
import re
import sys
from excelhandler import excelhandler
from changepassword import ChangePassword
if __name__ == '__main__':
  if len(sys.argv) == 1:
    eh = excelhandler("pass.xlsx")
  else:
    eh = excelhandler(sys.argv[1])
  eh.read_excel()
  def updatepassword():
    ret = eh.get_server_list()
    tasklist = []
    for i in range(len(ret)):
      print(ret[i][0],ret[i][2],ret[i][1],ret[i][3],ret[i][4])
      cp = ChangePassword(hostip=ret[i][0],port=int(ret[i][2]),username=ret[i][1],oldpass=ret[i][3],newpass=ret[i][4])
      task = cp.run_change()
      tasklist.append(task)
    print(tasklist)
    eh.write_excel(tasklist)
  while True:
    inp = input("1、生成密码 2、更新密码>>")
    if str(inp) == "1":
      eh.gen_new_password_excel()
    elif str(inp) == "2":
      updatepassword()
    elif inp == "exit":
      exit()
    else:
      continue

代码下载:https://github.com/liaogs/changepassword.git

总结

以上所述是小编给大家介绍的python实现批量修改服务器密码的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
详解Python3中字符串中的数字提取方法
Jan 14 Python
python 根据pid杀死相应进程的方法
Jan 16 Python
Python随机生成均匀分布在单位圆内的点代码示例
Nov 13 Python
Python3模拟登录操作实例分析
Mar 12 Python
Python生成指定数量的优惠码实操内容
Jun 18 Python
Python Matplotlib 基于networkx画关系网络图
Jul 10 Python
python装饰器代替set get方法实例
Dec 19 Python
Python读取YAML文件过程详解
Dec 30 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
python实现小程序推送页面收录脚本
Apr 20 Python
Python如何使用神经网络进行简单文本分类
Feb 25 Python
python 镜像环境搭建总结
Sep 23 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 #Python
Python实现微信翻译机器人的方法
Aug 13 #Python
python读写csv文件的方法
Aug 13 #Python
python根据多个文件名批量查找文件
Aug 13 #Python
详解django实现自定义manage命令的扩展
Aug 13 #Python
Python一键安装全部依赖包的方法
Aug 12 #Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
Aug 12 #Python
You might like
php生成excel列序号代码实例
2013/12/24 PHP
php实现批量压缩图片文件大小的脚本
2014/07/04 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
vue实现数字滚动效果
2020/06/29 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
python实现稀疏矩阵示例代码
2017/06/09 Python
Python定时任务sched模块用法示例
2018/07/16 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
指针和引用有什么区别
2013/01/13 面试题
学校经典推荐信
2013/10/30 职场文书
消防先进事迹材料
2014/02/10 职场文书
行政部岗位职责范本
2014/03/13 职场文书
学校出纳员岗位职责
2014/03/18 职场文书
老干部工作先进事迹
2014/08/17 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
岳麓书院导游词
2015/02/03 职场文书
财务会计求职信范文
2015/03/20 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
Nginx 根据URL带的参数转发的实现
2021/04/01 Servers
python flask框架快速入门
2021/05/14 Python
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS