python实现批量修改服务器密码
需求:机房、线上有多台主机,为了保障安全,需要定期修改密码。若手动修改,费时费力易出错。
程序应该满足如下需求 :
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) == "":
eh.gen_new_password_excel() elif str(inp) == "":
updatepassword() elif inp == "exit":
exit()
else:
continue
代码下载:https://github.com/liaogs/changepassword.git
python实现批量修改服务器密码的更多相关文章
- Python自动批量修改服务器密码
工作中,我们经常会定期更换服务器密码,如果手动去修改,不仅费时,而且容易出错.下面提供了一种思路,可以实现批量.自动修改服务器密码. 大致思路:首先,为每一台服务器设定一个唯一标识:其次,将每台服务器 ...
- Python脚本批量修改服务器密码
搭建环境 centos 7.4 使用脚本 python 批量修改connect用户的密码 生成密码为随机密码 保存为xls文档 passwd_chang #!/usr/bin/env python ...
- saltstack+python批量修改服务器密码
saltstack安装:略过 python脚本修改密码: # -*- coding utf-8 -*- import socket import re import os import sys imp ...
- Ansible playbook 批量修改服务器密码 先普通后root用户
fsckzy Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,r ...
- ansible批量修改服务器密码
看了一下网上代码大多数是ansible-playbook实现的,需要写一个脚本,或者手动传递变量进去. 以前用python tcp模块写过客户端主动上报修改密码脚本 今天写一个ansible主控客户端 ...
- (转)linux passwd批量修改用户密码
linux passwd批量修改用户密码 原文:http://blog.csdn.net/xuwuhao/article/details/46618913 对系统定期修改密码是一个很重要的安全常识, ...
- linux passwd批量修改用户密码
linux passwd批量修改用户密码 对系统定期修改密码是一个很重要的安全常识,通常,我们修改用户密码都使用 passwd user 这样的命令来修改密码,但是这样会进入交互模式,即使使用脚本也不 ...
- python批量修改ssh密码
由于工作需要本文主结合了excel表格,对表格中的ssh密码进行批量修改 以下是详细代码(python3): #!/usr/bin/env python#-*-coding:utf-8-*- impo ...
- 批量修改Linux密码脚本(Python)
搭建环境 centos 7.4 使用脚本 python 批量修改connect用户的密码 生成密码为随机密码 保存为xls文档 #!/usr/bin/env python # -*- coding: ...
随机推荐
- Docker学习の更改Docker的目录
一.更改虚拟磁盘的目录 虚拟机的默认存储位置是C:\Users\Administrator\.docker\machine\machines ,后期docke镜像文件会不断增加,为了给系统盘减负,最好 ...
- log-slave-updates参数
从库做为其他从库的主库时 log-slave-updates参数是必须要添加的,因为从库要作为其他从库的主库,必须添加该参数.该参数就是为了让从库从主库复制数据时可以写入到binlog日志,为什么要用 ...
- note : Get FilePathName from FILE_OBJECT
转自:http://blog.csdn.net/lostspeed/article/details/11738311 封了一个函数, 从 FILE_OBJECT 中 得到 FilePathName 在 ...
- PHP算法之两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...
- CodeForces - 803F
http://codeforces.com/problemset/problem/803/F #include <iostream> #include <cstdio> #in ...
- day19 装饰器
Python之路,Day7 = Python基础7 randomwrapper 包装材料:包装纸:书皮global a 全局的(也就是,函数最外面的那个)nonlocal a 局部的,上层的函数的变量 ...
- 云-腾讯云-实时音视频:实时音视频(TRTC)
ylbtech-云-腾讯云-实时音视频:实时音视频(TRTC) 支持跨终端.全平台之间互通,从零开始快速搭建实时音视频通信平台 1.返回顶部 1. 腾讯实时音视频(Tencent Real-Time ...
- Django rest framework (视图类详解)
官网:https://www.django-rest-framework.org/api-guide/viewsets/ 在django rest framework 视图中一共有N个类 第一类:AP ...
- Python操作三大主流数据库✍✍✍
Python操作三大主流数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库, ...
- python三元运算符公式/出错怎么看
成功 if 条件 else 失败 Tip:问题要从下往上看,出问题的是最底下的问题,