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 相关文章推荐
python实现数通设备端口监控示例
Apr 02 Python
python的绘图工具matplotlib使用实例
Jul 03 Python
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
python使用PIL模块获取图片像素点的方法
Jan 08 Python
python设置环境变量的原因和方法
Jun 24 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
Aug 12 Python
python使用sessions模拟登录淘宝的方式
Aug 16 Python
Python中list循环遍历删除数据的正确方法
Sep 02 Python
python 命名规范知识点汇总
Feb 14 Python
python读取hdfs并返回dataframe教程
Jun 05 Python
浅谈keras中的目标函数和优化函数MSE用法
Jun 10 Python
python安装及变量名介绍详解
Dec 12 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
人大复印资料处理程序_补充篇
2006/10/09 PHP
基于php的微信公众平台开发入门实例
2015/04/15 PHP
php生成图片验证码
2015/06/09 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
php使用scandir()函数扫描指定目录下所有文件示例
2019/06/08 PHP
20款超赞的jQuery插件 Web开发人员必备
2011/02/26 Javascript
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
js实现ArrayList功能附实例代码
2014/10/29 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
详解如何在angular2中获取节点
2017/11/23 Javascript
解决vuecli3.0热更新失效的问题
2018/09/19 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
2019/05/05 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
JS如何生成动态列表
2020/09/22 Javascript
django批量导入xml数据
2016/10/16 Python
Python处理PDF及生成多层PDF实例代码
2017/04/24 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
python xlsxwriter模块的使用
2020/12/24 Python
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
英文简历中的自我评价
2013/10/06 职场文书
我的大学生活职业生涯规划
2014/01/02 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
《真想变成大大的荷叶》教学反思
2014/04/14 职场文书
学雷锋倡议书
2015/01/19 职场文书
个人自荐书范文
2015/03/09 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫