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: ...
随机推荐
- C#学习笔记----反射基础
反射基础 反射用于在程序运行过程中,获取类里面的信息或发现程序集并运行的一个过程.通过反射可以获得.dll和.exe后缀的程序集里面的信息.使用反射可以看到一个程序集内部的类,接口,字段,属性,方法, ...
- arc098D Xor Sum 2
题意:给你一个数列,问有多少对(l,r)满足A[l]+A[l+1]+...+A[r]=A[l]^A[l+1]^...^A[r]? 标程: #include<bits/stdc++.h> u ...
- Makefile 从入门到放弃
//如有侵权 请联系我进行删除 email:YZFHKM@163.com { 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作, ...
- windows api(GDI)实现图片旋转
GDI实现图片旋转,博主在网上找了好多资料,都不太如意. 并且在尝试中发现,如果先用SetViewportOrgEx将HDC上的坐标原点移动到图片中心:再在HDC上的获取每个点,用三角函数进行变换,算 ...
- 如何上传文件到git
具体有三大步骤: 一.创建新的仓库 二.本地仓库 三.git命令上传(需要下载git) 一.创建新的仓库 二.本地仓库 其实这个本地仓库就是文件的所在地,在哪都可以 三.git命令上传(需要下载g ...
- 通过aapt查看apk包名和第一个启动的activity
步骤: ps:aapt是sdk 自带的一个工具,在sdk\builds-tools目录下: 1. cmd启动控制台, 默认是c盘,输入“d:” 即可转到D盘目录 2. 到D盘后 输入cd 子文件目录转 ...
- 微信小程序 主题皮肤切换(switch开关)
示例效果: 功能点分析: 1.点击switch开关,切换主题皮肤(包括标题栏.底部tabBar):2.把皮肤设置保存到全局变量,在访问其它页面时也能有效果3.把设置保存到本地,退出应用再进来时,依然加 ...
- Java编译与反编译命令记录
1.首先进入java文件所在的地址 1) e:/ 2) dir (显示所有文件) 3) cd eclipse-workspace 2.使用javac命令编译Test.java文件,得到Test ...
- Java核心-02 Exception和Error有什么区别?
今天我要问你的问题是,请对比 Exception 和 Error,另外,运行时异常与一般异常有什么区别? 典型回答 Exception 和 Error 都是继承了 Throwable 类,在 Java ...
- Win10系统无法安装可选功能提示错误代码0x800F081F的解决方法
DISM /Online /Cleanup-Image /RestoreHealth /Source:wim:H:\sources\install.wim:1 /limitaccess